From 6d556352f65403114434cb0ac18f287e4826f855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Sun, 15 Mar 2026 21:38:52 +0100 Subject: [PATCH 01/12] OpenRewrite migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../en/docs/migration/v5-3-migration.md | 24 +++++++++++++++++++ pom.xml | 1 + 2 files changed, 25 insertions(+) diff --git a/docs/content/en/docs/migration/v5-3-migration.md b/docs/content/en/docs/migration/v5-3-migration.md index e3d7c34a9d..a603fbc945 100644 --- a/docs/content/en/docs/migration/v5-3-migration.md +++ b/docs/content/en/docs/migration/v5-3-migration.md @@ -3,6 +3,30 @@ title: Migrating from v5.2 to v5.3 description: Migrating from v5.2 to v5.3 --- +## Automated Migration with OpenRewrite + +You can automatically apply all the migration changes described below using [OpenRewrite](https://docs.openrewrite.org/). +Add the following to your `pom.xml` and run `mvn rewrite:run`: + +```xml + + org.openrewrite.maven + rewrite-maven-plugin + 6.33.0 + + + io.javaoperatorsdk.operator.migration.V5_3Migration + + + + + io.javaoperatorsdk + migration + 5.3.0 + + + +``` ## Rename of JUnit module diff --git a/pom.xml b/pom.xml index 9ee9155dbc..d1562cb1a0 100644 --- a/pom.xml +++ b/pom.xml @@ -54,6 +54,7 @@ caffeine-bounded-cache-support bootstrapper-maven-plugin test-index-processor + migration From 49dbbd65f5aa07edcea44d5788494607675fc973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Sun, 15 Mar 2026 21:39:27 +0100 Subject: [PATCH 02/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- migration/pom.xml | 69 +++++++ .../META-INF/rewrite/v5-3-migration.yml | 75 ++++++++ .../operator/migration/V53MigrationTest.java | 171 ++++++++++++++++++ 3 files changed, 315 insertions(+) create mode 100644 migration/pom.xml create mode 100644 migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml create mode 100644 migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java diff --git a/migration/pom.xml b/migration/pom.xml new file mode 100644 index 0000000000..3e64d47f72 --- /dev/null +++ b/migration/pom.xml @@ -0,0 +1,69 @@ + + + + 4.0.0 + + io.javaoperatorsdk + java-operator-sdk + 5.3.1-SNAPSHOT + + + migration + Operator SDK - Migration Recipes + OpenRewrite migration recipes for Java Operator SDK + + + 8.46.1 + + + + + org.openrewrite + rewrite-java + ${openrewrite.version} + + + org.openrewrite + rewrite-maven + ${openrewrite.version} + + + org.openrewrite + rewrite-test + ${openrewrite.version} + test + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.assertj + assertj-core + test + + + + diff --git a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml new file mode 100644 index 0000000000..fd4ad862e5 --- /dev/null +++ b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml @@ -0,0 +1,75 @@ +# +# Copyright Java Operator SDK Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# 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: io.javaoperatorsdk.operator.migration.V5_3Migration +displayName: Migrate to Java Operator SDK v5.3 +description: >- + Migrates Java Operator SDK from v5.2 to v5.3, including the JUnit module + rename and Metrics interface method renames. +recipeList: + - io.javaoperatorsdk.operator.migration.RenameJUnitModule + - io.javaoperatorsdk.operator.migration.MetricsMethodRenames + - io.javaoperatorsdk.operator.migration.RemoveMonitorSizeOf +--- +type: specs.openrewrite.org/v1beta/recipe +name: io.javaoperatorsdk.operator.migration.RenameJUnitModule +displayName: Rename JUnit module artifact +description: >- + Renames the operator-framework-junit-5 artifact to operator-framework-junit. +recipeList: + - org.openrewrite.maven.ChangeArtifactId: + groupId: io.javaoperatorsdk + oldArtifactId: operator-framework-junit-5 + newArtifactId: operator-framework-junit +--- +type: specs.openrewrite.org/v1beta/recipe +name: io.javaoperatorsdk.operator.migration.MetricsMethodRenames +displayName: Rename Metrics interface methods +description: >- + Renames methods on the Metrics interface to match the new v5.3 API. +recipeList: + - org.openrewrite.java.ChangeMethodName: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconcileCustomResource(..)" + newMethodName: reconciliationSubmitted + - org.openrewrite.java.ChangeMethodName: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconciliationExecutionStarted(..)" + newMethodName: reconciliationStarted + - org.openrewrite.java.ChangeMethodName: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconciliationExecutionFinished(..)" + newMethodName: reconciliationSucceeded + - org.openrewrite.java.ChangeMethodName: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics failedReconciliation(..)" + newMethodName: reconciliationFailed + - org.openrewrite.java.ChangeMethodName: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics finishedReconciliation(..)" + newMethodName: reconciliationFinished + - org.openrewrite.java.ChangeMethodName: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics cleanupDoneFor(..)" + newMethodName: cleanupDone + - org.openrewrite.java.ChangeMethodName: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics receivedEvent(..)" + newMethodName: eventReceived +--- +type: specs.openrewrite.org/v1beta/recipe +name: io.javaoperatorsdk.operator.migration.RemoveMonitorSizeOf +displayName: Remove monitorSizeOf method invocations +description: >- + Removes calls to the monitorSizeOf method which was removed in v5.3. +recipeList: + - org.openrewrite.java.RemoveMethodInvocations: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics monitorSizeOf(..)" diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java new file mode 100644 index 0000000000..0da53bf5a8 --- /dev/null +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -0,0 +1,171 @@ +/* + * Copyright Java Operator SDK Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 io.javaoperatorsdk.operator.migration; + +import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.maven.Assertions.pomXml; + +import org.junit.jupiter.api.Test; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +class V53MigrationTest implements RewriteTest { + + @Override + public void defaults(RecipeSpec spec) { + spec.recipeFromResources("io.javaoperatorsdk.operator.migration.V5_3Migration"); + } + + @Test + void renamesJUnitModuleInMaven() { + rewriteRun( + pomXml( + """ + + 4.0.0 + com.example + test + 1.0 + + + io.javaoperatorsdk + operator-framework-junit-5 + 5.2.0 + test + + + + """, + """ + + 4.0.0 + com.example + test + 1.0 + + + io.javaoperatorsdk + operator-framework-junit + 5.2.0 + test + + + + """)); + } + + @Test + void renamesMetricsMethods() { + rewriteRun( + // language=java + java( + """ + package io.javaoperatorsdk.operator.api.monitoring; + + import java.util.Map; + import io.fabric8.kubernetes.api.model.HasMetadata; + import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; + import io.javaoperatorsdk.operator.processing.event.Event; + import io.javaoperatorsdk.operator.processing.event.ResourceID; + + public interface Metrics { + default void receivedEvent(Event event, Map metadata) {} + default void reconcileCustomResource(HasMetadata resource, RetryInfo retryInfo, Map metadata) {} + default void reconciliationExecutionStarted(HasMetadata resource, Map metadata) {} + default void reconciliationExecutionFinished(HasMetadata resource, Map metadata) {} + default void failedReconciliation(HasMetadata resource, RetryInfo retryInfo, Exception exception, Map metadata) {} + default void finishedReconciliation(HasMetadata resource, Map metadata) {} + default void cleanupDoneFor(ResourceID resourceID, Map metadata) {} + } + """, + """ + package io.javaoperatorsdk.operator.api.monitoring; + + import java.util.Map; + import io.fabric8.kubernetes.api.model.HasMetadata; + import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; + import io.javaoperatorsdk.operator.processing.event.Event; + import io.javaoperatorsdk.operator.processing.event.ResourceID; + + public interface Metrics { + default void eventReceived(Event event, Map metadata) {} + default void reconciliationSubmitted(HasMetadata resource, RetryInfo retryInfo, Map metadata) {} + default void reconciliationStarted(HasMetadata resource, Map metadata) {} + default void reconciliationSucceeded(HasMetadata resource, Map metadata) {} + default void reconciliationFailed(HasMetadata resource, RetryInfo retryInfo, Exception exception, Map metadata) {} + default void reconciliationFinished(HasMetadata resource, Map metadata) {} + default void cleanupDone(ResourceID resourceID, Map metadata) {} + } + """)); + } + + @Test + void renamesMetricsMethodCallsInImplementation() { + rewriteRun( + // Stub for the Metrics interface + // language=java + java( + """ + package io.javaoperatorsdk.operator.api.monitoring; + + import java.util.Map; + + public interface Metrics { + default void receivedEvent(Object event, Map metadata) {} + default void reconcileCustomResource(Object resource, Object retryInfo, Map metadata) {} + } + """), + // Implementation that overrides the old method names + // language=java + java( + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class MyMetrics implements Metrics { + @Override + public void receivedEvent(Object event, Map metadata) { + System.out.println("event received"); + } + + @Override + public void reconcileCustomResource(Object resource, Object retryInfo, Map metadata) { + System.out.println("reconcile"); + } + } + """, + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class MyMetrics implements Metrics { + @Override + public void eventReceived(Object event, Map metadata) { + System.out.println("event received"); + } + + @Override + public void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) { + System.out.println("reconcile"); + } + } + """)); + } +} From 9eedfafa8c2a58eee129bf44bb39e57d9d566a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Sun, 15 Mar 2026 21:41:14 +0100 Subject: [PATCH 03/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../operator/migration/V53MigrationTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java index 0da53bf5a8..bab73d8b78 100644 --- a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -15,13 +15,13 @@ */ package io.javaoperatorsdk.operator.migration; -import static org.openrewrite.java.Assertions.java; -import static org.openrewrite.maven.Assertions.pomXml; - import org.junit.jupiter.api.Test; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.maven.Assertions.pomXml; + class V53MigrationTest implements RewriteTest { @Override From f3981b995f23b9678759411d3ddbe71bd459ba14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 12:54:49 +0100 Subject: [PATCH 04/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- migration/pom.xml | 6 +++ .../META-INF/rewrite/v5-3-migration.yml | 30 ++++++++++- .../operator/migration/V53MigrationTest.java | 51 ++++++++++--------- 3 files changed, 62 insertions(+), 25 deletions(-) diff --git a/migration/pom.xml b/migration/pom.xml index 3e64d47f72..1976274023 100644 --- a/migration/pom.xml +++ b/migration/pom.xml @@ -49,6 +49,12 @@ ${openrewrite.version} test + + org.openrewrite + rewrite-java-17 + ${openrewrite.version} + test + org.junit.jupiter junit-jupiter-api diff --git a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml index fd4ad862e5..e57339f1a1 100644 --- a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml +++ b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml @@ -22,20 +22,34 @@ description: >- Migrates Java Operator SDK from v5.2 to v5.3, including the JUnit module rename and Metrics interface method renames. recipeList: + - io.javaoperatorsdk.operator.migration.UpgradeJOSDKVersion - io.javaoperatorsdk.operator.migration.RenameJUnitModule - io.javaoperatorsdk.operator.migration.MetricsMethodRenames - io.javaoperatorsdk.operator.migration.RemoveMonitorSizeOf --- type: specs.openrewrite.org/v1beta/recipe +name: io.javaoperatorsdk.operator.migration.UpgradeJOSDKVersion +displayName: Upgrade Java Operator SDK version to 5.3.0 +description: >- + Upgrades all io.javaoperatorsdk dependencies from 5.2.x to 5.3.0. +recipeList: + - org.openrewrite.maven.UpgradeDependencyVersion: + groupId: io.javaoperatorsdk + artifactId: "*" + newVersion: 5.3.0 + versionPattern: "5.2.*" +--- +type: specs.openrewrite.org/v1beta/recipe name: io.javaoperatorsdk.operator.migration.RenameJUnitModule displayName: Rename JUnit module artifact description: >- Renames the operator-framework-junit-5 artifact to operator-framework-junit. recipeList: - - org.openrewrite.maven.ChangeArtifactId: - groupId: io.javaoperatorsdk + - org.openrewrite.maven.ChangeDependencyGroupIdAndArtifactId: + oldGroupId: io.javaoperatorsdk oldArtifactId: operator-framework-junit-5 newArtifactId: operator-framework-junit + newVersion: 5.3.0 --- type: specs.openrewrite.org/v1beta/recipe name: io.javaoperatorsdk.operator.migration.MetricsMethodRenames @@ -46,24 +60,36 @@ recipeList: - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconcileCustomResource(..)" newMethodName: reconciliationSubmitted + matchOverrides: true - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconciliationExecutionStarted(..)" newMethodName: reconciliationStarted + matchOverrides: true - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconciliationExecutionFinished(..)" newMethodName: reconciliationSucceeded + matchOverrides: true - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics failedReconciliation(..)" newMethodName: reconciliationFailed + matchOverrides: true - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics finishedReconciliation(..)" newMethodName: reconciliationFinished + matchOverrides: true + - org.openrewrite.java.AddMethodParameter: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconciliationFinished(..)" + parameterType: io.javaoperatorsdk.operator.api.reconciler.RetryInfo + parameterName: retryInfo + parameterIndex: 1 - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics cleanupDoneFor(..)" newMethodName: cleanupDone + matchOverrides: true - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics receivedEvent(..)" newMethodName: eventReceived + matchOverrides: true --- type: specs.openrewrite.org/v1beta/recipe name: io.javaoperatorsdk.operator.migration.RemoveMonitorSizeOf diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java index bab73d8b78..e1a2793634 100644 --- a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -59,7 +59,7 @@ void renamesJUnitModuleInMaven() { io.javaoperatorsdk operator-framework-junit - 5.2.0 + 5.3.0 test @@ -76,38 +76,33 @@ void renamesMetricsMethods() { package io.javaoperatorsdk.operator.api.monitoring; import java.util.Map; - import io.fabric8.kubernetes.api.model.HasMetadata; - import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; - import io.javaoperatorsdk.operator.processing.event.Event; - import io.javaoperatorsdk.operator.processing.event.ResourceID; public interface Metrics { - default void receivedEvent(Event event, Map metadata) {} - default void reconcileCustomResource(HasMetadata resource, RetryInfo retryInfo, Map metadata) {} - default void reconciliationExecutionStarted(HasMetadata resource, Map metadata) {} - default void reconciliationExecutionFinished(HasMetadata resource, Map metadata) {} - default void failedReconciliation(HasMetadata resource, RetryInfo retryInfo, Exception exception, Map metadata) {} - default void finishedReconciliation(HasMetadata resource, Map metadata) {} - default void cleanupDoneFor(ResourceID resourceID, Map metadata) {} + default void receivedEvent(Object event, Map metadata) {} + default void reconcileCustomResource(Object resource, Object retryInfo, Map metadata) {} + default void reconciliationExecutionStarted(Object resource, Map metadata) {} + default void reconciliationExecutionFinished(Object resource, Map metadata) {} + default void failedReconciliation(Object resource, Object retryInfo, Exception exception, Map metadata) {} + default void finishedReconciliation(Object resource, Map metadata) {} + default void cleanupDoneFor(Object resourceID, Map metadata) {} } """, """ package io.javaoperatorsdk.operator.api.monitoring; - import java.util.Map; - import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; - import io.javaoperatorsdk.operator.processing.event.Event; - import io.javaoperatorsdk.operator.processing.event.ResourceID; + + import java.util.Map; public interface Metrics { - default void eventReceived(Event event, Map metadata) {} - default void reconciliationSubmitted(HasMetadata resource, RetryInfo retryInfo, Map metadata) {} - default void reconciliationStarted(HasMetadata resource, Map metadata) {} - default void reconciliationSucceeded(HasMetadata resource, Map metadata) {} - default void reconciliationFailed(HasMetadata resource, RetryInfo retryInfo, Exception exception, Map metadata) {} - default void reconciliationFinished(HasMetadata resource, Map metadata) {} - default void cleanupDone(ResourceID resourceID, Map metadata) {} + default void eventReceived(Object event, Map metadata) {} + default void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) {} + default void reconciliationStarted(Object resource, Map metadata) {} + default void reconciliationSucceeded(Object resource, Map metadata) {} + default void reconciliationFailed(Object resource, Object retryInfo, Exception exception, Map metadata) {} + + default void reconciliationFinished(Object resource, RetryInfo retryInfo, Map metadata) {} + default void cleanupDone(Object resourceID, Map metadata) {} } """)); } @@ -127,6 +122,16 @@ public interface Metrics { default void receivedEvent(Object event, Map metadata) {} default void reconcileCustomResource(Object resource, Object retryInfo, Map metadata) {} } + """, + """ + package io.javaoperatorsdk.operator.api.monitoring; + + import java.util.Map; + + public interface Metrics { + default void eventReceived(Object event, Map metadata) {} + default void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) {} + } """), // Implementation that overrides the old method names // language=java From c6fca7794112dea7ef9c67ba0831bda1b60ea6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 12:58:30 +0100 Subject: [PATCH 05/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- docs/content/en/docs/migration/v5-3-migration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/en/docs/migration/v5-3-migration.md b/docs/content/en/docs/migration/v5-3-migration.md index a603fbc945..0a1292d608 100644 --- a/docs/content/en/docs/migration/v5-3-migration.md +++ b/docs/content/en/docs/migration/v5-3-migration.md @@ -22,7 +22,7 @@ Add the following to your `pom.xml` and run `mvn rewrite:run`: io.javaoperatorsdk migration - 5.3.0 + 5.3.1 From 13222ab5ceba98529720dc762c01e93dcd05ebe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 13:59:21 +0100 Subject: [PATCH 06/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../META-INF/rewrite/v5-3-migration.yml | 11 +++++-- .../operator/migration/V53MigrationTest.java | 32 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml index e57339f1a1..208f778682 100644 --- a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml +++ b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml @@ -73,6 +73,11 @@ recipeList: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics failedReconciliation(..)" newMethodName: reconciliationFailed matchOverrides: true + - org.openrewrite.java.AddMethodParameter: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconciliationFailed(..)" + parameterType: io.javaoperatorsdk.operator.api.reconciler.RetryInfo + parameterName: retryInfo + parameterIndex: 1 - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics finishedReconciliation(..)" newMethodName: reconciliationFinished @@ -93,9 +98,11 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe name: io.javaoperatorsdk.operator.migration.RemoveMonitorSizeOf -displayName: Remove monitorSizeOf method invocations +displayName: Remove monitorSizeOf method description: >- - Removes calls to the monitorSizeOf method which was removed in v5.3. + Removes the monitorSizeOf method declarations and invocations which were removed in v5.3. recipeList: - org.openrewrite.java.RemoveMethodInvocations: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics monitorSizeOf(..)" + - io.javaoperatorsdk.operator.migration.RemoveMethodDeclaration: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics monitorSizeOf(..)" diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java index e1a2793634..b631d99dcf 100644 --- a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -82,7 +82,7 @@ default void receivedEvent(Object event, Map metadata) {} default void reconcileCustomResource(Object resource, Object retryInfo, Map metadata) {} default void reconciliationExecutionStarted(Object resource, Map metadata) {} default void reconciliationExecutionFinished(Object resource, Map metadata) {} - default void failedReconciliation(Object resource, Object retryInfo, Exception exception, Map metadata) {} + default void failedReconciliation(Object resource, Exception exception, Map metadata) {} default void finishedReconciliation(Object resource, Map metadata) {} default void cleanupDoneFor(Object resourceID, Map metadata) {} } @@ -99,7 +99,8 @@ default void eventReceived(Object event, Map metadata) {} default void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) {} default void reconciliationStarted(Object resource, Map metadata) {} default void reconciliationSucceeded(Object resource, Map metadata) {} - default void reconciliationFailed(Object resource, Object retryInfo, Exception exception, Map metadata) {} + + default void reconciliationFailed(Object resource, RetryInfo retryInfo, Exception exception, Map metadata) {} default void reconciliationFinished(Object resource, RetryInfo retryInfo, Map metadata) {} default void cleanupDone(Object resourceID, Map metadata) {} @@ -173,4 +174,31 @@ public void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) {} + } + """, + """ + package io.javaoperatorsdk.operator.api.monitoring; + + import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; + + import java.util.Map; + + public interface Metrics { + default void reconciliationFinished(Object resource, RetryInfo retryInfo, Map metadata) {} + } + """)); + } } From 1fb20c647d295394a462cd9b30829db3d2d1c5b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 14:06:01 +0100 Subject: [PATCH 07/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../migration/RemoveMethodDeclaration.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java diff --git a/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java b/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java new file mode 100644 index 0000000000..8bd5c0f579 --- /dev/null +++ b/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java @@ -0,0 +1,68 @@ +/* + * Copyright Java Operator SDK Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 io.javaoperatorsdk.operator.migration; + +import org.openrewrite.ExecutionContext; +import org.openrewrite.Option; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.JavaIsoVisitor; +import org.openrewrite.java.MethodMatcher; +import org.openrewrite.java.tree.J; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class RemoveMethodDeclaration extends Recipe { + + @Option( + displayName = "Method pattern", + description = "A method pattern used to find matching method declarations.", + example = "com.example.Foo bar(..)") + private final String methodPattern; + + @JsonCreator + public RemoveMethodDeclaration(@JsonProperty("methodPattern") String methodPattern) { + this.methodPattern = methodPattern; + } + + @Override + public String getDisplayName() { + return "Remove method declaration"; + } + + @Override + public String getDescription() { + return "Removes method declarations matching the given method pattern."; + } + + @Override + public TreeVisitor getVisitor() { + var matcher = new MethodMatcher(methodPattern, true); + return new JavaIsoVisitor<>() { + @Override + public J.MethodDeclaration visitMethodDeclaration( + J.MethodDeclaration method, ExecutionContext ctx) { + var classDecl = getCursor().firstEnclosing(J.ClassDeclaration.class); + if (classDecl != null && matcher.matches(method, classDecl)) { + //noinspection DataFlowIssue + return null; + } + return super.visitMethodDeclaration(method, ctx); + } + }; + } +} From 77e94fbb8fa8f882b36df017b878b101590eb6e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 14:33:42 +0100 Subject: [PATCH 08/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../operator/migration/V53MigrationTest.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java index b631d99dcf..3e0711d3fd 100644 --- a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -175,6 +175,68 @@ public void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) {} + default Map monitorSizeOf(Map map) { return map; } + } + """, + """ + package io.javaoperatorsdk.operator.api.monitoring; + + import java.util.Map; + + public interface Metrics { + default void eventReceived(Object event, Map metadata) {} + } + """), + // Implementation that overrides monitorSizeOf + // language=java + java( + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class MyMetrics implements Metrics { + @Override + public void eventReceived(Object event, Map metadata) { + System.out.println("event"); + } + + @Override + public Map monitorSizeOf(Map map) { + System.out.println("monitoring size"); + return map; + } + } + """, + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class MyMetrics implements Metrics { + @Override + public void eventReceived(Object event, Map metadata) { + System.out.println("event"); + } + } + """)); + } + @Test void addsRetryInfoParameterToReconciliationFinished() { rewriteRun( From edb20f3e4ef33e1ae1d9ff7c725610c69dc0f74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 15:35:58 +0100 Subject: [PATCH 09/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../migration/RemoveMethodDeclaration.java | 4 +++ .../operator/migration/V53MigrationTest.java | 34 ++++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java b/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java index 8bd5c0f579..e6d442d4c7 100644 --- a/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java +++ b/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java @@ -56,6 +56,10 @@ public TreeVisitor getVisitor() { @Override public J.MethodDeclaration visitMethodDeclaration( J.MethodDeclaration method, ExecutionContext ctx) { + if (method.getMethodType() != null && matcher.matches(method.getMethodType())) { + //noinspection DataFlowIssue + return null; + } var classDecl = getCursor().firstEnclosing(J.ClassDeclaration.class); if (classDecl != null && matcher.matches(method, classDecl)) { //noinspection DataFlowIssue diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java index 3e0711d3fd..d1bc02e56f 100644 --- a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -176,9 +176,9 @@ public void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) {} - default Map monitorSizeOf(Map map) { return map; } + default > T monitorSizeOf(T map, String name) { return map; } } """, """ @@ -200,7 +200,7 @@ public interface Metrics { default void eventReceived(Object event, Map metadata) {} } """), - // Implementation that overrides monitorSizeOf + // Implementation that overrides monitorSizeOf with generic signature // language=java java( """ @@ -216,7 +216,7 @@ public void eventReceived(Object event, Map metadata) { } @Override - public Map monitorSizeOf(Map map) { + public > T monitorSizeOf(T map, String name) { System.out.println("monitoring size"); return map; } @@ -234,6 +234,30 @@ public void eventReceived(Object event, Map metadata) { System.out.println("event"); } } + """), + // Implementation without @Override annotation + // language=java + java( + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class AnotherMetrics implements Metrics { + public > T monitorSizeOf(T map, String name) { + return map; + } + } + """, + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class AnotherMetrics implements Metrics { + } """)); } From 91f34288b84053730b5b409e5cad28f1596cbcc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 19:01:07 +0100 Subject: [PATCH 10/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- docs/content/en/blog/releases/v5-3-release.md | 5 + .../en/docs/migration/v5-3-migration.md | 8 +- .../migration/RemoveMethodDeclaration.java | 124 ++++++++++++++---- .../META-INF/rewrite/v5-3-migration.yml | 20 ++- .../operator/migration/V53MigrationTest.java | 56 ++++++-- 5 files changed, 173 insertions(+), 40 deletions(-) diff --git a/docs/content/en/blog/releases/v5-3-release.md b/docs/content/en/blog/releases/v5-3-release.md index 512df03a84..12b9bfd30e 100644 --- a/docs/content/en/blog/releases/v5-3-release.md +++ b/docs/content/en/blog/releases/v5-3-release.md @@ -220,6 +220,11 @@ checks. `reconciliationFinished(..)` is extended with `RetryInfo`. `monitorSizeOf(..)` is removed. +### `ResourceAction` relocated + +`ResourceAction` in `io.javaoperatorsdk.operator.processing.event.source.controller` has been +removed. Use `io.javaoperatorsdk.operator.processing.event.source.ResourceAction` instead. + See the full [migration guide](/docs/migration/v5-3-migration) for details. ## Getting Started diff --git a/docs/content/en/docs/migration/v5-3-migration.md b/docs/content/en/docs/migration/v5-3-migration.md index 0a1292d608..08d6bca723 100644 --- a/docs/content/en/docs/migration/v5-3-migration.md +++ b/docs/content/en/docs/migration/v5-3-migration.md @@ -72,4 +72,10 @@ The following table shows the relevant method renames: Other changes: - `reconciliationFinished(..)` method is extended with `RetryInfo` -- `monitorSizeOf(..)` method is removed. \ No newline at end of file +- `monitorSizeOf(..)` method is removed. + +## ResourceAction relocation + +The `ResourceAction` enum has been removed from +`io.javaoperatorsdk.operator.processing.event.source.controller` use the one in package +`io.javaoperatorsdk.operator.processing.event.source.ResourceAction`; thus update your imports accordingly. \ No newline at end of file diff --git a/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java b/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java index e6d442d4c7..33841d5acc 100644 --- a/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java +++ b/migration/src/main/java/io/javaoperatorsdk/operator/migration/RemoveMethodDeclaration.java @@ -15,58 +15,136 @@ */ package io.javaoperatorsdk.operator.migration; +import java.util.Objects; + import org.openrewrite.ExecutionContext; +import org.openrewrite.NlsRewrite; import org.openrewrite.Option; import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.MethodMatcher; import org.openrewrite.java.tree.J; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.openrewrite.java.tree.JavaType; public class RemoveMethodDeclaration extends Recipe { @Option( - displayName = "Method pattern", - description = "A method pattern used to find matching method declarations.", - example = "com.example.Foo bar(..)") - private final String methodPattern; - - @JsonCreator - public RemoveMethodDeclaration(@JsonProperty("methodPattern") String methodPattern) { - this.methodPattern = methodPattern; - } + displayName = "Interface name", + description = "Fully qualified or simple name of the interface.", + example = "com.example.YourInterface") + String interfaceName; + + @Option( + displayName = "Method name", + description = "Name of the method to remove.", + example = "removedMethod") + String methodName; @Override public String getDisplayName() { - return "Remove method declaration"; + return "Remove obsolete method from implementing classes"; } @Override - public String getDescription() { - return "Removes method declarations matching the given method pattern."; + public @NlsRewrite.Description String getDescription() { + return "Remove obsolete method from implementing classes"; } @Override public TreeVisitor getVisitor() { - var matcher = new MethodMatcher(methodPattern, true); - return new JavaIsoVisitor<>() { + return new JavaIsoVisitor() { + + @Override + public J.ClassDeclaration visitClassDeclaration( + J.ClassDeclaration classDecl, ExecutionContext ctx) { + J.ClassDeclaration cd = super.visitClassDeclaration(classDecl, ctx); + + if (cd.getType() == null || !typeMatchesOrImplements(cd.getType())) { + return cd; + } + + // Mutate the type info in place to remove the method from the declared methods list, + // so all AST nodes sharing this type reference stay consistent. + var type = cd.getType(); + if (type instanceof JavaType.Class classType) { + var updatedMethods = + classType.getMethods().stream().filter(m -> !m.getName().equals(methodName)).toList(); + classType.unsafeSet( + classType.getTypeParameters(), + classType.getSupertype(), + classType.getOwningClass(), + classType.getAnnotations(), + classType.getInterfaces(), + classType.getMembers(), + updatedMethods); + } + + return cd; + } + @Override public J.MethodDeclaration visitMethodDeclaration( J.MethodDeclaration method, ExecutionContext ctx) { - if (method.getMethodType() != null && matcher.matches(method.getMethodType())) { - //noinspection DataFlowIssue - return null; + if (!method.getSimpleName().equals(methodName)) { + return super.visitMethodDeclaration(method, ctx); + } + + J.ClassDeclaration classDecl = getCursor().firstEnclosing(J.ClassDeclaration.class); + if (classDecl == null || classDecl.getType() == null) { + return super.visitMethodDeclaration(method, ctx); } - var classDecl = getCursor().firstEnclosing(J.ClassDeclaration.class); - if (classDecl != null && matcher.matches(method, classDecl)) { + + if (typeMatchesOrImplements(classDecl.getType())) { //noinspection DataFlowIssue return null; } + return super.visitMethodDeclaration(method, ctx); } + + private boolean typeMatchesOrImplements(JavaType.FullyQualified type) { + for (var iface : type.getInterfaces()) { + if (iface.getFullyQualifiedName().equals(interfaceName) + || typeMatchesOrImplements(iface)) { + return true; + } + } + var supertype = type.getSupertype(); + if (supertype != null && !supertype.getFullyQualifiedName().equals("java.lang.Object")) { + return typeMatchesOrImplements(supertype); + } + return false; + } }; } + + public String getInterfaceName() { + return interfaceName; + } + + public void setInterfaceName(String interfaceName) { + this.interfaceName = interfaceName; + } + + public String getMethodName() { + return methodName; + } + + public void setMethodName(String methodName) { + this.methodName = methodName; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + RemoveMethodDeclaration that = (RemoveMethodDeclaration) o; + return Objects.equals(interfaceName, that.interfaceName) + && Objects.equals(methodName, that.methodName); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), interfaceName, methodName); + } } diff --git a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml index 208f778682..92d157c824 100644 --- a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml +++ b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml @@ -26,6 +26,7 @@ recipeList: - io.javaoperatorsdk.operator.migration.RenameJUnitModule - io.javaoperatorsdk.operator.migration.MetricsMethodRenames - io.javaoperatorsdk.operator.migration.RemoveMonitorSizeOf + - io.javaoperatorsdk.operator.migration.RelocateResourceAction --- type: specs.openrewrite.org/v1beta/recipe name: io.javaoperatorsdk.operator.migration.UpgradeJOSDKVersion @@ -98,11 +99,18 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe name: io.javaoperatorsdk.operator.migration.RemoveMonitorSizeOf -displayName: Remove monitorSizeOf method -description: >- - Removes the monitorSizeOf method declarations and invocations which were removed in v5.3. +displayName: Remove MonitorSizeOf recipeList: - - org.openrewrite.java.RemoveMethodInvocations: - methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics monitorSizeOf(..)" - io.javaoperatorsdk.operator.migration.RemoveMethodDeclaration: - methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics monitorSizeOf(..)" + interfaceName: io.javaoperatorsdk.operator.api.monitoring.Metrics + methodName: monitorSizeOf +--- +type: specs.openrewrite.org/v1beta/recipe +name: io.javaoperatorsdk.operator.migration.RelocateResourceAction +displayName: Relocate ResourceAction class +description: >- + Moves ResourceAction import from the controller sub-package to the event source package. +recipeList: + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: io.javaoperatorsdk.operator.processing.event.source.controller.ResourceAction + newFullyQualifiedTypeName: io.javaoperatorsdk.operator.processing.event.source.ResourceAction diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java index d1bc02e56f..b6a165bd9c 100644 --- a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -178,7 +178,7 @@ public void reconciliationSubmitted(Object resource, Object retryInfo, Map metadata) {} default > T monitorSizeOf(T map, String name) { return map; } } - """, - """ - package io.javaoperatorsdk.operator.api.monitoring; - - import java.util.Map; - - public interface Metrics { - default void eventReceived(Object event, Map metadata) {} - } """), // Implementation that overrides monitorSizeOf with generic signature // language=java @@ -287,4 +278,49 @@ default void reconciliationFinished(Object resource, RetryInfo retryInfo, Map Date: Tue, 17 Mar 2026 19:06:18 +0100 Subject: [PATCH 11/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 34bc6c7d0f..3fa5655cbc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -22,7 +22,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: temurin - java-version: 25 + java-version: 17 cache: 'maven' - name: Check code format run: | From 96f123c3048f4a8f23aec2cf79ed79000e9ce02e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 17 Mar 2026 21:20:30 +0100 Subject: [PATCH 12/12] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../META-INF/rewrite/v5-3-migration.yml | 8 +++ .../operator/migration/V53MigrationTest.java | 67 +++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml index 92d157c824..cab26f1916 100644 --- a/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml +++ b/migration/src/main/resources/META-INF/rewrite/v5-3-migration.yml @@ -70,6 +70,10 @@ recipeList: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics reconciliationExecutionFinished(..)" newMethodName: reconciliationSucceeded matchOverrides: true + - org.openrewrite.java.AddNullMethodArgument: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics failedReconciliation(..)" + argumentIndex: 1 + parameterType: io.javaoperatorsdk.operator.api.reconciler.RetryInfo - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics failedReconciliation(..)" newMethodName: reconciliationFailed @@ -79,6 +83,10 @@ recipeList: parameterType: io.javaoperatorsdk.operator.api.reconciler.RetryInfo parameterName: retryInfo parameterIndex: 1 + - org.openrewrite.java.AddNullMethodArgument: + methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics finishedReconciliation(..)" + argumentIndex: 1 + parameterType: io.javaoperatorsdk.operator.api.reconciler.RetryInfo - org.openrewrite.java.ChangeMethodName: methodPattern: "io.javaoperatorsdk.operator.api.monitoring.Metrics finishedReconciliation(..)" newMethodName: reconciliationFinished diff --git a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java index b6a165bd9c..62ab4a412b 100644 --- a/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java +++ b/migration/src/test/java/io/javaoperatorsdk/operator/migration/V53MigrationTest.java @@ -279,6 +279,73 @@ default void reconciliationFinished(Object resource, RetryInfo retryInfo, Map metadata) {} + default void finishedReconciliation(Object resource, Map metadata) {} + } + """, + """ + package io.javaoperatorsdk.operator.api.monitoring; + + import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; + + import java.util.Map; + + public interface Metrics { + default void reconciliationFailed(Object resource, RetryInfo retryInfo, Exception exception, Map metadata) {} + + default void reconciliationFinished(Object resource, RetryInfo retryInfo, Map metadata) {} + } + """), + // Stub for RetryInfo + // language=java + java( + """ + package io.javaoperatorsdk.operator.api.reconciler; + public interface RetryInfo {} + """), + // Class that calls the old methods + // language=java + java( + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class MetricsCaller { + public void report(Metrics metrics, Object resource, Exception ex, Map meta) { + metrics.failedReconciliation(resource, ex, meta); + metrics.finishedReconciliation(resource, meta); + } + } + """, + """ + package com.example; + + import java.util.Map; + import io.javaoperatorsdk.operator.api.monitoring.Metrics; + + public class MetricsCaller { + public void report(Metrics metrics, Object resource, Exception ex, Map meta) { + metrics.reconciliationFailed(resource, null, ex, meta); + metrics.reconciliationFinished(resource, null, meta); + } + } + """)); + } + @Test void relocatesResourceActionImport() { rewriteRun(