From f05e1f8efa70fd3c24b0ffafc3c4921008676322 Mon Sep 17 00:00:00 2001 From: Sam Snyder Date: Tue, 21 Jan 2025 17:12:45 -0800 Subject: [PATCH] Only add spring dependency management plugin explicitly if features from it are in use --- .../AddSpringDependencyManagementPlugin.java | 33 +++++++++++++++++-- ...dSpringDependencyManagementPluginTest.java | 9 ++--- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPlugin.java b/src/main/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPlugin.java index 7039aa023..e49e20f50 100644 --- a/src/main/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPlugin.java +++ b/src/main/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPlugin.java @@ -22,12 +22,14 @@ import org.openrewrite.gradle.IsBuildGradle; import org.openrewrite.gradle.marker.GradleProject; import org.openrewrite.gradle.plugins.AddBuildPlugin; +import org.openrewrite.groovy.GroovyIsoVisitor; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaSourceFile; import org.openrewrite.marker.SearchResult; import java.util.Optional; +import java.util.concurrent.atomic.AtomicBoolean; @Value @EqualsAndHashCode(callSuper = false) @@ -51,7 +53,7 @@ public TreeVisitor getVisitor() { new IsBuildGradle<>(), new UsesSpringDependencyManagement() ), - new AddBuildPlugin("io.spring.dependency-management", "1.0.6.RELEASE", null, null).getVisitor() + new AddBuildPlugin("io.spring.dependency-management", "1.0.6.RELEASE", null, null, false).getVisitor() ); } @@ -66,11 +68,38 @@ private static class UsesSpringDependencyManagement extends JavaIsoVisitor "io.spring.dependency-management".equals(plugin.getId()) || - "io.spring.gradle.dependencymanagement.DependencyManagementPlugin".equals(plugin.getFullyQualifiedClassName()))) { + "io.spring.gradle.dependencymanagement.DependencyManagementPlugin".equals(plugin.getFullyQualifiedClassName())) + && usesDependencyManagementDsl(cu) + ) { return SearchResult.found(cu); } } return super.visit(tree, ctx); } } + + private static boolean usesDependencyManagementDsl(JavaSourceFile cu) { + AtomicBoolean found = new AtomicBoolean(false); + new UsesDependencyManagementDslVisitor().visit(cu, found); + return found.get(); + } + + private static class UsesDependencyManagementDslVisitor extends GroovyIsoVisitor { + @Override + public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, AtomicBoolean found) { + if ("dependencyManagement".equals(method.getSimpleName())) { + found.set(true); + return method; + } + return super.visitMethodInvocation(method, found); + } + + @Override + public @Nullable J visit(@Nullable Tree tree, AtomicBoolean found) { + if (found.get()) { + return (J) tree; + } + return super.visit(tree, found); + } + } } diff --git a/src/test/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPluginTest.java b/src/test/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPluginTest.java index c4b0641dc..0834d6af6 100644 --- a/src/test/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPluginTest.java +++ b/src/test/java/org/openrewrite/gradle/spring/AddSpringDependencyManagementPluginTest.java @@ -41,11 +41,10 @@ void addIfPresent() { id "java" id "org.springframework.boot" version "1.5.22.RELEASE" } - repositories { mavenCentral() } - + dependencyManagement { } dependencies { compile "org.springframework.boot:spring-boot-starter-web" } @@ -56,11 +55,10 @@ void addIfPresent() { id "org.springframework.boot" version "1.5.22.RELEASE" id "io.spring.dependency-management" version "1.0.6.RELEASE" } - repositories { mavenCentral() } - + dependencyManagement { } dependencies { compile "org.springframework.boot:spring-boot-starter-web" } @@ -81,11 +79,10 @@ void dontAddIfNotUsing() { id "java" id "org.springframework.boot" version "2.6.15" } - + repositories { mavenCentral() } - dependencies { implementation platform("org.springframework.boot:spring-boot-starter-dependencies:2.6.15") implementation "org.springframework.boot:spring-boot-starter-web"