use of org.eclipse.xtext.util.ITextRegion in project xtext-core by eclipse.
the class RegionDiffFormatter method collectRegionsToFormat.
protected Collection<ITextRegion> collectRegionsToFormat(ITextRegionAccessDiff regions) {
List<ITextRegion> result = Lists.newArrayList();
for (ITextSegmentDiff diff : regions.getRegionDifferences()) {
int offset = diff.getModifiedFirstRegion().getOffset();
int length = diff.getModifiedLastRegion().getEndOffset() - offset;
ITextSegment region = regions.regionForOffset(offset, length);
result.add(region);
}
return result;
}
use of org.eclipse.xtext.util.ITextRegion in project xtext-core by eclipse.
the class DefaultDocumentHighlightService method getDocumentHighlights.
@Override
public List<DocumentHighlight> getDocumentHighlights(final XtextResource resource, final int offset) {
if (resource == null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.warn("Resource was null.");
}
return emptyList();
}
final URI uri = resource.getURI();
if (offset < 0) {
if (LOGGER.isDebugEnabled()) {
LOGGER.warn("Invalid offset argument. Offset must be a non-negative integer for resource: " + uri);
}
return emptyList();
}
final IParseResult parseResult = resource.getParseResult();
if (parseResult == null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.warn("Parse result was null for resource: " + uri);
}
return emptyList();
}
final ICompositeNode rootNode = parseResult.getRootNode();
final String docContent = rootNode.getText();
final int docLength = docContent.length();
if (offset >= docLength) {
if (LOGGER.isDebugEnabled()) {
LOGGER.warn("Offset exceeds document lenght. Document was " + docLength + " and offset was: " + offset + " for resource: " + uri);
}
return emptyList();
}
final EObject selectedElemnt = offsetHelper.resolveElementAt(resource, offset);
if (!isDocumentHighlightAvailableFor(selectedElemnt, resource, offset)) {
return emptyList();
}
final Supplier<Document> docSupplier = Suppliers.memoize(() -> new Document(UNUSED_VERSION, docContent));
Iterable<URI> targetURIs = getTargetURIs(selectedElemnt);
if (!(targetURIs instanceof TargetURIs)) {
final TargetURIs result = targetURIsProvider.get();
result.addAllURIs(targetURIs);
targetURIs = result;
}
final Builder<DocumentHighlight> resultBuilder = ImmutableList.<DocumentHighlight>builder();
final Acceptor acceptor = (Acceptor2) (source, sourceURI, eReference, index, targetOrProxy, targetURI) -> {
final ITextRegion region = locationInFileProvider.getSignificantTextRegion(source, eReference, index);
if (!isNullOrEmpty(region)) {
resultBuilder.add(textRegionTransformer.apply(docSupplier.get(), region, DocumentHighlightKind.Read));
}
};
referenceFinder.findReferences((TargetURIs) targetURIs, resource, acceptor, new NullProgressMonitor());
if (resource.equals(selectedElemnt.eResource())) {
final ITextRegion region = locationInFileProvider.getSignificantTextRegion(selectedElemnt);
if (!isNullOrEmpty(region)) {
resultBuilder.add(textRegionTransformer.apply(docSupplier.get(), region, DocumentHighlightKind.Write));
}
}
return FluentIterable.from(resultBuilder.build()).toSortedList(comparator);
}
use of org.eclipse.xtext.util.ITextRegion in project xtext-core by eclipse.
the class DocumentExtensions method newLocation.
public Location newLocation(final EObject object) {
final Resource resource = object.eResource();
final ITextRegion textRegion = this.locationInFileProvider.getSignificantTextRegion(object);
return this.newLocation(resource, textRegion);
}
use of org.eclipse.xtext.util.ITextRegion in project xtext-core by eclipse.
the class HoverService method createContext.
protected HoverContext createContext(final Document document, final XtextResource resource, final int offset) {
final EObject crossLinkedEObject = this._eObjectAtOffsetHelper.resolveCrossReferencedElementAt(resource, offset);
if ((crossLinkedEObject != null)) {
boolean _eIsProxy = crossLinkedEObject.eIsProxy();
if (_eIsProxy) {
return null;
}
final IParseResult parseResult = resource.getParseResult();
if ((parseResult == null)) {
return null;
}
ILeafNode leafNode = NodeModelUtils.findLeafNodeAtOffset(parseResult.getRootNode(), offset);
if ((((leafNode != null) && leafNode.isHidden()) && (leafNode.getOffset() == offset))) {
leafNode = NodeModelUtils.findLeafNodeAtOffset(parseResult.getRootNode(), (offset - 1));
}
if ((leafNode == null)) {
return null;
}
final ITextRegion leafRegion = leafNode.getTextRegion();
return new HoverContext(document, resource, offset, leafRegion, crossLinkedEObject);
}
final EObject element = this._eObjectAtOffsetHelper.resolveElementAt(resource, offset);
if ((element == null)) {
return null;
}
final ITextRegion region = this._iLocationInFileProvider.getSignificantTextRegion(element);
return new HoverContext(document, resource, offset, region, element);
}
use of org.eclipse.xtext.util.ITextRegion in project xtext-core by eclipse.
the class SerializerTestHelper method assertSerializeWithoutNodeModel.
public void assertSerializeWithoutNodeModel(EObject semanticObject) {
try {
EObject parsed;
if (semanticObject.eResource().getContents().contains(semanticObject)) {
List<Pair<EObject, ICompositeNode>> nodes = detachNodeModel(semanticObject);
String serialized = serializeWithoutNodeModel(semanticObject);
parsed = parseHelper.parse(serialized, semanticObject.eResource().getResourceSet());
reattachNodes(nodes);
} else {
INode oldNode = NodeModelUtils.getNode(semanticObject);
String oldtext = oldNode.getRootNode().getText();
String oldURI = semanticObject.eResource().getURIFragment(semanticObject);
List<Pair<EObject, ICompositeNode>> nodes = detachNodeModel(semanticObject);
String serialized = serializeWithoutNodeModel(semanticObject);
ITextRegion oldRegion = oldNode.getTextRegion();
String newtext = oldtext.substring(0, oldRegion.getOffset()) + serialized + oldtext.substring(oldRegion.getOffset() + oldRegion.getLength());
EObject newmodel = parseHelper.parse(newtext, semanticObject.eResource().getResourceSet());
parsed = newmodel.eResource().getEObject(oldURI);
reattachNodes(nodes);
}
EcoreUtil.resolveAll(parsed);
Assert.assertTrue(parsed.eResource().getErrors().toString(), parsed.eResource().getErrors().isEmpty());
parsed.eResource().getResourceSet().getResources().remove(parsed.eResource());
assertEqualWithEmfFormatter(semanticObject, parsed);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Aggregations