private boolean removeLastIfEnqueued(BuilderCodeTree tree) { if (tree.getCodeKind() == REMOVE_LAST) { return !clearLastRec(tree.removeLast, currentElement.getEnclosedElements()); } List<CodeTree> childTree = tree.getEnclosedElements(); if (childTree != null && !childTree.isEmpty()) { CodeTree last = childTree.get(0); if (last instanceof BuilderCodeTree) { if (!removeLastIfEnqueued((BuilderCodeTree) last)) { childTree.remove(0); } } } return true; }
private CodeTreeBuilder push(BuilderCodeTree tree, boolean removeLast) { if (currentElement != null) { if (removeLast && !removeLastIfEnqueued(tree)) { return this; } currentElement.add(tree); } switch (tree.getCodeKind()) { case COMMA_GROUP: case GROUP: case INDENT: currentElement = tree; break; } treeCount++; return this; }
private CodeTreeBuilder push(CodeTreeKind kind, TypeMirror type, String string) { return push(new BuilderCodeTree(currentElement, kind, type, string), kind == NEW_LINE); }
private CodeTreeBuilder push(TypeMirror type) { return push(new BuilderCodeTree(currentElement, CodeTreeKind.TYPE, type, null), false); }
private CodeTreeBuilder push(BuilderCodeTree tree, boolean removeLast) { if (currentElement != null) { if (removeLast && !removeLastIfEnqueued(tree)) { return this; } currentElement.add(tree); } switch (tree.getCodeKind()) { case COMMA_GROUP: case GROUP: case INDENT: currentElement = tree; break; } treeCount++; return this; }
private void registerCallBack(EndCallback callback) { currentElement.registerAtEnd(callback); }
private void registerCallBack(EndCallback callback) { currentElement.registerAtEnd(callback); }
@Override public String toString() { return root.toString(); }
private boolean removeLastIfEnqueued(BuilderCodeTree tree) { if (tree.getCodeKind() == REMOVE_LAST) { return !clearLastRec(tree.removeLast, currentElement.getEnclosedElements()); } List<CodeTree> childTree = tree.getEnclosedElements(); if (childTree != null && !childTree.isEmpty()) { CodeTree last = childTree.get(0); if (last instanceof BuilderCodeTree) { if (!removeLastIfEnqueued((BuilderCodeTree) last)) { childTree.remove(0); } } } return true; }
private CodeTreeBuilder push(TypeMirror type) { return push(new BuilderCodeTree(currentElement, CodeTreeKind.TYPE, type, null), false); }
private CodeTreeBuilder push(CodeTreeKind kind) { return push(new BuilderCodeTree(currentElement, kind, null, null), kind == NEW_LINE); }
private CodeTreeBuilder push(String string) { return push(new BuilderCodeTree(currentElement, CodeTreeKind.STRING, null, string), false); }
private CodeTreeBuilder push(CodeTreeKind kind, TypeMirror type, String string) { return push(new BuilderCodeTree(currentElement, kind, type, string), kind == NEW_LINE); }
private CodeTreeBuilder push(CodeTreeKind kind) { return push(new BuilderCodeTree(currentElement, kind, null, null), kind == NEW_LINE); }
public CodeTreeBuilder(CodeTreeBuilder parent) { this.root = new BuilderCodeTree(null, GROUP, null, null); this.currentElement = root; if (parent != null) { this.enclosingElement = parent.enclosingElement; } }
private void toParent() { CodeTree parentElement = currentElement.getParent(); if (currentElement != root) { this.currentElement = (BuilderCodeTree) parentElement; } else { this.currentElement = root; } }
public CodeTreeBuilder end() { BuilderCodeTree tree = currentElement; EndCallback callback = tree.getAtEndListener(); if (callback != null) { callback.beforeEnd(); toParent(); callback.afterEnd(); } else { toParent(); } return this; }
private CodeTreeBuilder push(String string) { return push(new BuilderCodeTree(currentElement, CodeTreeKind.STRING, null, string), false); }
private void clearLast(CodeTreeKind kind) { if (clearLastRec(kind, currentElement.getEnclosedElements())) { treeCount--; } else { // delay clearing the last BuilderCodeTree tree = new BuilderCodeTree(currentElement, REMOVE_LAST, null, null); tree.removeLast = kind; push(tree, false); } }
public CodeTreeBuilder(CodeTreeBuilder parent) { this.root = new BuilderCodeTree(null, GROUP, null, null); this.currentElement = root; if (parent != null) { this.enclosingElement = parent.enclosingElement; } }