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'
+ }
+ """
+ )
+ )
+ );
+ }
+}
}