如何加快JavaParser

时间:2019-04-02 15:53:31

标签: java javaparser

我正在使用 JavaParser v3.13.5 从表达式构建AST。我发现,即使像Objects.equals(a, b)这样的简单解析表达式也要花费太多时间(〜0.15 s)。除了ParserConfiguration之外,是否还有其他选项可以加快解析速度?

编辑

用于重现结果的代码:

JavaParser javaParser = new JavaParser(
        new ParserConfiguration()
                .setStoreTokens(false)
                .setAttributeComments(false)
                .setDoNotAssignCommentsPrecedingEmptyLines(true)
                .setIgnoreAnnotationsWhenAttributingComments(true)
                .setLexicalPreservationEnabled(true)
                .setPreprocessUnicodeEscapes(false)
                .setLanguageLevel(LanguageLevel.RAW)
                .setCharacterEncoding(Providers.UTF8));

String strExpr = "Objects.equals(a, b)";

long start = System.currentTimeMillis();
//Expression expr = StaticJavaParser.parseExpression(strExpr); // even slower...
ParseResult<Expression> parseResult = javaParser.parseExpression(strExpr); // slow...
long end = System.currentTimeMillis();

System.out.println((double) (end-start)/1000);

是否有任何可以重写的方法来抑制一些不必要的验证或其他?

2 个答案:

答案 0 :(得分:1)

也许您可以禁用示例中未使用的LexicalPreservation。

答案 1 :(得分:1)

实际上(JP版本3.16.3)解析此语句需要2983.4纳秒。

 String code = "Objects.equals(a, b);";
 long start = System.nanoTime();
 Statement stmt = StaticJavaParser.parseStatement(code);
 long end = System.nanoTime();
 System.out.println((double) (end-start)/1000);