diff --git a/headless-services/commons/commons-rewrite/pom.xml b/headless-services/commons/commons-rewrite/pom.xml
index 4be76ae2a..b626a14ec 100644
--- a/headless-services/commons/commons-rewrite/pom.xml
+++ b/headless-services/commons/commons-rewrite/pom.xml
@@ -27,13 +27,21 @@
commons-java
${project.version}
-
-
+
+
+
- io.github.classgraph
- classgraph
- 4.8.149
+ de.danielbechler
+ java-object-diff
+ 0.95
+
+
+ io.github.classgraph
+ classgraph
+ 4.8.149
+
+
org.openrewrite
rewrite-properties
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsClasspathScanningLoader.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsClasspathScanningLoader.java
index d60b0f402..c64566ef6 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsClasspathScanningLoader.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsClasspathScanningLoader.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.springframework.ide.vscode.commons.rewrite.config;
+import static java.util.Collections.emptyList;
import static org.openrewrite.internal.RecipeIntrospectionUtils.constructRecipe;
import static org.openrewrite.internal.RecipeIntrospectionUtils.recipeDescriptorFromRecipe;
@@ -48,7 +49,7 @@ public class StsClasspathScanningLoader implements ResourceLoader, StsResourceLo
private final List codeActionRepos = new ArrayList<>();
- public StsClasspathScanningLoader(Path p, Properties properties, ClassLoader classLoader) {
+ public StsClasspathScanningLoader(Path p, Properties properties, Collection extends ResourceLoader> dependencyResourceLoaders, ClassLoader classLoader) {
if (Files.isDirectory(p)) {
String dir = p.toString();
@@ -61,7 +62,7 @@ public class StsClasspathScanningLoader implements ResourceLoader, StsResourceLo
.acceptPaths(dir)
.ignoreParentClassLoaders()
.overrideClassLoaders(classLoader)
- .acceptPaths("META-INF/rewrite"), properties, classLoader);
+ .acceptPaths("META-INF/rewrite"), properties, dependencyResourceLoaders, classLoader);
} else {
String jarName = p.toFile().getName();
@@ -75,14 +76,14 @@ public class StsClasspathScanningLoader implements ResourceLoader, StsResourceLo
.acceptJars(jarName)
.ignoreParentClassLoaders()
.overrideClassLoaders(classLoader)
- .acceptPaths("META-INF/rewrite"), properties, classLoader);
+ .acceptPaths("META-INF/rewrite"), properties, dependencyResourceLoaders, classLoader);
}
}
public StsClasspathScanningLoader(Properties properties, String[] acceptPackages) {
scanClasses(new ClassGraph().acceptPackages(acceptPackages), getClass().getClassLoader());
- scanYaml(new ClassGraph().acceptPaths("META-INF/rewrite"), properties, null);
+ scanYaml(new ClassGraph().acceptPaths("META-INF/rewrite"), properties, emptyList(), null);
}
/**
@@ -99,19 +100,19 @@ public class StsClasspathScanningLoader implements ResourceLoader, StsResourceLo
scanYaml(new ClassGraph()
.ignoreParentClassLoaders()
.overrideClassLoaders(classLoader)
- .acceptPaths("META-INF/rewrite"), properties, classLoader);
+ .acceptPaths("META-INF/rewrite"), properties, emptyList(), classLoader);
}
/**
* This must be called _after_ scanClasses or the descriptors of declarative recipes will be missing any
* non-declarative recipes they depend on that would be discovered by scanClasses
*/
- private void scanYaml(ClassGraph classGraph, Properties properties, @Nullable ClassLoader classLoader) {
+ private void scanYaml(ClassGraph classGraph, Properties properties, Collection extends ResourceLoader> dependencyResourceLoaders, @Nullable ClassLoader classLoader) {
try (ScanResult scanResult = classGraph.enableMemoryMapping().scan()) {
List yamlResourceLoaders = new ArrayList<>();
scanResult.getResourcesWithExtension("yml").forEachInputStreamIgnoringIOException((res, input) -> {
- yamlResourceLoaders.add(new YamlResourceLoader(input, res.getURI(), properties, classLoader));
+ yamlResourceLoaders.add(new YamlResourceLoader(input, res.getURI(), properties, classLoader, dependencyResourceLoaders));
});
// Extract in two passes so that the full list of recipes from all sources are known when computing recipe descriptors
// Otherwise recipes which include recipes from other sources in their recipeList will have incomplete descriptors
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsEnvironment.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsEnvironment.java
index a6bf8724a..0d9baff83 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsEnvironment.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/StsEnvironment.java
@@ -12,6 +12,7 @@ package org.springframework.ide.vscode.commons.rewrite.config;
import java.lang.reflect.Field;
import java.nio.file.Path;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
@@ -19,9 +20,12 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.openrewrite.config.ClasspathScanningLoader;
import org.openrewrite.config.Environment;
import org.openrewrite.config.ResourceLoader;
+import static java.util.Collections.emptyList;
+
public class StsEnvironment extends Environment {
final private Supplier> codeActionRepos;
@@ -51,12 +55,22 @@ public class StsEnvironment extends Environment {
}
@Override
- public org.openrewrite.config.Environment.Builder scanJar(Path jar, ClassLoader classLoader) {
- return load(new StsClasspathScanningLoader(jar, props, classLoader));
+ public Environment.Builder scanJar(Path jar, Collection dependencies, ClassLoader classLoader) {
+ List list = new ArrayList<>();
+ for (Path dep : dependencies) {
+ ClasspathScanningLoader classpathScanningLoader = new ClasspathScanningLoader(dep, props, emptyList(), classLoader);
+ list.add(classpathScanningLoader);
+ }
+ return load(new StsClasspathScanningLoader(jar, props, list, classLoader), list);
}
-
- public org.openrewrite.config.Environment.Builder scanPath(Path dir, ClassLoader classLoader) {
- return load(new StsClasspathScanningLoader(dir, props, classLoader));
+
+ public org.openrewrite.config.Environment.Builder scanPath(Path dir, Collection dependencies, ClassLoader classLoader) {
+ List list = new ArrayList<>();
+ for (Path dep : dependencies) {
+ ClasspathScanningLoader classpathScanningLoader = new ClasspathScanningLoader(dep, props, emptyList(), classLoader);
+ list.add(classpathScanningLoader);
+ }
+ return load(new StsClasspathScanningLoader(dir, props, list, classLoader));
}
@SuppressWarnings("unchecked")
diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml
index d8fa1573f..d5edcd63c 100644
--- a/headless-services/commons/pom.xml
+++ b/headless-services/commons/pom.xml
@@ -109,9 +109,9 @@
1.13
- 7.30.0
- 4.27.0
- 1.11.0
+ 7.32.1
+ 4.29.0
+ 1.13.0
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 07735066e..b6c51858f 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
@@ -232,7 +232,7 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
if (pathStr.endsWith(".jar")) {
URLClassLoader classLoader = new URLClassLoader(new URL[] { f.toUri().toURL() },
getClass().getClassLoader());
- builder.scanJar(f, classLoader);
+ builder.scanJar(f, Collections.emptyList(), classLoader);
} else if (pathStr.endsWith(".yml") || pathStr.endsWith(".yaml")) {
builder.load(new YamlResourceLoader(new FileInputStream(f.toFile()), f.toUri(), new Properties()));
}
@@ -245,7 +245,7 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
Path d = Path.of(p);
if (Files.isDirectory(d)) {
URLClassLoader classLoader = new URLClassLoader(new URL[] { d.toUri().toURL()}, getClass().getClassLoader());
- builder.scanPath(d, classLoader);
+ builder.scanPath(d, Collections.emptyList(), classLoader);
}
} catch (Exception e) {
log.error("Skipping folder " + p, e);