diff --git a/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameRecipe.java b/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameRecipe.java
index eb622dcb0..65533abcf 100644
--- a/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameRecipe.java
+++ b/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameRecipe.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022 VMware, Inc.
+ * Copyright (c) 2022, 2023 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
@@ -30,7 +30,7 @@ public class HelloMethodRenameRecipe extends Recipe {
}
@Override
- protected TreeVisitor, ExecutionContext> getVisitor() {
+ public TreeVisitor, ExecutionContext> getVisitor() {
return new JavaIsoVisitor<>() {
@Override
diff --git a/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/OssPackageRecipe.java b/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/OssPackageRecipe.java
index e8cef39a6..bb949a610 100644
--- a/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/OssPackageRecipe.java
+++ b/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/OssPackageRecipe.java
@@ -10,13 +10,21 @@
*******************************************************************************/
package org.springframework.rewrite.test;
+import org.openrewrite.ExecutionContext;
import org.openrewrite.Recipe;
+import org.openrewrite.TreeVisitor;
import org.openrewrite.java.ChangePackage;
public class OssPackageRecipe extends Recipe {
- public OssPackageRecipe() {
- doNext(new ChangePackage("com.example", "org.example", true));
+ @Override
+ public String getDescription() {
+ return "Change package 'com.example' to 'org.example'";
+ }
+
+ @Override
+ public TreeVisitor, ExecutionContext> getVisitor() {
+ return new ChangePackage("com.example", "org.example", true).getVisitor();
}
@Override
diff --git a/headless-services/commons/commons-rewrite/pom.xml b/headless-services/commons/commons-rewrite/pom.xml
index 006b7ee57..a26fb5a24 100644
--- a/headless-services/commons/commons-rewrite/pom.xml
+++ b/headless-services/commons/commons-rewrite/pom.xml
@@ -107,7 +107,73 @@
org.gradle
gradle-tooling-api
- 7.6
+ ${gradle-tooling.version}
+ runtime
+
+
+ org.gradle
+ gradle-base-services
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-core-api
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-language-groovy
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-language-java
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-logging
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-messaging
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-native
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-process-services
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-resources
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-testing-base
+ ${gradle-core.version}
+ runtime
+
+
+ org.gradle
+ gradle-testing-jvm
+ ${gradle-core.version}
runtime
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/LoadUtils.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/LoadUtils.java
index 88757b379..db6de870c 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/LoadUtils.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/LoadUtils.java
@@ -57,7 +57,7 @@ public class LoadUtils {
DeclarativeRecipe recipe = new DeclarativeRecipe(d.getName(), d.getDisplayName(), d.getDescription(),
d.getTags(), d.getEstimatedEffortPerOccurrence(), d.getSource(), false, d.getMaintainers());
for (RecipeDescriptor subDescriptor : d.getRecipeList()) {
- recipe.doNext(createRecipe(subDescriptor, getRecipeClass));
+ recipe.getRecipeList().add(createRecipe(subDescriptor, getRecipeClass));
}
return recipe;
} else {
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/gradle/GradleIJavaProjectParser.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/gradle/GradleIJavaProjectParser.java
index 559ea28fc..de98345a7 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/gradle/GradleIJavaProjectParser.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/gradle/GradleIJavaProjectParser.java
@@ -18,6 +18,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.openrewrite.ExecutionContext;
@@ -28,6 +29,7 @@ import org.openrewrite.gradle.marker.GradleProject;
import org.openrewrite.gradle.toolingapi.OpenRewriteModel;
import org.openrewrite.gradle.toolingapi.OpenRewriteModelBuilder;
import org.openrewrite.groovy.GroovyParser;
+import org.openrewrite.groovy.tree.G;
import org.openrewrite.internal.ListUtils;
import org.openrewrite.java.JavaParser.Builder;
import org.openrewrite.java.marker.JavaProject;
@@ -72,9 +74,10 @@ public class GradleIJavaProjectParser extends AbstractJavaProjectParser {
Path buildFilePath = Paths.get(jp.getProjectBuild().getBuildFile());
+ List gradleFiles = gradleParser.parseInputs(() ->
+ getInputs(Stream.of(buildFilePath)).iterator(), null, ctx).collect(Collectors.toList());
return ListUtils.map(
- gradleParser.parseInputs(() ->
- getInputs(Stream.of(buildFilePath)).iterator(), null, ctx), gb -> gb.withMarkers(gb.getMarkers().addIfAbsent(gradleProject))
+ gradleFiles, (i, gb) -> gb.withMarkers(gb.getMarkers().addIfAbsent(gradleProject))
);
}
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/BeanPostProcessingIgnoreInAot.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/BeanPostProcessingIgnoreInAot.java
index 5766fa60c..d29b13fbc 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/BeanPostProcessingIgnoreInAot.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/BeanPostProcessingIgnoreInAot.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022 VMware, Inc.
+ * Copyright (c) 2022, 2023 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
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.List;
import org.openrewrite.ExecutionContext;
+import org.openrewrite.Preconditions;
import org.openrewrite.Recipe;
import org.openrewrite.TreeVisitor;
import org.openrewrite.java.JavaIsoVisitor;
@@ -22,6 +23,7 @@ import org.openrewrite.java.JavaTemplate;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.JavaType;
import org.openrewrite.java.tree.TypeUtils;
+import org.openrewrite.marker.SearchResult;
public class BeanPostProcessingIgnoreInAot extends Recipe {
@@ -80,57 +82,56 @@ public class BeanPostProcessingIgnoreInAot extends Recipe {
}
@Override
- protected TreeVisitor, ExecutionContext> getApplicableTest() {
- return new JavaIsoVisitor() {
- @Override
- public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext executionContext) {
- if (isApplicableClass(classDecl)) {
- return classDecl.withMarkers(classDecl.getMarkers().searchResult());
- }
- return super.visitClassDeclaration(classDecl, executionContext);
- }
- };
- }
+ public TreeVisitor, ExecutionContext> getVisitor() {
+ return Preconditions.check(
+ new JavaIsoVisitor() {
+ @Override
+ public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl,
+ ExecutionContext executionContext) {
+ if (isApplicableClass(classDecl)) {
+ return SearchResult.found(classDecl);
+ }
+ return super.visitClassDeclaration(classDecl, executionContext);
+ }
+ },
+ new JavaIsoVisitor() {
- @Override
- protected TreeVisitor, ExecutionContext> getVisitor() {
- return new JavaIsoVisitor() {
+ private JavaTemplate createTemplate() {
+ return JavaTemplate.builder("@Override\n"
+ + "public boolean isBeanExcludedFromAotProcessing() {\n"
+ + " return false;\n"
+ + "}\n"
+ )
+ .javaParser(JavaParser.fromJavaVersion())
+ .build();
+ }
- private JavaTemplate createTemplate() {
- return JavaTemplate.builder(this::getCursor, "@Override\n"
- + "public boolean isBeanExcludedFromAotProcessing() {\n"
- + " return false;\n"
- + "}\n"
- )
- .javaParser(() -> JavaParser.fromJavaVersion().build())
- .build();
- }
+ @Override
+ public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext executionContext) {
+ J.ClassDeclaration c = super.visitClassDeclaration(classDecl, executionContext);
+ if (isApplicableClass(classDecl)) {
+ J.MethodDeclaration method = c.getBody().getStatements().stream().filter(J.MethodDeclaration.class::isInstance).map(J.MethodDeclaration.class::cast).filter(BeanPostProcessingIgnoreInAot::isApplicableMethod).findFirst().orElse(null);
+ if (method == null) {
+ c = c.withBody(createTemplate().apply(getCursor(), classDecl.getBody().getCoordinates().addMethodDeclaration((m1, m2) -> 1)));
+ }
+ }
+ return c;
+ }
- @Override
- public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext executionContext) {
- J.ClassDeclaration c = super.visitClassDeclaration(classDecl, executionContext);
- if (isApplicableClass(classDecl)) {
- J.MethodDeclaration method = c.getBody().getStatements().stream().filter(J.MethodDeclaration.class::isInstance).map(J.MethodDeclaration.class::cast).filter(BeanPostProcessingIgnoreInAot::isApplicableMethod).findFirst().orElse(null);
- if (method == null) {
- J.Block body = c.getBody().withTemplate(createTemplate(), classDecl.getBody().getCoordinates().addMethodDeclaration((m1, m2) -> 1));
- c = c.withBody(body);
- }
- }
- return c;
- }
-
- @Override
- public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext executionContext) {
- J.MethodDeclaration m = super.visitMethodDeclaration(method, executionContext);
- if (isApplicableMethod(m)) {
- J.ClassDeclaration c = getCursor().firstEnclosing(J.ClassDeclaration.class);
- if (c != null && isApplicableClass(c) && isReturnTrue(m)) {
- m = m.withTemplate(createTemplate(), m.getCoordinates().replace());
- }
- }
- return m;
- }
- };
+ @Override
+ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext executionContext) {
+ J.MethodDeclaration m = super.visitMethodDeclaration(method, executionContext);
+ if (isApplicableMethod(m)) {
+ J.ClassDeclaration c = getCursor().firstEnclosing(J.ClassDeclaration.class);
+ if (c != null && isApplicableClass(c) && isReturnTrue(m)) {
+ m = createTemplate().apply(getCursor(), m.getCoordinates().replace());
+ }
+ }
+ return m;
+ }
+ }
+ );
+
}
private static List findReturnStatementsInMethod(J.MethodDeclaration m) {
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ConvertAutowiredFieldIntoConstructorParameter.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ConvertAutowiredFieldIntoConstructorParameter.java
index cde8442b1..e2411a771 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ConvertAutowiredFieldIntoConstructorParameter.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ConvertAutowiredFieldIntoConstructorParameter.java
@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.commons.rewrite.java;
import org.openrewrite.ExecutionContext;
+import org.openrewrite.Preconditions;
import org.openrewrite.Recipe;
import org.openrewrite.TreeVisitor;
import org.openrewrite.java.search.UsesType;
@@ -34,13 +35,13 @@ public class ConvertAutowiredFieldIntoConstructorParameter extends Recipe {
}
@Override
- protected TreeVisitor, ExecutionContext> getSingleSourceApplicableTest() {
- return new UsesType(AUTOWIRED, false);
+ public TreeVisitor, ExecutionContext> getVisitor() {
+ return Preconditions.check(new UsesType(AUTOWIRED, false), new AutowiredFieldIntoConstructorParameterVisitor(classFqName, fieldName));
}
@Override
- protected TreeVisitor, ExecutionContext> getVisitor() {
- return new AutowiredFieldIntoConstructorParameterVisitor(classFqName, fieldName);
+ public String getDescription() {
+ return "Converts autowired fields into constructor parameters";
}
}
\ No newline at end of file
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java
index 943b96608..ba43f2699 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022 VMware, Inc.
+ * Copyright (c) 2022, 2023 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
@@ -59,7 +59,7 @@ public class DefineMethod extends Recipe {
}
@Override
- protected TreeVisitor, ExecutionContext> getVisitor() {
+ public TreeVisitor, ExecutionContext> getVisitor() {
return new JavaIsoVisitor() {
private MethodMatcher matcher = new MethodMatcher(targetFqName + ' ' + signature);
@@ -80,15 +80,14 @@ public class DefineMethod extends Recipe {
if (template != null && methodPresent == null) {
JavaType.FullyQualified type = c.getType();
if (type != null && targetFqName.equals(type.getFullyQualifiedName())) {
- JavaTemplate t = JavaTemplate.builder(() -> getCursor(), template)
- .javaParser(() -> JavaParser
+ JavaTemplate t = JavaTemplate.builder(template)
+ .javaParser(JavaParser
.fromJavaVersion()
.dependsOn(typeStubs.toArray(new String[typeStubs.size()]))
- .classpath(classpath.stream().map(s -> Paths.get(s)).collect(Collectors.toList()))
- .build())
+ .classpath(classpath.stream().map(s -> Paths.get(s)).collect(Collectors.toList())))
.imports(imports.toArray(new String[imports.size()])).build();
- J.Block body = classDecl.getBody().withTemplate(t, classDecl.getBody().getCoordinates().addMethodDeclaration((m, n) -> 1));
+ J.Block body = t.apply(getCursor(), classDecl.getBody().getCoordinates().addMethodDeclaration((m, n) -> 1));
for (String fq : imports) {
maybeAddImport(fq);
}
@@ -100,4 +99,9 @@ public class DefineMethod extends Recipe {
};
}
+ @Override
+ public String getDescription() {
+ return "Defines a bean declaration method in a type";
+ }
+
}
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java
index 04aba01a5..f29ca5078 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java
@@ -34,7 +34,6 @@ import org.openrewrite.Recipe;
import org.openrewrite.SourceFile;
import org.openrewrite.Tree;
import org.openrewrite.TreeVisitor;
-import org.openrewrite.internal.RecipeIntrospectionUtils;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaParser;
import org.openrewrite.java.JavaParser.Builder;
@@ -297,7 +296,7 @@ public class ORAstUtils {
ctx.putMessage(JavaParser.SKIP_SOURCE_SET_TYPE_GENERATION, true);
List cus = Collections.emptyList();
synchronized(parser) {
- cus = parser.parse(sourceFiles, null, ctx);
+ cus = parser.parse(sourceFiles, null, ctx).collect(Collectors.toList());
}
List finalCus = new ArrayList<>(cus.size());
for (CompilationUnit cu : cus) {
@@ -322,7 +321,7 @@ public class ORAstUtils {
List cus = Collections.emptyList();
// long start = System.currentTimeMillis();
synchronized (parser) {
- cus = parser.parseInputs(inputs, null, ctx);
+ cus = parser.parseInputs(inputs, null, ctx).collect(Collectors.toList());
}
// log.info("Rewrite parser: " + (System.currentTimeMillis() - start));
List finalCus = new ArrayList<>(cus.size());
@@ -379,17 +378,17 @@ public class ORAstUtils {
}
@SuppressWarnings("unchecked")
- private static List> getAfterVisitors(TreeVisitor visitor) {
+ private static List> getAfterVisitors(TreeVisitor, ExecutionContext> visitor) {
try {
Method m = TreeVisitor.class.getDeclaredMethod("getAfterVisit");
m.setAccessible(true);
- return (List>) m.invoke(visitor);
+ return (List>) m.invoke(visitor);
} catch (Exception e) {
return Collections.emptyList();
}
}
- private static void makeVisitorNonTopLevel(JavaVisitor visitor) {
+ private static void makeVisitorNonTopLevel(TreeVisitor, ExecutionContext> visitor) {
try {
Field f = TreeVisitor.class.getDeclaredField("afterVisit");
f.setAccessible(true);
@@ -403,18 +402,17 @@ public class ORAstUtils {
return new NodeRecipe((JavaVisitor) v, condition);
}
- @SuppressWarnings("unchecked")
public static Recipe nodeRecipe(Recipe r, Predicate condition) {
- return new NodeRecipe((JavaVisitor) RecipeIntrospectionUtils.recipeVisitor(r), condition);
+ return new NodeRecipe(r.getVisitor(), condition);
}
private static class NodeRecipe extends Recipe {
- private JavaVisitor visitor;
+ private TreeVisitor, ExecutionContext> visitor;
private Predicate condition;
- public NodeRecipe(JavaVisitor visitor, Predicate condition) {
- this.visitor = visitor;
+ public NodeRecipe(TreeVisitor,ExecutionContext> treeVisitor, Predicate condition) {
+ this.visitor = treeVisitor;
this.condition = condition;
}
@@ -424,7 +422,7 @@ public class ORAstUtils {
}
@Override
- protected TreeVisitor, ExecutionContext> getVisitor() {
+ public TreeVisitor, ExecutionContext> getVisitor() {
return new JavaVisitor<>() {
@Override
@@ -433,8 +431,8 @@ public class ORAstUtils {
J t = (J) tree;
if (condition.test(t)) {
makeVisitorNonTopLevel(visitor);
- t = visitor.visit(t, ctx, getCursor());
- for (TreeVisitor v : getAfterVisitors(visitor)) {
+ t = (J) visitor.visit(t, ctx, getCursor());
+ for (TreeVisitor, ExecutionContext> v : getAfterVisitors(visitor)) {
doAfterVisit(v);
}
return t;
@@ -444,7 +442,12 @@ public class ORAstUtils {
}
};
- }
+ }
+
+ @Override
+ public String getDescription() {
+ return "";
+ }
}
public static boolean isExceptionFromInterrupedThread(Throwable t) {
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java
index 6a0ceee08..20da69ab8 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java
@@ -17,7 +17,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.function.UnaryOperator;
+import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -65,7 +65,7 @@ public abstract class ProjectParser {
javaParser.setClasspath(mainClasspath);
List javaSources = ListUtils.map(javaParser.parseInputs(
- () -> getInputs(ss.javaSources.stream()).iterator(), projectDir, ctx), addProvenance(projectProvenance));
+ () -> getInputs(ss.javaSources.stream()).iterator(), projectDir, ctx).collect(Collectors.toList()), addProvenance(projectProvenance));
JavaSourceSet javaSourceSet = ORAstUtils.addJavaSourceSet(javaSources, ss.name(),
mainClasspath);
sources.addAll(javaSources);
@@ -92,7 +92,7 @@ public abstract class ProjectParser {
.collect(Collectors.toList()),
projectDirectory,
ctx
- ), addProvenance(provenance)));
+ ).collect(Collectors.toList()), addProvenance(provenance)));
sourceFiles.addAll(ListUtils.map(new YamlParser().parseInputs(
resources.stream()
@@ -100,7 +100,7 @@ public abstract class ProjectParser {
.collect(Collectors.toList()),
projectDirectory,
ctx
- ), addProvenance(provenance)));
+ ).collect(Collectors.toList()), addProvenance(provenance)));
sourceFiles.addAll(ListUtils.map(new PropertiesParser().parseInputs(
resources.stream()
@@ -108,7 +108,7 @@ public abstract class ProjectParser {
.collect(Collectors.toList()),
projectDirectory,
ctx
- ), addProvenance(provenance)));
+ ).collect(Collectors.toList()), addProvenance(provenance)));
sourceFiles.addAll(ListUtils.map(new PlainTextParser().parseInputs(
resources.stream()
@@ -116,7 +116,7 @@ public abstract class ProjectParser {
.collect(Collectors.toList()),
projectDirectory,
ctx
- ), addProvenance(provenance)));
+ ).collect(Collectors.toList()), addProvenance(provenance)));
}
@@ -127,8 +127,8 @@ public abstract class ProjectParser {
return s;
}
- private UnaryOperator addProvenance(List projectProvenance) {
- return s -> {
+ private BiFunction addProvenance(List projectProvenance) {
+ return (i, s) -> {
if (projectProvenance != null) {
s = addProjectProvenance(s, projectProvenance);
}
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/maven/MavenIJavaProjectParser.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/maven/MavenIJavaProjectParser.java
index 7ef107dd9..333657abf 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/maven/MavenIJavaProjectParser.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/maven/MavenIJavaProjectParser.java
@@ -23,6 +23,7 @@ import java.util.Properties;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.openrewrite.ExecutionContext;
@@ -103,7 +104,7 @@ public class MavenIJavaProjectParser extends AbstractJavaProjectParser {
@Override
protected List extends SourceFile> parseBuildFiles(Path projectDir, ExecutionContext ctx) {
MavenParser mavenParser = mavenParserBuilder.build();
- return mavenParser.parseInputs(() -> getInputs(Stream.of(Paths.get(jp.getProjectBuild().getBuildFile()))).iterator(), projectDir, ctx);
+ return mavenParser.parseInputs(() -> getInputs(Stream.of(Paths.get(jp.getProjectBuild().getBuildFile()))).iterator(), projectDir, ctx).collect(Collectors.toList());
}
private static ResolvedPom getModel(Xml.Document maven) {
diff --git a/headless-services/commons/commons-rewrite/src/test/java/org/springframework/ide/vscode/commons/rewrite/LoadUtilsTest.java b/headless-services/commons/commons-rewrite/src/test/java/org/springframework/ide/vscode/commons/rewrite/LoadUtilsTest.java
index ff63a5d43..ee4c0cb56 100644
--- a/headless-services/commons/commons-rewrite/src/test/java/org/springframework/ide/vscode/commons/rewrite/LoadUtilsTest.java
+++ b/headless-services/commons/commons-rewrite/src/test/java/org/springframework/ide/vscode/commons/rewrite/LoadUtilsTest.java
@@ -44,11 +44,10 @@ public class LoadUtilsTest {
@SuppressWarnings("unchecked")
@Test
public void createRecipeTest() throws Exception {
- Recipe r = env.listRecipes().stream().filter(d -> "org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0".equals(d.getName())).findFirst().orElse(null);
- RecipeDescriptor recipeDescriptor = r.getDescriptor();
+ RecipeDescriptor recipeDescriptor = env.listRecipeDescriptors().stream().filter(d -> "org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0".equals(d.getName())).findFirst().orElse(null);
assertNotNull(recipeDescriptor);
- r = LoadUtils.createRecipe(recipeDescriptor, id -> {
+ Recipe r = LoadUtils.createRecipe(recipeDescriptor, id -> {
try {
return (Class) Class.forName(id);
} catch (ClassNotFoundException e) {
diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml
index 5ddfc1760..765f3504c 100644
--- a/headless-services/commons/pom.xml
+++ b/headless-services/commons/pom.xml
@@ -113,9 +113,12 @@
1.13
- 7.41.0-SNAPSHOT
- 4.37.0-SNAPSHOT
- 0.9.0-SNAPSHOT
+ 8.1.0-SNAPSHOT
+ 5.1.0-SNAPSHOT
+ 1.1.0-SNAPSHOT
+
+ 7.6
+ 6.1.1
true
vmware
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
index 7c7382ea8..482777ca3 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
@@ -48,6 +48,7 @@ import org.openrewrite.Validated;
import org.openrewrite.config.DeclarativeRecipe;
import org.openrewrite.config.RecipeDescriptor;
import org.openrewrite.config.YamlResourceLoader;
+import org.openrewrite.internal.InMemoryLargeSourceSet;
import org.openrewrite.java.JavaParser;
import org.openrewrite.java.tree.J.CompilationUnit;
import org.openrewrite.maven.MavenParser;
@@ -427,8 +428,8 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
});
List sources = projectParser.parse(absoluteProjectDir, new InMemoryExecutionContext());
progressTask.progressEvent("Computing changes...");
- RecipeRun reciperun = r.run(sources, new InMemoryExecutionContext(e -> log.error("Recipe execution failed", e)));
- List results = reciperun.getResults();
+ RecipeRun reciperun = r.run(new InMemoryLargeSourceSet(sources), new InMemoryExecutionContext(e -> log.error("Recipe execution failed", e)));
+ List results = reciperun.getChangeset().getAllResults();
return ORDocUtils.createWorkspaceEdit(absoluteProjectDir, server.getTextDocumentService(), results);
}
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRefactorings.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRefactorings.java
index b4a280426..464e0bdce 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRefactorings.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRefactorings.java
@@ -27,14 +27,16 @@ import org.eclipse.lsp4j.TextDocumentEdit;
import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.eclipse.lsp4j.WorkspaceEdit;
import org.eclipse.lsp4j.jsonrpc.messages.Either;
+import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.Parser.Input;
import org.openrewrite.Recipe;
import org.openrewrite.RecipeRun;
import org.openrewrite.Result;
+import org.openrewrite.SourceFile;
import org.openrewrite.config.DeclarativeRecipe;
+import org.openrewrite.internal.InMemoryLargeSourceSet;
import org.openrewrite.internal.RecipeIntrospectionUtils;
import org.openrewrite.java.JavaParser;
-import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.CompilationUnit;
import org.openrewrite.marker.Range;
import org.slf4j.Logger;
@@ -121,9 +123,10 @@ public class RewriteRefactorings implements CodeActionResolver, QuickfixHandler
return null;
}
- private WorkspaceEdit applyRecipe(Recipe r, IJavaProject project, List cus) {
- RecipeRun reciperun = r.run(cus);
- List results = reciperun.getResults();
+ private WorkspaceEdit applyRecipe(Recipe r, IJavaProject project, List cus) {
+ List sources = cus.stream().map(cu -> (SourceFile) cu).collect(Collectors.toList());
+ RecipeRun reciperun = r.run(new InMemoryLargeSourceSet(sources), new InMemoryExecutionContext());
+ List results = reciperun.getChangeset().getAllResults();
List> edits = results.stream().filter(res -> res.getAfter() != null).map(res -> {
URI docUri = res.getAfter().getSourcePath().isAbsolute() ? res.getAfter().getSourcePath().toUri() : project.getLocationUri().resolve(res.getAfter().getSourcePath().toString());
TextDocument doc = server.getTextDocumentService().getLatestSnapshot(docUri.toASCIIString());
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/SpringBootUpgrade.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/SpringBootUpgrade.java
index 9f489199a..a3531bd6a 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/SpringBootUpgrade.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/SpringBootUpgrade.java
@@ -102,8 +102,8 @@ public class SpringBootUpgrade {
if (version.getMajor() == targetVersion.getMajor() && version.getMinor() == targetVersion.getMinor()) {
// patch version upgrade - treat as pom versions only upgrade
- recipe.doNext(new UpgradeDependencyVersion("org.springframework.boot", "*", version.getMajor() + "." + version.getMinor() + ".x", null, null, null));
- recipe.doNext(new UpgradeParentVersion("org.springframework.boot", "spring-boot-starter-parent", version.getMajor() + "." + version.getMinor() + ".x", null, null));
+ recipe.getRecipeList().add(new UpgradeDependencyVersion("org.springframework.boot", "*", version.getMajor() + "." + version.getMinor() + ".x", null, null, null));
+ recipe.getRecipeList().add(new UpgradeParentVersion("org.springframework.boot", "spring-boot-starter-parent", version.getMajor() + "." + version.getMinor() + ".x", null, null));
} else /*if (version.getMajor() == targetVersion.getMajor())*/ {
List recipedIds = createRecipeIdsChain(version.getMajor(), version.getMinor() + 1, targetVersion.getMajor(), targetVersion.getMinor(), versionsToRecipeId);
if (!recipedIds.isEmpty()) {
@@ -117,7 +117,7 @@ public class SpringBootUpgrade {
// getRecipeFromId(recipedIds.get(i)).ifPresent(recipe::doNext);
// }
// }
- getRecipeFromId(recipeId).ifPresent(recipe::doNext);
+ getRecipeFromId(recipeId).ifPresent(r -> recipe.getRecipeList().add(r));
}
}