diff --git a/src/main/resources/META-INF/rewrite/bouncycastle-jdk15to18.yml b/src/main/resources/META-INF/rewrite/bouncycastle-jdk15to18.yml new file mode 100644 index 0000000000..40670c2059 --- /dev/null +++ b/src/main/resources/META-INF/rewrite/bouncycastle-jdk15to18.yml @@ -0,0 +1,62 @@ +# +# Copyright 2025 the original author or authors. +#

+# Licensed under the Moderne Source Available License (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +#

+# https://docs.moderne.io/licensing/moderne-source-available-license +#

+# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.migrate.BouncyCastleFromJdk15OnToJdk15to18 +displayName: Migrate Bouncy Castle from `jdk15on` to `jdk15to18` for Java < 8 +description: >- + This recipe replaces the Bouncy Castle artifacts from `jdk15on` to `jdk15to18`. + `jdk15on` isn't maintained anymore and `jdk18on` is only for Java 8 and above. + The `jdk15to18` artifact is the up-to-date replacement of the unmaintained `jdk15on` for Java < 8. +tags: + - bouncycastle +recipeList: + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcprov-jdk15on + newArtifactId: bcprov-jdk15to18 + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcutil-jdk15on + newArtifactId: bcutil-jdk15to18 + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcpkix-jdk15on + newArtifactId: bcpkix-jdk15to18 + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcmail-jdk15on + newArtifactId: bcmail-jdk15to18 + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcjmail-jdk15on + newArtifactId: bcjmail-jdk15to18 + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcpg-jdk15on + newArtifactId: bcpg-jdk15to18 + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bctls-jdk15on + newArtifactId: bctls-jdk15to18 + newVersion: latest.release diff --git a/src/main/resources/META-INF/rewrite/bouncycastle-jdk18on.yml b/src/main/resources/META-INF/rewrite/bouncycastle-jdk18on.yml index 2b3a17aa91..d07be0a142 100644 --- a/src/main/resources/META-INF/rewrite/bouncycastle-jdk18on.yml +++ b/src/main/resources/META-INF/rewrite/bouncycastle-jdk18on.yml @@ -17,12 +17,13 @@ --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.migrate.BounceCastleFromJdk15OntoJdk18On -displayName: Migrate BouncyCastle to jdk18on +displayName: Migrate Bouncy Castle to `jdk18on` description: >- - This recipe will upgrade BouncyCastle dependencies from -jdk15on to -jdk18on. + This recipe will upgrade Bouncy Castle dependencies from `-jdk15on` or `-jdk15to18` to `-jdk18on`. tags: - bouncycastle recipeList: + # -jdk15on migration - org.openrewrite.java.dependencies.ChangeDependency: oldGroupId: org.bouncycastle oldArtifactId: bcprov-jdk15on @@ -58,3 +59,40 @@ recipeList: oldArtifactId: bctls-jdk15on newArtifactId: bctls-jdk18on newVersion: latest.release + + # -jdk15to18 migration + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcprov-jdk15to18 + newArtifactId: bcprov-jdk18on + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcutil-jdk15to18 + newArtifactId: bcutil-jdk18on + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcpkix-jdk15to18 + newArtifactId: bcpkix-jdk18on + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcmail-jdk15to18 + newArtifactId: bcmail-jdk18on + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcjmail-jdk15to18 + newArtifactId: bcjmail-jdk18on + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bcpg-jdk15to18 + newArtifactId: bcpg-jdk18on + newVersion: latest.release + - org.openrewrite.java.dependencies.ChangeDependency: + oldGroupId: org.bouncycastle + oldArtifactId: bctls-jdk15to18 + newArtifactId: bctls-jdk18on + newVersion: latest.release diff --git a/src/main/resources/META-INF/rewrite/java-version-7.yml b/src/main/resources/META-INF/rewrite/java-version-7.yml index 2edceffe7d..1c75bfd50b 100644 --- a/src/main/resources/META-INF/rewrite/java-version-7.yml +++ b/src/main/resources/META-INF/rewrite/java-version-7.yml @@ -28,6 +28,7 @@ recipeList: - org.openrewrite.java.migrate.JREJdbcInterfaceNewMethods - org.openrewrite.java.migrate.JREThrowableFinalMethods - org.openrewrite.java.migrate.util.ReplaceMathRandomWithThreadLocalRandomRecipe + - org.openrewrite.java.migrate.BouncyCastleFromJdk15OnToJdk15to18 --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.migrate.JREJdbcInterfaceNewMethods @@ -69,4 +70,4 @@ recipeList: - org.openrewrite.java.migrate.AddMissingMethodImplementation: fullyQualifiedClassName: javax.sql.CommonDataSource methodPattern: "*..* getParentLogger()" - methodTemplateString: "public java.util.logging.Logger getParentLogger() { \n\t// TODO Auto-generated method stub\n return null; }" \ No newline at end of file + methodTemplateString: "public java.util.logging.Logger getParentLogger() { \n\t// TODO Auto-generated method stub\n return null; }" diff --git a/src/test/java/org/openrewrite/java/migrate/BouncyCastleTest.java b/src/test/java/org/openrewrite/java/migrate/BouncyCastleTest.java index ea504b57f9..aaa4180c52 100644 --- a/src/test/java/org/openrewrite/java/migrate/BouncyCastleTest.java +++ b/src/test/java/org/openrewrite/java/migrate/BouncyCastleTest.java @@ -17,13 +17,15 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; +import org.junit.jupiter.params.provider.MethodSource; import org.openrewrite.DocumentExample; import org.openrewrite.maven.tree.MavenResolutionResult; import org.openrewrite.maven.tree.Scope; -import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import java.util.Arrays; +import java.util.List; + import static java.util.function.UnaryOperator.identity; import static org.assertj.core.api.Assertions.assertThat; import static org.openrewrite.java.Assertions.mavenProject; @@ -31,28 +33,26 @@ class BouncyCastleTest implements RewriteTest { - @Override - public void defaults(RecipeSpec spec) { - spec.recipeFromResource( - "/META-INF/rewrite/bouncycastle-jdk18on.yml", - "org.openrewrite.java.migrate.BounceCastleFromJdk15OntoJdk18On"); + static List artifactBaseNames() { + return Arrays.asList("bcprov", "bcutil", "bcpkix", "bcmail", "bcjmail", "bcpg", "bctls"); } @DocumentExample @Test void document() { rewriteRun( + spec -> spec.recipeFromResource( + "/META-INF/rewrite/bouncycastle-jdk18on.yml", + "org.openrewrite.java.migrate.BounceCastleFromJdk15OntoJdk18On"), mavenProject("project", //language=xml pomXml( """ 4.0.0 - com.mycompany.app my-app 1 - org.bouncycastle @@ -86,31 +86,68 @@ void document() { ); } + @ParameterizedTest + @MethodSource("artifactBaseNames") + void jdk15onToJdk18on(String artifactBaseName) { + runBouncyCastleArtifactUpgradeRecipe( + "/META-INF/rewrite/bouncycastle-jdk18on.yml", + "org.openrewrite.java.migrate.BounceCastleFromJdk15OntoJdk18On", + artifactBaseName, + "jdk15on", + "jdk18on" + ); + } @ParameterizedTest - @ValueSource(strings = {"bcprov", "bcutil", "bcpkix", "bcmail", "bcjmail", "bcpg", "bctls"}) - void updateBouncyCastle(String value) { + @MethodSource("artifactBaseNames") + void jdk15to18ToJdk18on(String artifactBaseName) { + runBouncyCastleArtifactUpgradeRecipe( + "/META-INF/rewrite/bouncycastle-jdk18on.yml", + "org.openrewrite.java.migrate.BounceCastleFromJdk15OntoJdk18On", + artifactBaseName, + "jdk15to18", + "jdk18on" + ); + } + + @ParameterizedTest + @MethodSource("artifactBaseNames") + void jdk15onToJdk15To18(String artifactBaseName) { + runBouncyCastleArtifactUpgradeRecipe( + "/META-INF/rewrite/bouncycastle-jdk15to18.yml", + "org.openrewrite.java.migrate.BouncyCastleFromJdk15OnToJdk15to18", + artifactBaseName, + "jdk15on", + "jdk15to18" + ); + } + + void runBouncyCastleArtifactUpgradeRecipe( + String yamlFile, + String recipe, + String baseArtifactId, + String originalArtifactSuffix, + String expectedArtifactSuffix) { rewriteRun( + recipeSpec -> recipeSpec.recipeFromResource(yamlFile, recipe), mavenProject("project", //language=xml pomXml( - """ + """ 4.0.0 - com.mycompany.app my-app 1 - org.bouncycastle - %s-jdk15on + %s-%s 1.70 - """.formatted(value), + """.formatted(baseArtifactId, originalArtifactSuffix), spec -> spec .after(identity()) .afterRecipe(doc -> assertThat(doc.getMarkers().findFirst(MavenResolutionResult.class) @@ -119,7 +156,7 @@ void updateBouncyCastle(String value) { .singleElement() .satisfies(rd -> { assertThat(rd.getGroupId()).isEqualTo("org.bouncycastle"); - assertThat(rd.getArtifactId()).isEqualTo(value + "-jdk18on"); + assertThat(rd.getArtifactId()).isEqualTo(String.format("%s-%s", baseArtifactId, expectedArtifactSuffix)); })) ) )