/** * Parse a file and print the parse tree. * @param file the file to print. * @return parse tree as a string * @throws IOException if the file could not be read. */ public static String printFileAst(File file) throws IOException { return printTree(parseFile(file), "", ""); }
/** * Parses block comment as javadoc and prints its tree. * @param node block comment begin * @return string javadoc tree */ private static String parseAndPrintJavadocTree(DetailAST node) { final DetailAST javadocBlock = node.getParent(); final DetailNode tree = DetailNodeTreeStringPrinter.parseJavadocAsDetailNode(javadocBlock); String baseIndentation = getIndentation(node); baseIndentation = baseIndentation.substring(0, baseIndentation.length() - 2); final String rootPrefix = baseIndentation + " `--"; final String prefix = baseIndentation + " "; return DetailNodeTreeStringPrinter.printTree(tree, rootPrefix, prefix); }
/** * Print AST. * @param ast the root AST node. * @param rootPrefix prefix for the root node * @param prefix prefix for other nodes * @return string AST. */ public static String printTree(DetailNode ast, String rootPrefix, String prefix) { final StringBuilder messageBuilder = new StringBuilder(1024); DetailNode node = ast; while (node != null) { if (node.getType() == JavadocTokenTypes.JAVADOC) { messageBuilder.append(rootPrefix); } else { messageBuilder.append(prefix); } messageBuilder.append(getIndentation(node)) .append(JavadocUtil.getTokenName(node.getType())).append(" -> ") .append(JavadocUtil.escapeAllControlChars(node.getText())).append(" [") .append(node.getLineNumber()).append(':').append(node.getColumnNumber()) .append(']').append(LINE_SEPARATOR) .append(printTree(JavadocUtil.getFirstChild(node), rootPrefix, prefix)); node = JavadocUtil.getNextSibling(node); } return messageBuilder.toString(); }
@Test public void testParseJavadocAsDetailNode() throws Exception { final DetailAST ast = JavaParser.parseFile( new File(getPath("InputJavadocDetailNodeParser.java")), JavaParser.Options.WITH_COMMENTS) .getNextSibling().getFirstChild().getFirstChild(); final JavadocDetailNodeParser parser = new JavadocDetailNodeParser(); final JavadocDetailNodeParser.ParseStatus status = parser.parseJavadocAsDetailNode(ast); final String actual = DetailNodeTreeStringPrinter.printTree(status.getTree(), "", ""); final String expected; // line separators in the input file while running this test on Windows are different, // so when we try to print tree, output also will have different line separators on windows // and linux. if (OS_NAME.startsWith("windows")) { expected = new String(Files.readAllBytes(Paths.get( getPath("ExpectedJavadocDetailNodeParserWindows.txt"))), StandardCharsets.UTF_8); } else { expected = new String(Files.readAllBytes(Paths.get( getPath("ExpectedJavadocDetailNodeParser.txt"))), StandardCharsets.UTF_8); } assertEquals("Invalid parse result", expected, actual); }
/** * Parse a file and print the parse tree. * @param file the file to print. * @return parse tree as a string * @throws IOException if the file could not be read. */ public static String printFileAst(File file) throws IOException { return printTree(parseFile(file), "", ""); }
/** * Parses block comment as javadoc and prints its tree. * @param node block comment begin * @return string javadoc tree */ private static String parseAndPrintJavadocTree(DetailAST node) { final DetailAST javadocBlock = node.getParent(); final DetailNode tree = DetailNodeTreeStringPrinter.parseJavadocAsDetailNode(javadocBlock); String baseIndentation = getIndentation(node); baseIndentation = baseIndentation.substring(0, baseIndentation.length() - 2); final String rootPrefix = baseIndentation + " `--"; final String prefix = baseIndentation + " "; return DetailNodeTreeStringPrinter.printTree(tree, rootPrefix, prefix); }
/** * Print AST. * @param ast the root AST node. * @param rootPrefix prefix for the root node * @param prefix prefix for other nodes * @return string AST. */ public static String printTree(DetailNode ast, String rootPrefix, String prefix) { final StringBuilder messageBuilder = new StringBuilder(1024); DetailNode node = ast; while (node != null) { if (node.getType() == JavadocTokenTypes.JAVADOC) { messageBuilder.append(rootPrefix); } else { messageBuilder.append(prefix); } messageBuilder.append(getIndentation(node)) .append(JavadocUtil.getTokenName(node.getType())).append(" -> ") .append(JavadocUtil.escapeAllControlChars(node.getText())).append(" [") .append(node.getLineNumber()).append(':').append(node.getColumnNumber()) .append(']').append(LINE_SEPARATOR) .append(printTree(JavadocUtil.getFirstChild(node), rootPrefix, prefix)); node = JavadocUtil.getNextSibling(node); } return messageBuilder.toString(); }