diff --git a/src/main/java/org/openrewrite/java/dependencies/search/ModuleHasDependency.java b/src/main/java/org/openrewrite/java/dependencies/search/ModuleHasDependency.java index 36413b3..4d3b2be 100644 --- a/src/main/java/org/openrewrite/java/dependencies/search/ModuleHasDependency.java +++ b/src/main/java/org/openrewrite/java/dependencies/search/ModuleHasDependency.java @@ -93,7 +93,7 @@ public Tree visit(@Nullable Tree tree, ExecutionContext ctx) { tree.getMarkers() .findFirst(JavaProject.class) .ifPresent(jp -> { - Tree t = new DependencyInsight(groupIdPattern, artifactIdPattern, scope, version) + Tree t = new DependencyInsight(groupIdPattern, artifactIdPattern, version, scope) .getVisitor() .visit(tree, ctx); if (t != tree) { diff --git a/src/test/java/org/openrewrite/java/dependencies/search/ModuleHasDependencyTest.java b/src/test/java/org/openrewrite/java/dependencies/search/ModuleHasDependencyTest.java index 3b236a6..6255e77 100644 --- a/src/test/java/org/openrewrite/java/dependencies/search/ModuleHasDependencyTest.java +++ b/src/test/java/org/openrewrite/java/dependencies/search/ModuleHasDependencyTest.java @@ -16,6 +16,7 @@ package org.openrewrite.java.dependencies.search; import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullSource; @@ -344,4 +345,131 @@ void whenModuleDoesNotHaveDependencyButInvertedMarkingMarks() { ) ); } + +@Nested +class WithVersionsPattern { + @ParameterizedTest + @ValueSource(strings = { + "1.0.1", // exact + "1.0.1-1.0.5", // hyphenated + "[1.0.1,1.0.5)", "[1.0.1,1.0.5]", "[1.0.1,1.0.5]", "(1.0.0,1.0.5]", // full range + "~1.0.1"// tilde range + }) + void maven(String versionPattern) { + rewriteRun( + recipeSpec -> recipeSpec.recipe(new ModuleHasDependency("jakarta.data", "*", null, versionPattern, null)), + mavenProject("project-maven", + //language=xml + pomXml( + """ + + com.example + foo + 1.0.0 + + + + jakarta.data + jakarta.data-api + 1.0.1 + + + jakarta.data + jakarta.data-spec + 1.0.0 + + + + """, + """ + + com.example + foo + 1.0.0 + + + + jakarta.data + jakarta.data-api + 1.0.1 + + + jakarta.data + jakarta.data-spec + 1.0.0 + + + + """.formatted(versionPattern) + ) + ) + ); + } + + @ParameterizedTest + @ValueSource(strings = { + "1.0.1", // exact + "1.0.1-1.0.5", // hyphenated + "[1.0.1,1.0.5)", "[1.0.1,1.0.5]", "[1.0.1,1.0.5]", "(1.0.0,1.0.5]", // full range + "~1.0.1"// tilde range + }) + void gradle(String versionPattern) { + rewriteRun( + recipeSpec -> recipeSpec.recipe(new ModuleHasDependency("jakarta.data", "*", null, versionPattern, null)), + mavenProject("project-maven", + //language=groovy + buildGradle( + """ + plugins { + id 'java-library' + } + repositories { + mavenCentral() + } + dependencies { + implementation 'jakarta.data:jakarta.data-api:1.0.1' + implementation 'jakarta.data:jakarta.data-spec:1.0.0' + } + """, + """ + /*~~(Module has dependency: jakarta.data:*:%s)~~>*/plugins { + id 'java-library' + } + repositories { + mavenCentral() + } + dependencies { + implementation 'jakarta.data:jakarta.data-api:1.0.1' + implementation 'jakarta.data:jakarta.data-spec:1.0.0' + } + """.formatted(versionPattern) + ) + ) + ); + } + + @Test + void noPresentVersion() { + rewriteRun( + recipeSpec -> recipeSpec.recipe(new ModuleHasDependency("org.springframework", "*", null, "5.1.2", null)), + mavenProject("project-maven", + //language=groovy + buildGradle( + """ + plugins { + id 'java-library' + } + repositories { + mavenCentral() + } + dependencies { + implementation 'org.springframework:spring-core:6.1.5' + implementation 'org.springframework:spring-aop:6.1.5' + } + """ + ) + ) + ); + } +} }