From 3d7bca20a6bc576af7216ed72f2e59a6eb5b8354 Mon Sep 17 00:00:00 2001 From: Jonathan Schneider Date: Sat, 3 Oct 2026 16:20:21 +0100 Subject: [PATCH 1/2] jackson-provider-override-signature: forward the default view parameter --- .../jakarta/JacksonProviderOverrides.java | 80 +++++++++++++ .../META-INF/rewrite/jakarta-ee-9.yml | 1 + .../jakarta/JacksonProviderOverridesTest.java | 106 ++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java create mode 100644 src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java diff --git a/src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java b/src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java new file mode 100644 index 0000000000..7a0a012ec9 --- /dev/null +++ b/src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java @@ -0,0 +1,80 @@ +/* + * Copyright 2024 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. + */ +package org.openrewrite.java.migrate.jakarta; + +import lombok.Getter; +import org.openrewrite.ExecutionContext; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.internal.ListUtils; +import org.openrewrite.java.JavaIsoVisitor; +import org.openrewrite.java.JavaTemplate; +import org.openrewrite.java.MethodMatcher; +import org.openrewrite.java.VariableNameUtils; +import org.openrewrite.java.tree.J; +import org.openrewrite.java.tree.JavaType; + +public class JacksonProviderOverrides extends Recipe { + @Getter + final String displayName = "Migrate Jackson provider configuration overrides"; + @Getter + final String description = "Add and forward the default view parameter required by Jakarta Jackson providers."; + + @Override + public TreeVisitor getVisitor() { + return new JavaIsoVisitor() { + final MethodMatcher oldMethod = new MethodMatcher( + "com.fasterxml.jackson.jaxrs.base.ProviderBase _configForWriting(com.fasterxml.jackson.databind.ObjectMapper, java.lang.annotation.Annotation[])", true); + + @Override + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext ctx) { + J.MethodDeclaration m = super.visitMethodDeclaration(method, ctx); + if (!oldMethod.matches(m.getMethodType()) || m.getParameters().size() != 2) { + return m; + } + String viewName = VariableNameUtils.generateVariableName("defaultView", getCursor(), + VariableNameUtils.GenerationStrategy.INCREMENT_NUMBER); + m = JavaTemplate.builder("#{}, #{}, Class " + viewName).contextSensitive().build() + .apply(updateCursor(m), m.getCoordinates().replaceParameters(), + m.getParameters().get(0).printTrimmed(getCursor()), + m.getParameters().get(1).printTrimmed(getCursor())); + m = m.withParameters(ListUtils.concat(method.getParameters(), m.getParameters().get(2))); + J.VariableDeclarations.NamedVariable view = ((J.VariableDeclarations) m.getParameters().get(2)).getVariables().get(0); + if (m.getBody() != null) { + m = m.withBody((J.Block) new JavaIsoVisitor() { + @Override + public J.MethodInvocation visitMethodInvocation(J.MethodInvocation invocation, ExecutionContext ctx) { + J.MethodInvocation mi = super.visitMethodInvocation(invocation, ctx); + if (oldMethod.matches(mi) && mi.getSelect() instanceof J.Identifier && + "super".equals(((J.Identifier) mi.getSelect()).getSimpleName())) { + return mi.withArguments(ListUtils.concat(mi.getArguments(), view.getName().withPrefix(org.openrewrite.java.tree.Space.SINGLE_SPACE))) + .withMethodType(addView(mi.getMethodType(), view.getType(), viewName)); + } + return mi; + } + }.visitNonNull(m.getBody(), ctx, updateCursor(m))); + } + JavaType.Method updatedType = addView(method.getMethodType(), view.getType(), viewName); + return m.withMethodType(updatedType).withName(m.getName().withType(updatedType)); + } + + private JavaType.Method addView(JavaType.Method method, JavaType type, String name) { + return method.withParameterTypes(ListUtils.concat(method.getParameterTypes(), type)) + .withParameterNames(ListUtils.concat(method.getParameterNames(), name)); + } + }; + } +} 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 be6253fbc5..c281de961f 100644 --- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml +++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml @@ -1259,6 +1259,7 @@ description: >- preconditions: - org.openrewrite.Singleton recipeList: + - org.openrewrite.java.migrate.jakarta.JacksonProviderOverrides # Raise older versions before changing coordinates, preserving newer versions and shared properties. - org.openrewrite.java.dependencies.UpgradeDependencyVersion: groupId: com.fasterxml.jackson.module diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java new file mode 100644 index 0000000000..60c3d1d237 --- /dev/null +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java @@ -0,0 +1,106 @@ +/* + * Copyright 2024 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. + */ +package org.openrewrite.java.migrate.jakarta; + +import org.junit.jupiter.api.Test; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.openrewrite.java.Assertions.java; + +class JacksonProviderOverridesTest implements RewriteTest { + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new JacksonProviderOverrides()).parser(JavaParser.fromJavaVersion().dependsOn( + "package com.fasterxml.jackson.databind; public class ObjectMapper { public void configure() {} }", + "package com.fasterxml.jackson.jaxrs.base; public class ProviderBase { protected Object _configForWriting(com.fasterxml.jackson.databind.ObjectMapper m, java.lang.annotation.Annotation[] a) { return null; } }" + )); + } + + @Test + void forwardDefaultViewInOverride() { + rewriteRun(java( + """ + import com.fasterxml.jackson.databind.ObjectMapper; + import com.fasterxml.jackson.jaxrs.base.ProviderBase; + import java.lang.annotation.Annotation; + + class CustomProvider extends ProviderBase { + @Override + protected Object _configForWriting(ObjectMapper mapper, Annotation[] annotations) { + mapper.configure(); + return super._configForWriting(mapper, annotations); + } + } + """, + """ + import com.fasterxml.jackson.databind.ObjectMapper; + import com.fasterxml.jackson.jaxrs.base.ProviderBase; + import java.lang.annotation.Annotation; + + class CustomProvider extends ProviderBase { + @Override + protected Object _configForWriting(ObjectMapper mapper, Annotation[] annotations, Class defaultView) { + mapper.configure(); + return super._configForWriting(mapper, annotations, defaultView); + } + } + """ + )); + } + @Test + void leaveUnrelatedMethodUnchanged() { + rewriteRun(java( + """ + import com.fasterxml.jackson.databind.ObjectMapper; + import java.lang.annotation.Annotation; + class Unrelated { + Object _configForWriting(ObjectMapper mapper, Annotation[] annotations) { return null; } + } + """ + )); + } + + @Test + void avoidLocalNameCollision() { + rewriteRun(java( + """ + import com.fasterxml.jackson.databind.ObjectMapper; + import com.fasterxml.jackson.jaxrs.base.ProviderBase; + import java.lang.annotation.Annotation; + class CustomProvider extends ProviderBase { + protected Object _configForWriting(ObjectMapper mapper, Annotation[] annotations) { + Object defaultView = null; + return super._configForWriting(mapper, annotations); + } + } + """, + """ + import com.fasterxml.jackson.databind.ObjectMapper; + import com.fasterxml.jackson.jaxrs.base.ProviderBase; + import java.lang.annotation.Annotation; + class CustomProvider extends ProviderBase { + protected Object _configForWriting(ObjectMapper mapper, Annotation[] annotations, Class defaultView1) { + Object defaultView = null; + return super._configForWriting(mapper, annotations, defaultView1); + } + } + """ + )); + } + +} From 3b71f8e1c9c18b9d64b718fe5c0231cc4f646bdf Mon Sep 17 00:00:00 2001 From: Jonathan Schneider Date: Sat, 3 Oct 2026 16:32:45 +0100 Subject: [PATCH 2/2] jackson-provider-override-signature: update callers of migrated overrides --- .../jakarta/JacksonProviderOverrides.java | 52 +++++++++++-------- .../resources/META-INF/rewrite/recipes.csv | 9 ++-- .../jakarta/JacksonProviderOverridesTest.java | 32 ++++++++++++ 3 files changed, 67 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java b/src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java index 7a0a012ec9..64cc42884c 100644 --- a/src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java +++ b/src/main/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverrides.java @@ -16,16 +16,21 @@ package org.openrewrite.java.migrate.jakarta; import lombok.Getter; +import org.openrewrite.Cursor; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; +import org.openrewrite.Tree; import org.openrewrite.TreeVisitor; import org.openrewrite.internal.ListUtils; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.MethodMatcher; import org.openrewrite.java.VariableNameUtils; +import org.openrewrite.java.tree.Expression; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; +import org.openrewrite.java.tree.Space; +import org.openrewrite.marker.Markers; public class JacksonProviderOverrides extends Recipe { @Getter @@ -41,34 +46,37 @@ public TreeVisitor getVisitor() { @Override public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext ctx) { - J.MethodDeclaration m = super.visitMethodDeclaration(method, ctx); - if (!oldMethod.matches(m.getMethodType()) || m.getParameters().size() != 2) { - return m; + if (!oldMethod.matches(method.getMethodType()) || method.getParameters().size() != 2) { + return super.visitMethodDeclaration(method, ctx); } String viewName = VariableNameUtils.generateVariableName("defaultView", getCursor(), VariableNameUtils.GenerationStrategy.INCREMENT_NUMBER); - m = JavaTemplate.builder("#{}, #{}, Class " + viewName).contextSensitive().build() - .apply(updateCursor(m), m.getCoordinates().replaceParameters(), - m.getParameters().get(0).printTrimmed(getCursor()), - m.getParameters().get(1).printTrimmed(getCursor())); + J.MethodDeclaration m = JavaTemplate.builder("#{}, #{}, Class " + viewName).contextSensitive().build() + .apply(getCursor(), method.getCoordinates().replaceParameters(), + method.getParameters().get(0).printTrimmed(getCursor()), + method.getParameters().get(1).printTrimmed(getCursor())); m = m.withParameters(ListUtils.concat(method.getParameters(), m.getParameters().get(2))); J.VariableDeclarations.NamedVariable view = ((J.VariableDeclarations) m.getParameters().get(2)).getVariables().get(0); - if (m.getBody() != null) { - m = m.withBody((J.Block) new JavaIsoVisitor() { - @Override - public J.MethodInvocation visitMethodInvocation(J.MethodInvocation invocation, ExecutionContext ctx) { - J.MethodInvocation mi = super.visitMethodInvocation(invocation, ctx); - if (oldMethod.matches(mi) && mi.getSelect() instanceof J.Identifier && - "super".equals(((J.Identifier) mi.getSelect()).getSimpleName())) { - return mi.withArguments(ListUtils.concat(mi.getArguments(), view.getName().withPrefix(org.openrewrite.java.tree.Space.SINGLE_SPACE))) - .withMethodType(addView(mi.getMethodType(), view.getType(), viewName)); - } - return mi; - } - }.visitNonNull(m.getBody(), ctx, updateCursor(m))); - } JavaType.Method updatedType = addView(method.getMethodType(), view.getType(), viewName); - return m.withMethodType(updatedType).withName(m.getName().withType(updatedType)); + m = m.withMethodType(updatedType).withName(m.getName().withType(updatedType)); + updateCursor(m).putMessage("jacksonDefaultView", view.getName()); + return super.visitMethodDeclaration(m, ctx); + } + + @Override + public J.MethodInvocation visitMethodInvocation(J.MethodInvocation invocation, ExecutionContext ctx) { + J.MethodInvocation mi = super.visitMethodInvocation(invocation, ctx); + if (!oldMethod.matches(mi)) { + return mi; + } + Cursor methodCursor = getCursor().dropParentUntil(value -> value instanceof J.MethodDeclaration || value instanceof J.CompilationUnit); + J.Identifier view = methodCursor.getMessage("jacksonDefaultView"); + Expression argument = view == null ? + new J.Literal(Tree.randomId(), Space.SINGLE_SPACE, Markers.EMPTY, null, "null", null, JavaType.Primitive.Null) : + view.withId(Tree.randomId()).withPrefix(Space.SINGLE_SPACE); + JavaType.Method updatedType = addView(mi.getMethodType(), JavaType.buildType("java.lang.Class"), "defaultView"); + return mi.withArguments(ListUtils.concat(mi.getArguments(), argument)).withMethodType(updatedType) + .withName(mi.getName().withType(updatedType)); } private JavaType.Method addView(JavaType.Method method, JavaType type, String name) { diff --git a/src/main/resources/META-INF/rewrite/recipes.csv b/src/main/resources/META-INF/rewrite/recipes.csv index 8429ac6592..57da7125fa 100644 --- a/src/main/resources/META-INF/rewrite/recipes.csv +++ b/src/main/resources/META-INF/rewrite/recipes.csv @@ -229,9 +229,10 @@ maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.j maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.FileuploadToFileUpload2,Migrate deprecated `org.apache.commons.fileload` packages to `org.apache.commons.fileload.core`,Migrate deprecated `org.apache.commons.fileload` packages to `org.apache.commons.fileload.core`.,6,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.HasJettyDependency,Build uses Jetty before version 12,Mark the source set when a Maven or Gradle module depends on servlet or WebSocket artifacts relocated by the Jetty 12 migration. This permits updating the Java baseline in parent build files as well as the module using Jetty.,1,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.HasNoJakartaAnnotations,Project has no Jakarta annotations,Mark all source as found per `JavaProject` where no Jakarta annotations are found. This is useful mostly as a precondition for recipes that require Jakarta annotations to be present.,1,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JacksonJavaxToJakarta,Migrate Jackson from javax to jakarta namespace,Java EE has been rebranded to Jakarta EE. This recipe replaces existing Jackson dependencies with their counterparts that are compatible with Jakarta EE 9.,26,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" -maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JakartaEE10,Migrate to Jakarta EE 10,"These recipes help with the Migration to Jakarta EE 10, flagging and updating deprecated methods.",662,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" -maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JakartaEE11,Migrate to Jakarta EE 11,"These recipes help with the Migration to Jakarta EE 11, flagging and updating deprecated methods.",680,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JacksonJavaxToJakarta,Migrate Jackson from javax to jakarta namespace,Java EE has been rebranded to Jakarta EE. This recipe replaces existing Jackson dependencies with their counterparts that are compatible with Jakarta EE 9.,27,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JacksonProviderOverrides,Migrate Jackson provider configuration overrides,Add and forward the default view parameter required by Jakarta Jackson providers.,1,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, +maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JakartaEE10,Migrate to Jakarta EE 10,"These recipes help with the Migration to Jakarta EE 10, flagging and updating deprecated methods.",663,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JakartaEE11,Migrate to Jakarta EE 11,"These recipes help with the Migration to Jakarta EE 11, flagging and updating deprecated methods.",681,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JakartaFacesConfigXml4,Migrate xmlns entries in `faces-config.xml` files,Jakarta EE 10 uses Faces version 4.,3,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JakartaFacesEcmaScript,Migrate JSF values inside EcmaScript files,"Convert JSF to Faces values inside JavaScript,TypeScript, and Properties files.",4,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JakartaFacesTagLibraryXml4,Migrate xmlns entries in `taglib.xml` files,Faces 4 uses facelet-taglib 4.0.,3,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, @@ -261,7 +262,7 @@ maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.j maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxJspToJakartaJsp,Migrate deprecated `javax.jsp` packages to `jakarta.jsp`,"Java EE has been rebranded to Jakarta EE, necessitating a package relocation.",6,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxJwsToJakartaJws,Migrate deprecated `javax.jws` packages to `jakarta.jws`,"Java EE has been rebranded to Jakarta EE, necessitating a package relocation.",6,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxMailToJakartaMail,Migrate deprecated `javax.mail` packages to `jakarta.mail`,"Java EE has been rebranded to Jakarta EE, necessitating a package relocation.",9,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, -maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta,Migrate to Jakarta EE 9,Jakarta EE 9 is the first version of Jakarta EE that uses the new `jakarta` namespace.,436,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" +maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta,Migrate to Jakarta EE 9,Jakarta EE 9 is the first version of Jakarta EE that uses the new `jakarta` namespace.,437,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,,"[{""name"":""org.openrewrite.maven.table.MavenMetadataFailures"",""displayName"":""Maven metadata failures"",""instanceName"":""Maven metadata failures"",""description"":""Attempts to resolve maven metadata that failed."",""columns"":[{""name"":""group"",""type"":""String"",""displayName"":""Group id"",""description"":""The groupId of the artifact for which the metadata download failed.""},{""name"":""artifactId"",""type"":""String"",""displayName"":""Artifact id"",""description"":""The artifactId of the artifact for which the metadata download failed.""},{""name"":""version"",""type"":""String"",""displayName"":""Version"",""description"":""The version of the artifact for which the metadata download failed.""},{""name"":""mavenRepositoryUri"",""type"":""String"",""displayName"":""Maven repository"",""description"":""The URL of the Maven repository that the metadata download failed on.""},{""name"":""snapshots"",""type"":""String"",""displayName"":""Snapshots"",""description"":""Does the repository support snapshots.""},{""name"":""releases"",""type"":""String"",""displayName"":""Releases"",""description"":""Does the repository support releases.""},{""name"":""failure"",""type"":""String"",""displayName"":""Failure"",""description"":""The reason the metadata download failed.""}]}]" maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxOrmXmlToJakartaOrmXml,Migrate xmlns entries in `orm.xml` files,"Java EE has been rebranded to Jakarta EE, necessitating an XML namespace relocation.",4,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxPersistenceToJakartaPersistence,Migrate deprecated `javax.persistence` packages to `jakarta.persistence`,"Java EE has been rebranded to Jakarta EE, necessitating a package relocation.",6,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, maven,org.openrewrite.recipe:rewrite-migrate-java,org.openrewrite.java.migrate.jakarta.JavaxPersistenceXmlToJakartaPersistenceXml,Migrate xmlns entries in `persistence.xml` files,"Java EE has been rebranded to Jakarta EE, necessitating an XML namespace relocation.",6,,Jakarta,Modernize,Java,,Recipes for migrating to [Jakarta EE](https://jakarta.ee/).,Modernize your code to best use the project's current JDK version. Take advantage of newly available APIs and reduce the dependency of your code on third party dependencies where there is equivalent functionality in the Java standard library.,Basic building blocks for transforming Java code.,, diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java index 60c3d1d237..8daf35ce89 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JacksonProviderOverridesTest.java @@ -103,4 +103,36 @@ protected Object _configForWriting(ObjectMapper mapper, Annotation[] annotations )); } + @Test + void updatesCallsToTheMigratedOverride() { + rewriteRun(java( + """ + import com.fasterxml.jackson.databind.ObjectMapper; + import com.fasterxml.jackson.jaxrs.base.ProviderBase; + import java.lang.annotation.Annotation; + class CustomProvider extends ProviderBase { + protected Object _configForWriting(ObjectMapper mapper, Annotation[] annotations) { + return super._configForWriting(mapper, annotations); + } + Object configure(ObjectMapper mapper, Annotation[] annotations) { + return _configForWriting(mapper, annotations); + } + } + """, + """ + import com.fasterxml.jackson.databind.ObjectMapper; + import com.fasterxml.jackson.jaxrs.base.ProviderBase; + import java.lang.annotation.Annotation; + class CustomProvider extends ProviderBase { + protected Object _configForWriting(ObjectMapper mapper, Annotation[] annotations, Class defaultView) { + return super._configForWriting(mapper, annotations, defaultView); + } + Object configure(ObjectMapper mapper, Annotation[] annotations) { + return _configForWriting(mapper, annotations, null); + } + } + """ + )); + } + }