From 183391e4d093e881129bc5795df805977c91692b Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Tue, 15 Feb 2022 21:34:26 -0500 Subject: [PATCH] Speed up java parsing a bit --- .../ide/vscode/boot/java/utils/ORAstUtils.java | 8 ++++++-- .../vscode/boot/java/utils/ORCompilationUnitCache.java | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORAstUtils.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORAstUtils.java index 915d46d7c..d9ac911a0 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORAstUtils.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORAstUtils.java @@ -493,13 +493,17 @@ public class ORAstUtils { } public static List parse(JavaParser parser, Iterable sourceFiles) { - List cus = parser.parse(sourceFiles, null, new InMemoryExecutionContext()); + InMemoryExecutionContext ctx = new InMemoryExecutionContext(); + ctx.putMessage(JavaParser.SKIP_SOURCE_SET_TYPE_GENERATION, true); + List cus = parser.parse(sourceFiles, null, ctx); List results = new UpdateSourcePositions().doNext(new MarkParentRecipe()).run(cus); return results.stream().map(r -> r.getAfter() == null ? r.getBefore() : r.getAfter()).map(CompilationUnit.class::cast).collect(Collectors.toList()); } public static List parseInputs(JavaParser parser, Iterable inputs) { - List cus = parser.parseInputs(inputs, null, new InMemoryExecutionContext()); + InMemoryExecutionContext ctx = new InMemoryExecutionContext(); + ctx.putMessage(JavaParser.SKIP_SOURCE_SET_TYPE_GENERATION, true); + List cus = parser.parseInputs(inputs, null, ctx); List results = new UpdateSourcePositions().doNext(new MarkParentRecipe()).run(cus); return results.stream().map(r -> r.getAfter() == null ? r.getBefore() : r.getAfter()).map(CompilationUnit.class::cast).collect(Collectors.toList()); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORCompilationUnitCache.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORCompilationUnitCache.java index 87fdd963c..d504e9533 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORCompilationUnitCache.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ORCompilationUnitCache.java @@ -119,6 +119,7 @@ public class ORCompilationUnitCache implements DocumentContentProvider, Disposab private JavaParser loadJavaParser(IJavaProject project) { try { return javaParsers.get(project, () -> { + logger.info("CU Cache: Creating new Java parser for project " + project.getElementName()); List classpath = getClasspathEntries(project).stream().map(s -> new File(s).toPath()).collect(Collectors.toList()); JavaParser jp = JavaParser.fromJavaVersion().build(); jp.setClasspath(classpath); @@ -205,9 +206,13 @@ public class ORCompilationUnitCache implements DocumentContentProvider, Disposab } }); + long start = System.currentTimeMillis(); + CompilationUnit compilationUnit = ORAstUtils.parseInputs(javaParser, List.of(input)).get(0); + System.out.println("Parse took: " + (System.currentTimeMillis() - start) + " for " + uri); + logger.info("CU Cache: created new AST for {}", uri.toString()); - return ORAstUtils.parseInputs(javaParser, List.of(input)).get(0); + return compilationUnit; });