Java Code Examples for org.eclipse.xtext.nodemodel.BidiTreeIterator#next()
The following examples show how to use
org.eclipse.xtext.nodemodel.BidiTreeIterator#next() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ImportRegionHelper.java From n4js with Eclipse Public License 1.0 | 6 votes |
/** * Goes from the beginning of the RootNode up to the passed in node. Looks only at hidden leafs and at * ASI-LeafNodes. * * @return {@code false} if any comment is encountered on the way. */ private boolean hasNoCommentUpTo(ILeafNode node) { if (node == null) return true; BidiTreeIterator<INode> iter = node.getRootNode().getAsTreeIterable().iterator(); while (iter.hasNext()) { INode curr = iter.next(); // exit case: if (curr == node) return true; if (curr instanceof LeafNode) { if (((LeafNode) curr).isHidden() || UtilN4.isIgnoredSyntaxErrorNode(curr, InternalSemicolonInjectingParser.SEMICOLON_INSERTED)) { // hidden OR ASI if (!curr.getText().trim().isEmpty()) { // token-text contains not only whitespace --> there must be a comment. return false; } } } } // should never be reached. throw new IllegalStateException("Iteration over-stepped the passed in node."); }
Example 2
Source File: NodeModelBuilder.java From xtext-core with Eclipse Public License 2.0 | 6 votes |
public void replaceAndTransferLookAhead(INode oldNode, INode newRootNode) { AbstractNode newNode = ((CompositeNode) newRootNode).basicGetFirstChild(); replaceWithoutChildren((AbstractNode) oldNode, newNode); if (oldNode instanceof ICompositeNode && newNode instanceof CompositeNode) { CompositeNode newCompositeNode = (CompositeNode) newNode; newCompositeNode.basicSetLookAhead(((ICompositeNode) oldNode).getLookAhead()); } ICompositeNode root = newNode.getRootNode(); BidiTreeIterator<AbstractNode> iterator = ((AbstractNode) root).basicIterator(); int offset = 0; while(iterator.hasNext()) { AbstractNode node = iterator.next(); if (node instanceof LeafNode) { ((LeafNode) node).basicSetTotalOffset(offset); offset += node.getTotalLength(); } } }
Example 3
Source File: AbstractPartialParserTest.java From xtext-core with Eclipse Public License 2.0 | 6 votes |
protected void assertSameStructure(ICompositeNode first, ICompositeNode second) { BidiTreeIterator<INode> firstIter = first.getAsTreeIterable().iterator(); BidiTreeIterator<INode> secondIter = second.getAsTreeIterable().iterator(); while(firstIter.hasNext()) { assertTrue(secondIter.hasNext()); INode firstNext = firstIter.next(); INode secondNext = secondIter.next(); assertEquals(firstNext.getGrammarElement(), secondNext.getGrammarElement()); assertEquals(firstNext.getClass(), secondNext.getClass()); assertEquals(firstNext.getTotalOffset(), secondNext.getTotalOffset()); assertEquals(firstNext.getTotalLength(), secondNext.getTotalLength()); assertEquals(firstNext.getText(), secondNext.getText()); } assertEquals(firstIter.hasNext(), secondIter.hasNext()); }
Example 4
Source File: SoliditySemanticHighlighter.java From solidity-ide with Eclipse Public License 1.0 | 5 votes |
private void provideHighLightForNamedElement(NamedElement namedElement, String textStyle, IHighlightedPositionAcceptor acceptor) { ICompositeNode node = NodeModelUtils.findActualNodeFor(namedElement); if (node != null && namedElement.getName() != null) { BidiTreeIterator<INode> iterator = node.getAsTreeIterable().iterator(); while (iterator.hasNext()) { INode nextNode = iterator.next(); if (namedElement.getName().equals(nextNode.getText())) { provideHighLightForNamedElement(namedElement, nextNode, textStyle, acceptor); } } } }
Example 5
Source File: XbaseValidator.java From xtext-extras with Eclipse Public License 2.0 | 5 votes |
protected INode getNode(BidiTreeIterator<INode> iterator, EObject... grammarElements) { while (iterator.hasNext()) { INode node = iterator.next(); EObject grammarElement = node.getGrammarElement(); for (EObject expectedGrammarElement : grammarElements) { if (grammarElement == expectedGrammarElement) { return node; } } } return null; }
Example 6
Source File: XbaseValidator.java From xtext-extras with Eclipse Public License 2.0 | 5 votes |
protected ILeafNode getFirstLeafNode(BidiTreeIterator<INode> iterator) { while(iterator.hasNext()) { INode child = iterator.next(); if (isHidden(child)) { continue; } if (child instanceof ILeafNode) { return (ILeafNode) child; } } return null; }
Example 7
Source File: PartialParserTest.java From xtext-core with Eclipse Public License 2.0 | 5 votes |
private void checkGrammarAssigned(ICompositeNode rootNode) { BidiTreeIterator<INode> iterator = rootNode.getAsTreeIterable().iterator(); while(iterator.hasNext()) { INode next = iterator.next(); if (next != rootNode) { assertNotNull(next.getGrammarElement()); } } }
Example 8
Source File: IndentationAwareCompletionPrefixProvider.java From xtext-core with Eclipse Public License 2.0 | 5 votes |
protected INode getLastCompleteNodeByOffset(INode node, int offset) { BidiTreeIterator<INode> iterator = node.getRootNode().getAsTreeIterable().iterator(); INode result = node; ITextRegion candidateTextRegion = node.getTextRegion(); while (iterator.hasNext()) { INode candidate = iterator.next(); ITextRegion textRegion = candidate.getTextRegion(); if (textRegion.getOffset() >= offset && !(textRegion.getOffset() == offset && textRegion.getLength() == 0)) { if (!candidateTextRegion.equals(textRegion) && candidate instanceof ILeafNode && textRegion.getLength() + textRegion.getOffset() >= offset) { break; } } if ((candidate instanceof ILeafNode) && (candidate.getGrammarElement() == null || candidate.getGrammarElement() instanceof AbstractElement || candidate.getGrammarElement() instanceof ParserRule)) { if (textRegion.getLength() == 0) { if (candidateTextRegion.getOffset() + candidateTextRegion.getLength() < offset || candidateTextRegion.getLength() == 0 && candidateTextRegion.getOffset() <= offset) { result = candidate; candidateTextRegion = candidate.getTextRegion(); } } else { result = candidate; candidateTextRegion = candidate.getTextRegion(); } } } return result; }
Example 9
Source File: ResourceStorageTest.java From xtext-extras with Eclipse Public License 2.0 | 4 votes |
@Test public void testWriteAndLoad() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("{"); _builder.newLine(); _builder.append("\t"); _builder.append("var x = \"Hello\""); _builder.newLine(); _builder.append("\t"); _builder.append("var y = \"\""); _builder.newLine(); _builder.append("\t"); _builder.append("val it = x"); _builder.newLine(); _builder.append("\t"); _builder.append("y = length.toString"); _builder.newLine(); _builder.append("\t"); _builder.append("println(x)"); _builder.newLine(); _builder.append("\t"); _builder.append("y = length.toString"); _builder.newLine(); _builder.append("\t"); _builder.append("println(x)"); _builder.newLine(); _builder.append("\t"); _builder.append("y = length.toString"); _builder.newLine(); _builder.append("\t"); _builder.append("println(x)"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final String contents = _builder.toString(); final XExpression file = this.expression(contents); final ByteArrayOutputStream bout = new ByteArrayOutputStream(); ((ResourceStorageFacade) this.resourceStorageFacade).setStoreNodeModel(true); Resource _eResource = file.eResource(); this.resourceStorageFacade.createResourceStorageWritable(bout).writeResource(((StorageAwareResource) _eResource)); byte[] _byteArray = bout.toByteArray(); ByteArrayInputStream _byteArrayInputStream = new ByteArrayInputStream(_byteArray); final ResourceStorageLoadable in = this.resourceStorageFacade.createResourceStorageLoadable(_byteArrayInputStream); Resource _createResource = file.eResource().getResourceSet().createResource(URI.createURI("synthetic:/Test.___xbase")); final StorageAwareResource resource = ((StorageAwareResource) _createResource); final ResourceStorageTest.InMemoryURIConverter converter = new ResourceStorageTest.InMemoryURIConverter(); converter.addModel(resource.getURI().toString(), contents); ResourceSet _resourceSet = resource.getResourceSet(); _resourceSet.setURIConverter(converter); EList<Resource> _resources = file.eResource().getResourceSet().getResources(); _resources.add(resource); resource.loadFromStorage(in); EObject _get = resource.getContents().get(0); final XExpression root = ((XExpression) _get); Assert.assertTrue((root instanceof XBlockExpression)); final BidiTreeIterator<INode> restoredNodes = NodeModelUtils.findActualNodeFor(IterableExtensions.<EObject>head(resource.getContents())).getAsTreeIterable().iterator(); final BidiTreeIterator<INode> originalNodes = NodeModelUtils.findActualNodeFor(file).getAsTreeIterable().iterator(); while (restoredNodes.hasNext()) { { final INode rest = restoredNodes.next(); final INode orig = originalNodes.next(); Assert.assertEquals(orig.getStartLine(), rest.getStartLine()); Assert.assertEquals(orig.getEndLine(), rest.getEndLine()); Assert.assertEquals(orig.getOffset(), rest.getOffset()); Assert.assertEquals(orig.getEndOffset(), rest.getEndOffset()); Assert.assertEquals(orig.getLength(), rest.getLength()); Assert.assertEquals(orig.getTotalStartLine(), rest.getTotalStartLine()); Assert.assertEquals(orig.getTotalEndLine(), rest.getTotalEndLine()); Assert.assertEquals(orig.getTotalOffset(), rest.getTotalOffset()); Assert.assertEquals(orig.getTotalEndOffset(), rest.getTotalEndOffset()); Assert.assertEquals(orig.getTotalLength(), rest.getTotalLength()); Assert.assertSame(orig.getGrammarElement(), rest.getGrammarElement()); Assert.assertTrue((((orig.getSemanticElement() != null) && (rest.getSemanticElement() != null)) || ((orig.getSemanticElement() == null) && (rest.getSemanticElement() == null)))); EObject _semanticElement = orig.getSemanticElement(); boolean _tripleNotEquals = (_semanticElement != null); if (_tripleNotEquals) { Assert.assertEquals(file.eResource().getURIFragment(orig.getSemanticElement()), resource.getURIFragment(rest.getSemanticElement())); } Assert.assertEquals(orig.getText(), rest.getText()); } } Assert.assertFalse(originalNodes.hasNext()); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } }
Example 10
Source File: ResourceStorageTest.java From xtext-xtend with Eclipse Public License 2.0 | 4 votes |
@Test public void testWriteAndLoad() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo"); _builder.newLine(); _builder.newLine(); _builder.append("class Bar {"); _builder.newLine(); _builder.append("\t"); _builder.append("def dispatch myMethod(String s) {}"); _builder.newLine(); _builder.append("\t"); _builder.append("/**"); _builder.newLine(); _builder.append("\t "); _builder.append("* Hello myMethod "); _builder.newLine(); _builder.append("\t "); _builder.append("*/"); _builder.newLine(); _builder.append("\t"); _builder.append("def dispatch myMethod(CharSequence cs) {}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); _builder.append("class Foo {"); _builder.newLine(); _builder.append("\t"); _builder.append("def dispatch other(String it) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("var x = \"\""); _builder.newLine(); _builder.append("\t\t"); _builder.append("x = length.toString"); _builder.newLine(); _builder.append("\t\t"); _builder.append("println(x)"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final String contents = _builder.toString(); final XtendFile file = this.file(contents); final ByteArrayOutputStream bout = new ByteArrayOutputStream(); ((ResourceStorageFacade) this.resourceStorageFacade).setStoreNodeModel(true); Resource _eResource = file.eResource(); this.resourceStorageFacade.createResourceStorageWritable(bout).writeResource(((StorageAwareResource) _eResource)); byte[] _byteArray = bout.toByteArray(); ByteArrayInputStream _byteArrayInputStream = new ByteArrayInputStream(_byteArray); final ResourceStorageLoadable in = this.resourceStorageFacade.createResourceStorageLoadable(_byteArrayInputStream); Resource _createResource = file.eResource().getResourceSet().createResource(URI.createURI("synthetic:/test/MyClass.xtend")); final StorageAwareResource resource = ((StorageAwareResource) _createResource); final InMemoryURIConverter converter = new InMemoryURIConverter(); converter.addModel(resource.getURI().toString(), contents); ResourceSet _resourceSet = resource.getResourceSet(); _resourceSet.setURIConverter(converter); EList<Resource> _resources = file.eResource().getResourceSet().getResources(); _resources.add(resource); resource.loadFromStorage(in); EObject _get = resource.getContents().get(1); final JvmGenericType jvmClass = ((JvmGenericType) _get); Assert.assertEquals("java.lang.CharSequence", IterableExtensions.<JvmFormalParameter>head((((JvmOperation[])Conversions.unwrapArray(jvmClass.getDeclaredOperations(), JvmOperation.class))[2]).getParameters()).getParameterType().getQualifiedName()); Assert.assertEquals("java.lang.Object", (((JvmOperation[])Conversions.unwrapArray(jvmClass.getDeclaredOperations(), JvmOperation.class))[2]).getReturnType().getQualifiedName()); Assert.assertEquals("Hello myMethod", IterableExtensions.<DocumentationAdapter>head(Iterables.<DocumentationAdapter>filter((((JvmOperation[])Conversions.unwrapArray(jvmClass.getDeclaredOperations(), JvmOperation.class))[1]).eAdapters(), DocumentationAdapter.class)).getDocumentation()); Assert.assertEquals(resource.getURI(), resource.getResourceDescription().getURI()); Assert.assertEquals(2, IterableExtensions.size(resource.getResourceDescription().getExportedObjects())); Assert.assertEquals("foo.Bar", IterableExtensions.<IEObjectDescription>head(resource.getResourceDescription().getExportedObjects()).getQualifiedName().toString()); final BidiTreeIterator<INode> restoredNodes = NodeModelUtils.findActualNodeFor(IterableExtensions.<EObject>head(resource.getContents())).getAsTreeIterable().iterator(); final BidiTreeIterator<INode> originalNodes = NodeModelUtils.findActualNodeFor(file).getAsTreeIterable().iterator(); while (restoredNodes.hasNext()) { { final INode rest = restoredNodes.next(); final INode orig = originalNodes.next(); Assert.assertEquals(orig.getStartLine(), rest.getStartLine()); Assert.assertEquals(orig.getEndLine(), rest.getEndLine()); Assert.assertEquals(orig.getOffset(), rest.getOffset()); Assert.assertEquals(orig.getEndOffset(), rest.getEndOffset()); Assert.assertEquals(orig.getLength(), rest.getLength()); Assert.assertEquals(orig.getTotalStartLine(), rest.getTotalStartLine()); Assert.assertEquals(orig.getTotalEndLine(), rest.getTotalEndLine()); Assert.assertEquals(orig.getTotalOffset(), rest.getTotalOffset()); Assert.assertEquals(orig.getTotalEndOffset(), rest.getTotalEndOffset()); Assert.assertEquals(orig.getTotalLength(), rest.getTotalLength()); Assert.assertSame(orig.getGrammarElement(), rest.getGrammarElement()); Assert.assertEquals(file.eResource().getURIFragment(orig.getSemanticElement()), resource.getURIFragment(rest.getSemanticElement())); Assert.assertEquals(orig.getText(), rest.getText()); } } Assert.assertFalse(originalNodes.hasNext()); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } }
Example 11
Source File: NodeModelUtils.java From xtext-core with Eclipse Public License 2.0 | 4 votes |
/** * Find the leaf node at the given offset. May return <code>null</code> if the given offset is not valid for the * node (sub-)tree. * * A node matches the <code>leafNodeOffset</code> if it fulfills the following condition: * <pre> * node.totalOffset <= leafNodeOffset && * node.totalEndOffset > leafNodeOffset * </pre> * * @param node the container node. May not be <code>null</code>. * @param leafNodeOffset the offset that is covered by the searched node. * @return the leaf node at the given offset or <code>null</code>. */ /* @Nullable */ public static ILeafNode findLeafNodeAtOffset(/* @NonNull */ INode node, int leafNodeOffset) { INode localNode = node; while(!(localNode instanceof AbstractNode)) { localNode = localNode.getParent(); } int offset = localNode.getTotalOffset(); int length = localNode.getTotalLength(); BidiTreeIterator<AbstractNode> iterator = ((AbstractNode) localNode).basicIterator(); if (leafNodeOffset > (offset + length) / 2) { while (iterator.hasPrevious()) { AbstractNode previous = iterator.previous(); int previousOffset = previous.getTotalOffset(); int previousLength = previous.getTotalLength(); if (!intersects(previousOffset, previousLength, leafNodeOffset)) { if (previousOffset + previousLength <= leafNodeOffset) { return null; } iterator.prune(); } else { if (previous instanceof ILeafNode) return (ILeafNode) previous; } } } else { while (iterator.hasNext()) { AbstractNode next = iterator.next(); int nextOffset = next.getTotalOffset(); int nextLength = next.getTotalLength(); if (!intersects(nextOffset, nextLength, leafNodeOffset)) { if (nextOffset > leafNodeOffset) { return null; } iterator.prune(); } else { if (next instanceof ILeafNode) return (ILeafNode) next; } } } return null; }