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