如何加速 JavaParser
How to speed up JavaParser
我正在使用 JavaParser v3.13.5 从表达式构建 AST。我发现即使像 Objects.equals(a, b)
这样简单的解析表达式也会占用太多时间(~0.15 秒)。除了 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);
是否有任何方法可以被覆盖以抑制一些不必要的验证或其他东西?
也许您可以禁用您的示例中未使用的 LexicalPreservation。
实际上(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);
我正在使用 JavaParser v3.13.5 从表达式构建 AST。我发现即使像 Objects.equals(a, b)
这样简单的解析表达式也会占用太多时间(~0.15 秒)。除了 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);
是否有任何方法可以被覆盖以抑制一些不必要的验证或其他东西?
也许您可以禁用您的示例中未使用的 LexicalPreservation。
实际上(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);