@Override public boolean visitWhile(While node) { formatter.buildBlock(node); formatter.keyword("while"); formatter.space(); formatter.append("("); formatter.nameNextElement("condition"); visit(node.rawCondition()); formatter.append(")"); formatter.space(); formatter.startSuppressBlock(); visit(node.rawStatement()); formatter.endSuppressBlock(); formatter.closeBlock(); return true; }
@Override public boolean visitIdentifier(Identifier node) { String name = node.astValue(); if (name == null) name = FAIL + "NULL_IDENTIFIER" + FAIL; else if (name.isEmpty()) name = FAIL + "EMPTY_IDENTIFIER" + FAIL; else if (!isValidJavaIdentifier(name)) name = FAIL + "INVALID_IDENTIFIER: " + name + FAIL; formatter.buildInline(node); formatter.property("name", name); formatter.append(name); formatter.closeInline(); return true; }
@Override public boolean visitKeywordModifier(KeywordModifier node) { formatter.buildInline(node); formatter.property("modifier", node.astName()); if (node.astName() == null || node.astName().isEmpty()) formatter.fail("MISSING_MODIFIER"); else formatter.keyword(node.astName()); formatter.closeInline(); return true; }
@Override public boolean visitDefault(Default node) { formatter.buildBlock(node); formatter.keyword("default"); formatter.append(":"); formatter.closeBlock(); return true; }
@Override public boolean visitEmptyDeclaration(EmptyDeclaration node) { formatter.buildBlock(node); formatter.append(";"); formatter.closeBlock(); return true; } }
@Override public boolean visitNode(Node node) { formatter.buildBlock(node); formatter.fail("NOT_IMPLEMENTED: " + node.getClass().getSimpleName()); formatter.closeBlock(); return false; }
@Override public boolean visitSwitch(Switch node) { formatter.buildBlock(node); formatter.keyword("switch"); formatter.space(); formatter.append("("); formatter.nameNextElement("operand"); visit(node.rawCondition()); formatter.append(")"); formatter.space(); formatter.closeBlock(); return true; formatter.append("{"); formatter.buildBlock(null); formatter.startSuppressIndent(); visit(child); formatter.endSuppressIndent(); } else { visit(child); formatter.closeBlock(); formatter.append("}"); formatter.closeBlock(); return true;
@Override public boolean visitCatch(Catch node) { formatter.buildInline(node); formatter.keyword("catch"); formatter.space(); formatter.append("("); visit(node.rawExceptionDeclaration()); formatter.append(")"); formatter.space(); formatter.startSuppressBlock(); visit(node.rawBody()); formatter.endSuppressBlock(); formatter.closeInline(); return true; }
@Override public boolean visitStaticInitializer(StaticInitializer node) { formatter.buildBlock(node); formatter.keyword("static"); formatter.space(); formatter.startSuppressBlock(); visit(node.rawBody()); formatter.endSuppressBlock(); formatter.closeBlock(); return true; }
@Override public boolean visitEnumConstant(EnumConstant node) { visit(node.rawJavadoc()); formatter.buildInline(node); visitAllSuppressed(node.rawAnnotations(), "\n", "", "\n"); formatter.nameNextElement("name"); visit(node.astName()); visitAll(node.rawArguments(), ", ", "(", ")"); if (node.rawBody() != null) { formatter.space(); formatter.startSuppressBlock(); visit(node.rawBody()); formatter.endSuppressBlock(); } formatter.closeInline(); return true; }
@Override public boolean visitAnnotationValueArray(AnnotationValueArray node) { formatter.buildInline(node); formatter.append("{"); visitAll(node.rawValues(), ", ", "", ""); formatter.append("}"); formatter.closeInline(); return true; }
@Override public boolean visitComment(Comment node) { formatter.buildBlock(node); formatter.append(node.astBlockComment() ? "/*" : "//"); if (node.astContent() == null) formatter.fail("MISSING_COMMENT"); else formatter.append(node.astContent()); if (node.astBlockComment()) formatter.append("*/"); formatter.closeBlock(); return true; }
@Override public boolean visitInstanceInitializer(InstanceInitializer node) { formatter.buildBlock(node); formatter.startSuppressBlock(); visit(node.rawBody()); formatter.endSuppressBlock(); formatter.closeBlock(); return true; }
@Override public String process(Source source, Node in) throws ConversionProblem { SourceFormatter formatter = new TextFormatter(); in.accept(new SourcePrinter(formatter)); for (ParseProblem x : source.getProblems()) { formatter.addError(x.getPosition().getStart(), x.getPosition().getEnd(), x.getMessage()); } return formatter.finish(); } };
@Override public boolean visitClassLiteral(ClassLiteral node) { parensOpen(node); formatter.buildInline(node); visit(node.rawTypeReference()); formatter.append("."); formatter.keyword("class"); formatter.closeInline(); parensClose(node); return true; }
@Override public boolean visitLabelledStatement(LabelledStatement node) { formatter.buildBlock(node); formatter.nameNextElement("label"); visit(node.astLabel()); formatter.append(":"); visit(node.rawStatement()); formatter.closeBlock(); return true; }
@Override public boolean visitParseArtefact(Node node) { formatter.buildInline(node); formatter.fail("ARTEFACT: " + node.getClass().getSimpleName()); formatter.closeInline(); return true; }
private void visitAll0(String relation, RawListAccessor<?, ?> nodes, String separator, String prefix, String suffix, boolean suppress) { if (nodes.isEmpty()) return; append(prefix); boolean first = true; for (Node n : nodes) { if (!first) { append(separator); } first = false; formatter.nameNextElement(relation); if (suppress) formatter.startSuppressBlock(); visit(n); if (suppress) formatter.endSuppressBlock(); } append(suffix); }
@Override public boolean visitVariableReference(VariableReference node) { parensOpen(node); formatter.buildInline(node); visit(node.astIdentifier()); formatter.closeInline(); parensClose(node); return true; }
@Override public boolean visitCase(Case node) { formatter.buildBlock(node); formatter.keyword("case"); formatter.space(); formatter.nameNextElement("condition"); visit(node.rawCondition()); formatter.append(":"); formatter.closeBlock(); return true; }