Slight performance improvements for recipes

This commit is contained in:
aboyko
2023-02-07 09:52:43 -05:00
parent 6f84d30dea
commit ac946ff6dd
15 changed files with 98 additions and 66 deletions

View File

@@ -0,0 +1,30 @@
/*******************************************************************************
* Copyright (c) 2022 VMware, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.commons.rewrite.java;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.tree.Space;
import org.openrewrite.java.tree.Space.Location;
import org.openrewrite.marker.Markers;
public class JavaMarkerVisitor<P> extends JavaIsoVisitor<P> {
@Override
public Space visitSpace(Space space, Location loc, P p) {
return space;
}
@Override
public Markers visitMarkers(Markers markers, P p) {
return markers;
}
}

View File

@@ -29,8 +29,6 @@ import org.openrewrite.ExecutionContext;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.Parser;
import org.openrewrite.Recipe;
import org.openrewrite.RecipeRun;
import org.openrewrite.Result;
import org.openrewrite.Tree;
import org.openrewrite.TreeVisitor;
import org.openrewrite.internal.RecipeIntrospectionUtils;
@@ -281,9 +279,16 @@ public class ORAstUtils {
synchronized(parser) {
cus = parser.parse(sourceFiles, null, ctx);
}
RecipeRun reciperun = new UpdateSourcePositions()/*.doNext(new MarkParentRecipe())*/.run(cus);
List<Result> results = reciperun.getResults();
return results.stream().map(r -> r.getAfter() == null ? r.getBefore() : r.getAfter()).map(CompilationUnit.class::cast).collect(Collectors.toList());
List<J.CompilationUnit> finalCus = new ArrayList<>(cus.size());
for (CompilationUnit cu : cus) {
J.CompilationUnit newCu = (J.CompilationUnit) new UpdateSourcePositions().getVisitor().visit(cu, ctx);
if (newCu == null) {
finalCus.add(cu);
} else {
finalCus.add(newCu);
}
}
return finalCus;
}
public static List<CompilationUnit> parseInputs(JavaParser parser, Iterable<Parser.Input> inputs) {
@@ -293,9 +298,16 @@ public class ORAstUtils {
synchronized (parser) {
cus = parser.parseInputs(inputs, null, ctx);
}
RecipeRun reciperun = new UpdateSourcePositions()/*.doNext(new MarkParentRecipe())*/.run(cus);
List<Result> results = reciperun.getResults();
return results.stream().map(r -> r.getAfter() == null ? r.getBefore() : r.getAfter()).map(CompilationUnit.class::cast).collect(Collectors.toList());
List<J.CompilationUnit> finalCus = new ArrayList<>(cus.size());
for (CompilationUnit cu : cus) {
J.CompilationUnit newCu = (J.CompilationUnit) new UpdateSourcePositions().getVisitor().visit(cu, ctx);
if (newCu == null) {
finalCus.add(cu);
} else {
finalCus.add(newCu);
}
}
return finalCus;
}
private static void logExceptionWhileParsing(Throwable t) {

View File

@@ -98,19 +98,15 @@ public class JdtReconciler implements JavaReconciler {
@Override
public void reconcile(IJavaProject project, final IDocument doc, final IProblemCollector problemCollector) {
long start = System.currentTimeMillis();
final long s = System.currentTimeMillis();
URI uri = URI.create(doc.getUri());
compilationUnitCache.withCompilationUnit(project, uri, cu -> {
if (cu != null) {
reconcileAST(project, doc, cu, problemCollector);
}
log.info("reconciling (JDT): " + doc.getUri() + " done in " + (System.currentTimeMillis() - s) + "ms");
return null;
});
long end = System.currentTimeMillis();
log.info("reconciling (JDT): " + doc.getUri() + " done in " + (end - start) + "ms");
}
private void reconcileAST(IJavaProject project, IDocument doc, CompilationUnit cu, IProblemCollector problemCollector) {
@@ -163,12 +159,6 @@ public class JdtReconciler implements JavaReconciler {
public Map<IDocument, Collection<ReconcileProblem>> reconcile(IJavaProject project, List<TextDocument> docs) {
if (config.isRewriteReconcileEnabled()) {
// long start = System.currentTimeMillis();
//
//
//
// long end = System.currentTimeMillis();
// log.info("reconciling project (JDT): " + project.getElementName() + " - " + docs.size() + " done in " + (end - start) + "ms");
}
return Collections.emptyMap();

View File

@@ -89,6 +89,7 @@ public class RewriteCompilationUnitCache implements DocumentContentProvider, Dis
JavaParser parser = javaParsers.getIfPresent(project.get().getLocationUri());
if (parser != null) {
// parser.reset(List.of(uri));
parser.reset();
}
}

View File

@@ -28,10 +28,10 @@ import org.openrewrite.ExecutionContext;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.Parser;
import org.openrewrite.Tree;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaParser;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.CompilationUnit;
import org.openrewrite.marker.Marker;
import org.openrewrite.marker.Range;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,6 +50,7 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.Reconcile
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
import org.springframework.ide.vscode.commons.rewrite.java.ORAstUtils;
import org.springframework.ide.vscode.commons.rewrite.maven.MavenProjectParser;
import org.springframework.ide.vscode.commons.util.text.IDocument;
@@ -73,7 +74,6 @@ public class RewriteReconciler implements JavaReconciler {
@Override
public void reconcile(IJavaProject project, IDocument doc, IProblemCollector problemCollector) {
if (!config.isRewriteReconcileEnabled()) {
return;
}
@@ -99,10 +99,8 @@ public class RewriteReconciler implements JavaReconciler {
}
} finally {
problemCollector.endCollecting();
}
long end = System.currentTimeMillis();
log.info("reconciling (OpenRewrite): " + doc.getUri() + " done in " + (end - start) + "ms");
log.info("reconciling (OpenRewrite): " + doc.getUri() + " done in " + (System.currentTimeMillis() - start) + "ms");
}
}
private List<ReconcileProblem> createProblems(IDocument doc, FixAssistMarker m, J astNode) {
@@ -308,25 +306,26 @@ public class RewriteReconciler implements JavaReconciler {
private void collectProblems(List<RecipeCodeActionDescriptor> descriptors, IDocument doc, CompilationUnit compilationUnit, Consumer<ReconcileProblem> problemHandler) {
CompilationUnit cu = recipeRepo.mark(descriptors, compilationUnit);
new JavaIsoVisitor<ExecutionContext>() {
@Override
public J visit(Tree tree, ExecutionContext context) {
J t = super.visit(tree, context);
if (t instanceof J) {
List<FixAssistMarker> markers = t.getMarkers().findAll(FixAssistMarker.class);
for (FixAssistMarker m : markers) {
for (ReconcileProblem problem : createProblems(doc, m, t)) {
problemHandler.accept(problem);
}
}
}
return t;
}
}.visit(cu, new InMemoryExecutionContext(e -> log.error("", e)));
if (compilationUnit != cu) {
new JavaMarkerVisitor<ExecutionContext>() {
@Override
public J visit(Tree tree, ExecutionContext context) {
J t = super.visit(tree, context);
if (t instanceof J) {
for (Marker m : t.getMarkers().entries()) {
if (m instanceof FixAssistMarker) {
for (ReconcileProblem problem : createProblems(doc, (FixAssistMarker) m, t)) {
problemHandler.accept(problem);
}
}
}
}
return t;
}
}.visit(cu, new InMemoryExecutionContext(e -> log.error("", e)));
}
}
}

View File

@@ -21,7 +21,6 @@ import org.openrewrite.Cursor;
import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.marker.JavaSourceSet;
import org.openrewrite.java.spring.AutowiredFieldIntoConstructorParameterVisitor;
@@ -42,6 +41,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.AnnotationHierarchies;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
import org.springframework.ide.vscode.commons.rewrite.java.ORAstUtils;
import org.springframework.ide.vscode.commons.rewrite.maven.MavenProjectParser;
@@ -53,7 +53,7 @@ public class AutowiredFieldIntoConstructorParameterCodeAction implements RecipeC
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<>() {
return new JavaMarkerVisitor<>() {
@Override
public CompilationUnit visitCompilationUnit(CompilationUnit cu, ExecutionContext p) {

View File

@@ -17,7 +17,6 @@ import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.internal.ListUtils;
import org.openrewrite.java.AnnotationMatcher;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.TypeUtils;
@@ -30,6 +29,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDes
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class BeanMethodNotPublicProblem implements RecipeCodeActionDescriptor {
@@ -41,7 +41,7 @@ public class BeanMethodNotPublicProblem implements RecipeCodeActionDescriptor {
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<ExecutionContext>() {
return new JavaMarkerVisitor<ExecutionContext>() {
@Override
public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext executionContext) {

View File

@@ -18,7 +18,6 @@ import java.util.stream.Collectors;
import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.J.MethodDeclaration;
@@ -32,6 +31,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.BeanPostProcessingIgnoreInAot;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class BeanPostProcessingIgnoreInAotProblem implements RecipeCodeActionDescriptor {
@@ -40,7 +40,7 @@ public class BeanPostProcessingIgnoreInAotProblem implements RecipeCodeActionDes
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<ExecutionContext>() {
return new JavaMarkerVisitor<ExecutionContext>() {
@Override
public ClassDeclaration visitClassDeclaration(ClassDeclaration classDecl, ExecutionContext p) {

View File

@@ -16,7 +16,6 @@ import java.util.List;
import org.openrewrite.ExecutionContext;
import org.openrewrite.Tree;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.MethodInvocation;
@@ -31,6 +30,7 @@ import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class Boot3NotSupportedTypeProblem implements RecipeCodeActionDescriptor {
@@ -42,7 +42,7 @@ public class Boot3NotSupportedTypeProblem implements RecipeCodeActionDescriptor
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<>() {
return new JavaMarkerVisitor<>() {
@Override
public J.Identifier visitIdentifier(J.Identifier ident, ExecutionContext executionContext) {
if (ident.getType() != null &&

View File

@@ -18,7 +18,6 @@ import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.internal.ListUtils;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.ClassDeclaration;
@@ -36,6 +35,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.AnnotationHierarchies;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class NoAutowiredOnConstructorProblem implements RecipeCodeActionDescriptor {
@@ -44,7 +44,7 @@ public class NoAutowiredOnConstructorProblem implements RecipeCodeActionDescript
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<ExecutionContext>() {
return new JavaMarkerVisitor<ExecutionContext>() {
public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext context) {
J.ClassDeclaration cd = super.visitClassDeclaration(classDecl, context);

View File

@@ -18,13 +18,12 @@ import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.internal.ListUtils;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.marker.Range;
import org.openrewrite.java.tree.JavaType;
import org.openrewrite.java.tree.TypeUtils;
import org.openrewrite.marker.Range;
import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.Annotations;
import org.springframework.ide.vscode.boot.java.Boot2JavaProblemType;
@@ -33,6 +32,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDes
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class NoRepoAnnotationProblem implements RecipeCodeActionDescriptor {
@@ -43,7 +43,7 @@ public class NoRepoAnnotationProblem implements RecipeCodeActionDescriptor {
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<ExecutionContext>() {
return new JavaMarkerVisitor<ExecutionContext>() {
@Override
public ClassDeclaration visitClassDeclaration(ClassDeclaration classDecl,

View File

@@ -18,7 +18,6 @@ import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.java.AnnotationMatcher;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
import org.openrewrite.marker.Range;
@@ -30,6 +29,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDes
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class NoRequestMappingAnnotationCodeAction implements RecipeCodeActionDescriptor {
@@ -39,7 +39,7 @@ public class NoRequestMappingAnnotationCodeAction implements RecipeCodeActionDes
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<ExecutionContext>() {
return new JavaMarkerVisitor<ExecutionContext>() {
@Override
public J.Annotation visitAnnotation(J.Annotation annotation, ExecutionContext ctx) {
J.Annotation a = super.visitAnnotation(annotation, ctx);

View File

@@ -23,7 +23,6 @@ import org.eclipse.lsp4j.WorkspaceSymbol;
import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.JavaType;
@@ -44,6 +43,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDes
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
@@ -60,7 +60,7 @@ public class NotRegisteredBeansProblem implements RecipeCodeActionDescriptor {
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<ExecutionContext>() {
return new JavaMarkerVisitor<ExecutionContext>() {
@Override
public ClassDeclaration visitClassDeclaration(ClassDeclaration classDecl, ExecutionContext p) {

View File

@@ -18,7 +18,6 @@ import org.openrewrite.Cursor;
import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.Return;
@@ -32,6 +31,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDes
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class PreciseBeanTypeProblem implements RecipeCodeActionDescriptor {
@@ -43,7 +43,7 @@ public class PreciseBeanTypeProblem implements RecipeCodeActionDescriptor {
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<>() {
return new JavaMarkerVisitor<>() {
public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext executionContext) {
J.MethodDeclaration m = super.visitMethodDeclaration(method, executionContext);

View File

@@ -20,7 +20,6 @@ import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.internal.ListUtils;
import org.openrewrite.java.AnnotationMatcher;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.JavaType.FullyQualified;
@@ -32,6 +31,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDes
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.JavaMarkerVisitor;
public class UnnecessarySpringExtensionProblem implements RecipeCodeActionDescriptor {
@@ -59,7 +59,7 @@ public class UnnecessarySpringExtensionProblem implements RecipeCodeActionDescri
@Override
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
return new JavaIsoVisitor<>() {
return new JavaMarkerVisitor<>() {
@Override
public ClassDeclaration visitClassDeclaration(ClassDeclaration classDecl, ExecutionContext p) {