From b9905a921d06b913258bd4b2b626106a359c5082 Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Thu, 19 Feb 2026 15:22:08 +0100 Subject: [PATCH 1/4] newJavaVersion=minor --- .../java/migrate/UpdateSdkMan.java | 9 +++- .../java/migrate/UpdateSdkManTest.java | 52 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java index 10d639c270..5cabfa14db 100644 --- a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java +++ b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java @@ -85,7 +85,14 @@ public Tree visit(@Nullable Tree tree, ExecutionContext ctx) { Pattern pattern = Pattern.compile("java=(.*?)([.a-z]*-.*)"); Matcher matcher = pattern.matcher(plainText.getText()); if (matcher.find()) { - String ver = newVersion == null ? matcher.group(1) : newVersion; + String ver; + if ("minor".equals(newVersion)) { + ver = matcher.group(1).split("\\.")[0]; + } else if (newVersion == null) { + ver = matcher.group(1); + } else { + ver = newVersion; + } String dist = newDistribution == null ? matcher.group(2) : "-" + newDistribution; String newBasis = ver + dist; Pattern majorPattern = Pattern.compile("^" + ver + "[.-].*"); diff --git a/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java b/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java index 99ecf648f5..57d401c86f 100644 --- a/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java +++ b/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java @@ -199,6 +199,58 @@ void upgradeIfNewVersionIsStillSameVersionBasisAndDifferentDistribution() { ); } + @Test + void minorUpgradesWithinSameMajorVersion() { + rewriteRun( + spec -> spec.recipe(new UpdateSdkMan("minor", null)), + text( + """ + java=21.0.6-zulu + """, + spec -> spec.path(".sdkmanrc") + .after(str -> assertThat(str) + .startsWith("java=21.0.") + .doesNotContain("21.0.6") + .endsWith("-zulu") + .actual()) + ) + ); + } + + @Test + void minorUpgradeWithNewDistribution() { + rewriteRun( + spec -> spec.recipe(new UpdateSdkMan("minor", "amzn")), + text( + """ + java=21.0.6-zulu + """, + spec -> spec.path(".sdkmanrc") + .after(str -> assertThat(str) + .startsWith("java=21.0.") + .endsWith("-amzn") + .actual()) + ) + ); + } + + @Test + void minorDoesNotCrossMajorVersion() { + rewriteRun( + spec -> spec.recipe(new UpdateSdkMan("minor", null)), + text( + """ + java=11.0.25-tem + """, + spec -> spec.path(".sdkmanrc") + .after(str -> assertThat(str) + .startsWith("java=11.0.") + .endsWith("-tem") + .actual()) + ) + ); + } + @Test void doNotDowngradeVersionIfAlreadyHighEnoughSameDistribution() { rewriteRun( From b85cbc31e01c1149672b6a049c023a7e9ae958e4 Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Thu, 19 Feb 2026 15:28:17 +0100 Subject: [PATCH 2/4] sameMajor --- .../java/org/openrewrite/java/migrate/UpdateSdkMan.java | 2 +- .../java/org/openrewrite/java/migrate/UpdateSdkManTest.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java index 5cabfa14db..a03fe4c4a2 100644 --- a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java +++ b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java @@ -86,7 +86,7 @@ public Tree visit(@Nullable Tree tree, ExecutionContext ctx) { Matcher matcher = pattern.matcher(plainText.getText()); if (matcher.find()) { String ver; - if ("minor".equals(newVersion)) { + if ("sameMajor".equalsIgnoreCase(newVersion)) { ver = matcher.group(1).split("\\.")[0]; } else if (newVersion == null) { ver = matcher.group(1); diff --git a/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java b/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java index 57d401c86f..520dc89e11 100644 --- a/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java +++ b/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java @@ -202,7 +202,7 @@ void upgradeIfNewVersionIsStillSameVersionBasisAndDifferentDistribution() { @Test void minorUpgradesWithinSameMajorVersion() { rewriteRun( - spec -> spec.recipe(new UpdateSdkMan("minor", null)), + spec -> spec.recipe(new UpdateSdkMan("sameMajor", null)), text( """ java=21.0.6-zulu @@ -220,7 +220,7 @@ void minorUpgradesWithinSameMajorVersion() { @Test void minorUpgradeWithNewDistribution() { rewriteRun( - spec -> spec.recipe(new UpdateSdkMan("minor", "amzn")), + spec -> spec.recipe(new UpdateSdkMan("sameMajor", "amzn")), text( """ java=21.0.6-zulu @@ -237,7 +237,7 @@ void minorUpgradeWithNewDistribution() { @Test void minorDoesNotCrossMajorVersion() { rewriteRun( - spec -> spec.recipe(new UpdateSdkMan("minor", null)), + spec -> spec.recipe(new UpdateSdkMan("sameMajor", null)), text( """ java=11.0.25-tem From fb449155dc5ac0577e7df75097e838e29b1d6c07 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 19 Feb 2026 20:39:16 +0100 Subject: [PATCH 3/4] Use latest.patch --- .../java/org/openrewrite/java/migrate/UpdateSdkMan.java | 2 +- .../java/org/openrewrite/java/migrate/UpdateSdkManTest.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java index a03fe4c4a2..d8d1df4b54 100644 --- a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java +++ b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java @@ -86,7 +86,7 @@ public Tree visit(@Nullable Tree tree, ExecutionContext ctx) { Matcher matcher = pattern.matcher(plainText.getText()); if (matcher.find()) { String ver; - if ("sameMajor".equalsIgnoreCase(newVersion)) { + if ("latest.patch".equalsIgnoreCase(newVersion)) { ver = matcher.group(1).split("\\.")[0]; } else if (newVersion == null) { ver = matcher.group(1); diff --git a/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java b/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java index 520dc89e11..ec14f1aa15 100644 --- a/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java +++ b/src/test/java/org/openrewrite/java/migrate/UpdateSdkManTest.java @@ -202,7 +202,7 @@ void upgradeIfNewVersionIsStillSameVersionBasisAndDifferentDistribution() { @Test void minorUpgradesWithinSameMajorVersion() { rewriteRun( - spec -> spec.recipe(new UpdateSdkMan("sameMajor", null)), + spec -> spec.recipe(new UpdateSdkMan("latest.patch", null)), text( """ java=21.0.6-zulu @@ -220,7 +220,7 @@ void minorUpgradesWithinSameMajorVersion() { @Test void minorUpgradeWithNewDistribution() { rewriteRun( - spec -> spec.recipe(new UpdateSdkMan("sameMajor", "amzn")), + spec -> spec.recipe(new UpdateSdkMan("latest.patch", "amzn")), text( """ java=21.0.6-zulu @@ -237,7 +237,7 @@ void minorUpgradeWithNewDistribution() { @Test void minorDoesNotCrossMajorVersion() { rewriteRun( - spec -> spec.recipe(new UpdateSdkMan("sameMajor", null)), + spec -> spec.recipe(new UpdateSdkMan("latest.patch", null)), text( """ java=11.0.25-tem From 07337a9059aae161368b28139bf23bbc8e365f39 Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Thu, 19 Feb 2026 21:12:11 +0100 Subject: [PATCH 4/4] Option doc --- src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java index d8d1df4b54..f33983050b 100644 --- a/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java +++ b/src/main/java/org/openrewrite/java/migrate/UpdateSdkMan.java @@ -43,7 +43,7 @@ public class UpdateSdkMan extends Recipe { @Option(displayName = "Java version", - description = "The Java version to update to.", + description = "The Java version to update to. Use `latest.patch` to upgrade to the latest version within the current major version.", required = false, example = "17") @Nullable