diff --git a/build.gradle.kts b/build.gradle.kts
index 173ac4a65a..9a680584c1 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -18,6 +18,7 @@ recipeDependencies {
parserClasspath("com.google.errorprone:error_prone_core:2.+")
testParserClasspath("com.sun.faces:jsf-api:2.1.29-11")
+ testParserClasspath("com.sun.istack:istack-commons-runtime:4.1.2")
testParserClasspath("jakarta.el:jakarta.el-api:4.0.0")
testParserClasspath("jakarta.enterprise:jakarta.enterprise.cdi-api:4.0.1")
testParserClasspath("jakarta.faces:jakarta.faces-api:3.0.0")
@@ -25,6 +26,7 @@ recipeDependencies {
testParserClasspath("jakarta.faces:jakarta.faces-api:4.0.1")
testParserClasspath("jakarta.servlet:jakarta.servlet-api:4.0.2")
testParserClasspath("jakarta.servlet:jakarta.servlet-api:5.0.0")
+ testParserClasspath("jakarta.validation:jakarta.validation-api:3.0.2")
testParserClasspath("jakarta.ws.rs:jakarta.ws.rs-api:3.1.0")
testParserClasspath("jakarta.xml.soap:jakarta.xml.soap-api:2.0.1")
testParserClasspath("javax.enterprise:cdi-api:2.0.SP1")
diff --git a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml
index 5270ffd468..503d541409 100644
--- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml
+++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml
@@ -293,6 +293,12 @@ recipeList:
version: 3.0.x
onlyIfUsing: javax.validation..*
acceptTransitive: true
+ - org.openrewrite.java.dependencies.AddDependency:
+ groupId: jakarta.validation
+ artifactId: jakarta.validation-api
+ version: 3.0.x
+ onlyIfUsing: com.sun.istack.NotNull
+ acceptTransitive: true
- org.openrewrite.java.ChangePackage:
oldPackageName: javax.validation
newPackageName: jakarta.validation
diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxValidationMigrationToJakartaValidationTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxValidationMigrationToJakartaValidationTest.java
index 9e1bf88af5..df6b2bd027 100644
--- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxValidationMigrationToJakartaValidationTest.java
+++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxValidationMigrationToJakartaValidationTest.java
@@ -18,7 +18,6 @@
import org.junit.jupiter.api.Test;
import org.openrewrite.DocumentExample;
import org.openrewrite.InMemoryExecutionContext;
-import org.openrewrite.Issue;
import org.openrewrite.config.Environment;
import org.openrewrite.java.JavaParser;
import org.openrewrite.test.RecipeSpec;
@@ -96,61 +95,68 @@ public class Example {
);
}
- @Issue("https://github.com/moderneinc/customer-requests/issues/1526")
@Test
- void sunIstackNotNullToJakartaValidation() {
+ void sunIstackNotNullToJakartaValidationAddsDependency() {
rewriteRun(
- spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(
- //language=java
- """
- package com.sun.istack;
- import java.lang.annotation.*;
- @Documented
- @Retention(RetentionPolicy.CLASS)
- @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
- public @interface NotNull {
- }
- """,
- //language=java
- """
- package jakarta.validation.constraints;
- import java.lang.annotation.*;
- @Documented
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
- public @interface NotNull {
- String message() default "{jakarta.validation.constraints.NotNull.message}";
- Class>[] groups() default {};
- Class>[] payload() default {};
- }
- """
- )),
- //language=java
- java(
- """
- import com.sun.istack.NotNull;
+ spec -> spec.parser(JavaParser.fromJavaVersion()
+ .classpathFromResources(new InMemoryExecutionContext(), "istack-commons-runtime-4.1.2", "jakarta.validation-api-3.0.2")),
+ mavenProject(
+ "Sample",
+ srcMainJava(
+ //language=java
+ java(
+ """
+ import com.sun.istack.NotNull;
- public class Example {
- @NotNull
- private String name;
+ public class Example {
+ @NotNull
+ private String name;
- public void setName(@NotNull String name) {
- this.name = name;
+ public void setName(@NotNull String name) {
+ this.name = name;
+ }
}
- }
- """,
- """
- import jakarta.validation.constraints.NotNull;
+ """,
+ """
+ import jakarta.validation.constraints.NotNull;
- public class Example {
- @NotNull
- private String name;
+ public class Example {
+ @NotNull
+ private String name;
- public void setName(@NotNull String name) {
- this.name = name;
+ public void setName(@NotNull String name) {
+ this.name = name;
+ }
}
- }
+ """
+ )
+ ),
+ //language=xml
+ pomXml(
"""
+
+ 4.0.0
+ com.example
+ demo
+ 0.0.1-SNAPSHOT
+
+ """,
+ """
+
+ 4.0.0
+ com.example
+ demo
+ 0.0.1-SNAPSHOT
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 3.0.2
+
+
+
+ """
+ )
)
);
}
diff --git a/src/test/resources/META-INF/rewrite/classpath.tsv.gz b/src/test/resources/META-INF/rewrite/classpath.tsv.gz
index e228a7ab81..3063937d87 100644
Binary files a/src/test/resources/META-INF/rewrite/classpath.tsv.gz and b/src/test/resources/META-INF/rewrite/classpath.tsv.gz differ