public List<Tree> getChildren() { if(children == null) { children = new ArrayList<>(); children().forEach(child -> { // null children are ignored if (child != null) { children.add(child); } }); } return children; }
public List<Tree> getChildren() { if(children == null) { children = new ArrayList<>(); children().forEach(child -> { // null children are ignored if (child != null) { children.add(child); } }); } return children; }
private void visitChildren(Tree tree) { JavaTree javaTree = (JavaTree) tree; if (!javaTree.isLeaf()) { for (Tree next : javaTree.children()) { if (next != null) { visit(next); } } } }
private static boolean areEquivalent(@Nullable JavaTree leftNode, @Nullable JavaTree rightNode) { if (leftNode == rightNode) { return true; } if (leftNode == null || rightNode == null) { return false; } if (leftNode.kind() != rightNode.kind() || leftNode.is(Tree.Kind.OTHER)) { return false; } else if (leftNode.isLeaf()) { return areLeafsEquivalent(leftNode, rightNode); } Iterator<Tree> iteratorA = leftNode.children().iterator(); Iterator<Tree> iteratorB = rightNode.children().iterator(); while (iteratorA.hasNext() && iteratorB.hasNext()) { if (!areEquivalent(iteratorA.next(), iteratorB.next())) { return false; } } return !iteratorA.hasNext() && !iteratorB.hasNext(); }
@Nullable public static SyntaxToken lastSyntaxToken(@Nullable Tree tree) { if (tree == null || tree.is(Tree.Kind.INFERED_TYPE)) { return null; } else if (tree.is(Tree.Kind.TOKEN)) { return (SyntaxToken) tree; } ArrayList<Tree> childrenAsList = Lists.newArrayList(((JavaTree) tree).children()); for (Tree next : Lists.reverse(childrenAsList)) { SyntaxToken syntaxToken = lastSyntaxToken(next); if (syntaxToken != null) { return syntaxToken; } } return null; } }
@Nullable public static SyntaxToken firstSyntaxToken(@Nullable Tree tree) { if (tree == null || tree.is(Tree.Kind.INFERED_TYPE)) { return null; } else if (tree.is(Tree.Kind.TOKEN)) { return (SyntaxToken) tree; } for (Tree next : ((JavaTree) tree).children()) { SyntaxToken syntaxToken = firstSyntaxToken(next); if (syntaxToken != null) { return syntaxToken; } } return null; } }
private static Tree createParentLink(JavaTree parent) { if (!parent.isLeaf()) { for (Tree nextTree : parent.children()) { JavaTree next = (JavaTree) nextTree; if (next != null) { next.setParent(parent); createParentLink(next); } } } return parent; } }