From f507784659295430cfd3a86109cf08ae26fe6eaf Mon Sep 17 00:00:00 2001 From: Nate Date: Wed, 8 Jan 2025 16:52:15 -0800 Subject: [PATCH 1/2] fix: create dependencyResourceLoaders in 2 passes --- .../org/openrewrite/config/Environment.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/rewrite-core/src/main/java/org/openrewrite/config/Environment.java b/rewrite-core/src/main/java/org/openrewrite/config/Environment.java index 3cabc8c209a..11a199faeba 100644 --- a/rewrite-core/src/main/java/org/openrewrite/config/Environment.java +++ b/rewrite-core/src/main/java/org/openrewrite/config/Environment.java @@ -249,12 +249,25 @@ public Builder scanYamlResources() { */ @SuppressWarnings("unused") public Builder scanJar(Path jar, Collection dependencies, ClassLoader classLoader) { - List list = new ArrayList<>(); + List firstPassLoaderList = new ArrayList<>(); for (Path dep : dependencies) { ClasspathScanningLoader classpathScanningLoader = new ClasspathScanningLoader(dep, properties, emptyList(), classLoader); - list.add(classpathScanningLoader); + firstPassLoaderList.add(classpathScanningLoader); } - return load(new ClasspathScanningLoader(jar, properties, list, classLoader), list); + + /* + * Second loader creation pass where the firstPassLoaderList is passed as the + * dependencyResourceLoaders list to ensure that we can resolve transitive + * dependencies using the loaders we just created. This is necessary because + * the first pass may have missing recipes since the full list of loaders was + * not provided. + */ + List secondPassLoaderList = new ArrayList<>(); + for (Path dep : dependencies) { + ClasspathScanningLoader classpathScanningLoader = new ClasspathScanningLoader(dep, properties, firstPassLoaderList, classLoader); + secondPassLoaderList.add(classpathScanningLoader); + } + return load(new ClasspathScanningLoader(jar, properties, secondPassLoaderList, classLoader), secondPassLoaderList); } @SuppressWarnings("unused") From 763aa936ebe9befa38364d2440b0d7a2d05e8b5d Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 9 Jan 2025 11:32:52 +0100 Subject: [PATCH 2/2] Inline variables used once --- .../src/main/java/org/openrewrite/config/Environment.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/rewrite-core/src/main/java/org/openrewrite/config/Environment.java b/rewrite-core/src/main/java/org/openrewrite/config/Environment.java index 11a199faeba..64179d985ab 100644 --- a/rewrite-core/src/main/java/org/openrewrite/config/Environment.java +++ b/rewrite-core/src/main/java/org/openrewrite/config/Environment.java @@ -251,8 +251,7 @@ public Builder scanYamlResources() { public Builder scanJar(Path jar, Collection dependencies, ClassLoader classLoader) { List firstPassLoaderList = new ArrayList<>(); for (Path dep : dependencies) { - ClasspathScanningLoader classpathScanningLoader = new ClasspathScanningLoader(dep, properties, emptyList(), classLoader); - firstPassLoaderList.add(classpathScanningLoader); + firstPassLoaderList.add(new ClasspathScanningLoader(dep, properties, emptyList(), classLoader)); } /* @@ -264,8 +263,7 @@ public Builder scanJar(Path jar, Collection dependencies, ClassLoader clas */ List secondPassLoaderList = new ArrayList<>(); for (Path dep : dependencies) { - ClasspathScanningLoader classpathScanningLoader = new ClasspathScanningLoader(dep, properties, firstPassLoaderList, classLoader); - secondPassLoaderList.add(classpathScanningLoader); + secondPassLoaderList.add(new ClasspathScanningLoader(dep, properties, firstPassLoaderList, classLoader)); } return load(new ClasspathScanningLoader(jar, properties, secondPassLoaderList, classLoader), secondPassLoaderList); }