diff --git a/src/main/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnType.java b/src/main/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnType.java index d1a42a989..6bc4f7122 100644 --- a/src/main/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnType.java +++ b/src/main/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnType.java @@ -17,22 +17,19 @@ import lombok.EqualsAndHashCode; import lombok.Value; -import org.openrewrite.ExecutionContext; import org.openrewrite.Option; import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.internal.ListUtils; -import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.MethodMatcher; -import org.openrewrite.java.tree.J; -import org.openrewrite.java.tree.JavaType; -import org.openrewrite.java.tree.TypeUtils; -import org.openrewrite.marker.Markers; -import static java.util.Collections.emptyList; +import java.util.List; +import static java.util.Collections.singletonList; + +/** + * @deprecated in favor of {@link org.openrewrite.java.ChangeMethodInvocationReturnType}. + */ @Value @EqualsAndHashCode(callSuper = false) +@Deprecated public class ChangeMethodInvocationReturnType extends Recipe { @Option(displayName = "Method pattern", @@ -56,63 +53,7 @@ public String getDescription() { } @Override - public TreeVisitor getVisitor() { - return new JavaIsoVisitor() { - private final MethodMatcher methodMatcher = new MethodMatcher(methodPattern, false); - - private boolean methodUpdated; - - @Override - public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx) { - J.MethodInvocation m = super.visitMethodInvocation(method, ctx); - JavaType.Method type = m.getMethodType(); - if (methodMatcher.matches(method) && type != null && !newReturnType.equals(type.getReturnType().toString())) { - type = type.withReturnType(JavaType.buildType(newReturnType)); - m = m.withMethodType(type); - if (m.getName().getType() != null) { - m = m.withName(m.getName().withType(type)); - } - methodUpdated = true; - } - return m; - } - - @Override - public J.VariableDeclarations visitVariableDeclarations(J.VariableDeclarations multiVariable, ExecutionContext ctx) { - methodUpdated = false; - JavaType.FullyQualified originalType = multiVariable.getTypeAsFullyQualified(); - J.VariableDeclarations mv = super.visitVariableDeclarations(multiVariable, ctx); - - if (methodUpdated) { - JavaType newType = JavaType.buildType(newReturnType); - JavaType.FullyQualified newFieldType = TypeUtils.asFullyQualified(newType); - - maybeAddImport(newFieldType); - maybeRemoveImport(originalType); - - mv = mv.withTypeExpression(mv.getTypeExpression() == null ? - null : - new J.Identifier(mv.getTypeExpression().getId(), - mv.getTypeExpression().getPrefix(), - Markers.EMPTY, - emptyList(), - newReturnType.substring(newReturnType.lastIndexOf('.') + 1), - newType, - null - ) - ); - - mv = mv.withVariables(ListUtils.map(mv.getVariables(), var -> { - JavaType.FullyQualified varType = TypeUtils.asFullyQualified(var.getType()); - if (varType != null && !varType.equals(newType)) { - return var.withType(newType).withName(var.getName().withType(newType)); - } - return var; - })); - } - - return mv; - } - }; + public List getRecipeList() { + return singletonList(new org.openrewrite.java.ChangeMethodInvocationReturnType(methodPattern, newReturnType)); } } diff --git a/src/main/java/org/openrewrite/java/migrate/ReplaceStringLiteralValue.java b/src/main/java/org/openrewrite/java/migrate/ReplaceStringLiteralValue.java index 5addb03b5..3aa093bff 100644 --- a/src/main/java/org/openrewrite/java/migrate/ReplaceStringLiteralValue.java +++ b/src/main/java/org/openrewrite/java/migrate/ReplaceStringLiteralValue.java @@ -20,16 +20,19 @@ import lombok.EqualsAndHashCode; import lombok.Value; import org.jspecify.annotations.NonNull; -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.tree.J; -import org.openrewrite.java.tree.JavaType; +import java.util.List; + +import static java.util.Collections.singletonList; + +/** + * @deprecated in favor of {@link org.openrewrite.java.ReplaceStringLiteralValue}. + */ @Value @EqualsAndHashCode(callSuper = false) +@Deprecated public class ReplaceStringLiteralValue extends Recipe { @Option(displayName = "Old literal `String` value", @@ -61,19 +64,7 @@ public String getDescription() { } @Override - public TreeVisitor getVisitor() { - return new JavaIsoVisitor() { - @Override - public J.Literal visitLiteral(J.Literal literal, ExecutionContext ctx) { - J.Literal l = super.visitLiteral(literal, ctx); - if (l.getType() != JavaType.Primitive.String || !oldLiteralValue.equals(literal.getValue())) { - return l; - } - return literal - .withValue(newLiteralValue) - .withValueSource('"' + newLiteralValue + '"'); - } - }; + public List getRecipeList() { + return singletonList(new org.openrewrite.java.ReplaceStringLiteralValue(oldLiteralValue, newLiteralValue)); } - } diff --git a/src/main/java/org/openrewrite/java/migrate/UpgradeJavaVersion.java b/src/main/java/org/openrewrite/java/migrate/UpgradeJavaVersion.java index 72f461897..c3997d6d6 100644 --- a/src/main/java/org/openrewrite/java/migrate/UpgradeJavaVersion.java +++ b/src/main/java/org/openrewrite/java/migrate/UpgradeJavaVersion.java @@ -24,9 +24,9 @@ import org.openrewrite.gradle.UpdateJavaCompatibility; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.marker.JavaVersion; -import org.openrewrite.java.migrate.maven.UpdateMavenProjectPropertyJavaVersion; -import org.openrewrite.java.migrate.maven.UseMavenCompilerPluginReleaseConfiguration; import org.openrewrite.java.tree.J; +import org.openrewrite.maven.UpdateMavenProjectPropertyJavaVersion; +import org.openrewrite.maven.UseMavenCompilerPluginReleaseConfiguration; import java.time.Duration; import java.util.*; @@ -48,9 +48,9 @@ public String getDisplayName() { @Override public String getDescription() { return "Upgrade build plugin configuration to use the specified Java version. " + - "This recipe changes `java.toolchain.languageVersion` in `build.gradle(.kts)` of gradle projects, " + - "or maven-compiler-plugin target version and related settings. " + - "Will not downgrade if the version is newer than the specified version."; + "This recipe changes `java.toolchain.languageVersion` in `build.gradle(.kts)` of gradle projects, " + + "or maven-compiler-plugin target version and related settings. " + + "Will not downgrade if the version is newer than the specified version."; } @Override diff --git a/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java b/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java index 04f154724..171ca3e87 100644 --- a/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java +++ b/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java @@ -17,41 +17,21 @@ import lombok.EqualsAndHashCode; import lombok.Value; -import org.openrewrite.ExecutionContext; import org.openrewrite.Option; import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.maven.AddProperty; -import org.openrewrite.maven.MavenIsoVisitor; -import org.openrewrite.xml.XPathMatcher; -import org.openrewrite.xml.tree.Xml; -import java.util.Arrays; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; +import static java.util.Collections.singletonList; + +/** + * @deprecated in favor of {@link org.openrewrite.maven.UpdateMavenProjectPropertyJavaVersion} + */ @Value @EqualsAndHashCode(callSuper = false) +@Deprecated public class UpdateMavenProjectPropertyJavaVersion extends Recipe { - private static final List JAVA_VERSION_PROPERTIES = Arrays.asList( - "java.version", - "jdk.version", - "javaVersion", - "jdkVersion", - "maven.compiler.source", - "maven.compiler.target", - "maven.compiler.release", - "release.version"); - - private static final List JAVA_VERSION_XPATH_MATCHERS = - JAVA_VERSION_PROPERTIES.stream() - .map(property -> "/project/properties/" + property) - .map(XPathMatcher::new).collect(Collectors.toList()); - - private static final XPathMatcher PLUGINS_MATCHER = new XPathMatcher("/project/build//plugins"); - @Option(displayName = "Java version", description = "The Java version to upgrade to.", example = "11") @@ -66,79 +46,19 @@ public String getDisplayName() { public String getDescription() { //language=markdown return "The Java version is determined by several project properties, including:\n\n" + - " * `java.version`\n" + - " * `jdk.version`\n" + - " * `javaVersion`\n" + - " * `jdkVersion`\n" + - " * `maven.compiler.source`\n" + - " * `maven.compiler.target`\n" + - " * `maven.compiler.release`\n" + - " * `release.version`\n\n" + - "If none of these properties are in use and the maven compiler plugin is not otherwise configured, adds the `maven.compiler.release` property."; + " * `java.version`\n" + + " * `jdk.version`\n" + + " * `javaVersion`\n" + + " * `jdkVersion`\n" + + " * `maven.compiler.source`\n" + + " * `maven.compiler.target`\n" + + " * `maven.compiler.release`\n" + + " * `release.version`\n\n" + + "If none of these properties are in use and the maven compiler plugin is not otherwise configured, adds the `maven.compiler.release` property."; } @Override - public TreeVisitor getVisitor() { - return new MavenIsoVisitor() { - boolean compilerPluginConfiguredExplicitly; - - @Override - public Xml.Document visitDocument(Xml.Document document, ExecutionContext ctx) { - // Update properties already defined in the current pom - Xml.Document d = super.visitDocument(document, ctx); - - // Return early if the parent appears to be within the current repository, as properties defined there will be updated - if (getResolutionResult().parentPomIsProjectPom()) { - return d; - } - - // Otherwise override remote parent's properties locally - Map currentProperties = getResolutionResult().getPom().getProperties(); - boolean foundProperty = false; - for (String property : JAVA_VERSION_PROPERTIES) { - String propertyValue = currentProperties.get(property); - if (propertyValue != null) { - foundProperty = true; - try { - if (Float.parseFloat(propertyValue) < version) { - d = (Xml.Document) new AddProperty(property, String.valueOf(version), null, false) - .getVisitor() - .visitNonNull(d, ctx); - maybeUpdateModel(); - } - } catch (NumberFormatException ex) { - // either an expression or something else, don't touch - } - } - } - - // When none of the relevant properties are explicitly configured Maven defaults to Java 8 - // The release option was added in 9 - // If no properties have yet been updated then set release explicitly - if (!foundProperty && version >= 9 && !compilerPluginConfiguredExplicitly) { - d = (Xml.Document) new AddProperty("maven.compiler.release", String.valueOf(version), null, false) - .getVisitor() - .visitNonNull(d, ctx); - maybeUpdateModel(); - } - - return d; - } - - @Override - public Xml.Tag visitTag(Xml.Tag tag, ExecutionContext ctx) { - Xml.Tag t = super.visitTag(tag, ctx); - if (isPluginTag("org.apache.maven.plugins", "maven-compiler-plugin")) { - t.getChild("configuration").ifPresent(compilerPluginConfig -> { - if (compilerPluginConfig.getChildValue("source").isPresent() || - compilerPluginConfig.getChildValue("target").isPresent() || - compilerPluginConfig.getChildValue("release").isPresent()) { - compilerPluginConfiguredExplicitly = true; - } - }); - } - return t; - } - }; + public List getRecipeList() { + return singletonList(new org.openrewrite.maven.UpdateMavenProjectPropertyJavaVersion(version)); } } diff --git a/src/main/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfiguration.java b/src/main/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfiguration.java index d44bb2478..a4a68f882 100644 --- a/src/main/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfiguration.java +++ b/src/main/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfiguration.java @@ -17,22 +17,20 @@ import lombok.EqualsAndHashCode; import lombok.Value; -import org.openrewrite.ExecutionContext; import org.openrewrite.Option; import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.maven.MavenIsoVisitor; -import org.openrewrite.maven.tree.MavenResolutionResult; import org.openrewrite.xml.XPathMatcher; -import org.openrewrite.xml.tree.Xml; -import java.util.Optional; +import java.util.List; -import static org.openrewrite.xml.AddOrUpdateChild.addOrUpdateChild; -import static org.openrewrite.xml.FilterTagChildrenVisitor.filterTagChildren; +import static java.util.Collections.singletonList; +/** + * @deprecated Use {@link org.openrewrite.maven.UseMavenCompilerPluginReleaseConfiguration} instead. + */ @Value @EqualsAndHashCode(callSuper = false) +@Deprecated public class UseMavenCompilerPluginReleaseConfiguration extends Recipe { private static final XPathMatcher PLUGINS_MATCHER = new XPathMatcher("/project/build//plugins"); @@ -55,63 +53,7 @@ public String getDescription() { } @Override - public TreeVisitor getVisitor() { - return new MavenIsoVisitor() { - @Override - public Xml.Tag visitTag(Xml.Tag tag, ExecutionContext ctx) { - Xml.Tag t = super.visitTag(tag, ctx); - if (!PLUGINS_MATCHER.matches(getCursor())) { - return t; - } - Optional maybeCompilerPlugin = t.getChildren().stream() - .filter(plugin -> - "plugin".equals(plugin.getName()) && - "org.apache.maven.plugins".equals(plugin.getChildValue("groupId").orElse("org.apache.maven.plugins")) && - "maven-compiler-plugin".equals(plugin.getChildValue("artifactId").orElse(null))) - .findAny(); - Optional maybeCompilerPluginConfig = maybeCompilerPlugin - .flatMap(it -> it.getChild("configuration")); - if (!maybeCompilerPluginConfig.isPresent()) { - return t; - } - Xml.Tag compilerPluginConfig = maybeCompilerPluginConfig.get(); - Optional source = compilerPluginConfig.getChildValue("source"); - Optional target = compilerPluginConfig.getChildValue("target"); - Optional release = compilerPluginConfig.getChildValue("release"); - if (!source.isPresent() && - !target.isPresent() && - !release.isPresent() || - currentNewerThanProposed(release)) { - return t; - } - Xml.Tag updated = filterTagChildren(t, compilerPluginConfig, - child -> !("source".equals(child.getName()) || "target".equals(child.getName()))); - String releaseVersionValue = hasJavaVersionProperty(getCursor().firstEnclosingOrThrow(Xml.Document.class)) ? - "${java.version}" : releaseVersion.toString(); - updated = addOrUpdateChild(updated, compilerPluginConfig, - Xml.Tag.build("" + releaseVersionValue + ""), getCursor().getParentOrThrow()); - return updated; - } - - }; - } - - private boolean currentNewerThanProposed(@SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional maybeRelease) { - if (!maybeRelease.isPresent()) { - return false; - } - try { - float currentVersion = Float.parseFloat(maybeRelease.get()); - float proposedVersion = Float.parseFloat(releaseVersion.toString()); - return proposedVersion < currentVersion; - } catch (NumberFormatException e) { - return false; - } - } - - private boolean hasJavaVersionProperty(Xml.Document xml) { - return xml.getMarkers().findFirst(MavenResolutionResult.class) - .map(r -> r.getPom().getProperties().get("java.version") != null) - .orElse(false); + public List getRecipeList() { + return singletonList(new org.openrewrite.maven.UseMavenCompilerPluginReleaseConfiguration(releaseVersion)); } } diff --git a/src/main/resources/META-INF/rewrite/ibm-java.yml b/src/main/resources/META-INF/rewrite/ibm-java.yml index 83b8f5aba..3f69f670b 100644 --- a/src/main/resources/META-INF/rewrite/ibm-java.yml +++ b/src/main/resources/META-INF/rewrite/ibm-java.yml @@ -63,7 +63,7 @@ description: Do not use the `com.sun.net.ssl.internal.www.protocol` package. tags: - java11 recipeList: - - org.openrewrite.java.migrate.ReplaceStringLiteralValue: + - org.openrewrite.java.ReplaceStringLiteralValue: oldLiteralValue: com.sun.net.ssl.internal.www.protocol newLiteralValue: com.ibm.net.ssl.www2.protocol --- @@ -143,4 +143,4 @@ recipeList: artifactId: jaxb-api - org.openrewrite.java.dependencies.RemoveDependency: groupId: javax.activation - artifactId: activation \ No newline at end of file + artifactId: activation diff --git a/src/main/resources/META-INF/rewrite/java-version-17.yml b/src/main/resources/META-INF/rewrite/java-version-17.yml index 4eb233dcd..35ba237f1 100644 --- a/src/main/resources/META-INF/rewrite/java-version-17.yml +++ b/src/main/resources/META-INF/rewrite/java-version-17.yml @@ -122,7 +122,7 @@ description: The `com.sun.net.ssl.internal.ssl.Provider` provider name was remov tags: - java17 recipeList: - - org.openrewrite.java.migrate.ReplaceStringLiteralValue: + - org.openrewrite.java.ReplaceStringLiteralValue: oldLiteralValue: com.sun.net.ssl.internal.ssl.Provider newLiteralValue: SunJSSE --- @@ -136,7 +136,7 @@ recipeList: - org.openrewrite.java.ChangeMethodName: methodPattern: java.util.logging.LogRecord getThreadID() newMethodName: getLongThreadID - - org.openrewrite.java.migrate.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: java.util.logging.LogRecord getLongThreadID() newReturnType: long - org.openrewrite.java.ChangeMethodName: diff --git a/src/test/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnTypeTest.java b/src/test/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnTypeTest.java index 0305834c9..84d6281d9 100644 --- a/src/test/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnTypeTest.java +++ b/src/test/java/org/openrewrite/java/migrate/ChangeMethodInvocationReturnTypeTest.java @@ -23,6 +23,7 @@ import static org.openrewrite.java.Assertions.java; +@Deprecated(forRemoval = true) class ChangeMethodInvocationReturnTypeTest implements RewriteTest { @Override diff --git a/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java b/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java index 20bd37503..e400cac9a 100644 --- a/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java +++ b/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java @@ -24,6 +24,7 @@ import static org.openrewrite.java.Assertions.mavenProject; import static org.openrewrite.maven.Assertions.pomXml; +@Deprecated(forRemoval = true) class UpdateMavenProjectPropertyJavaVersionTest implements RewriteTest { @Override diff --git a/src/test/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfigurationTest.java b/src/test/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfigurationTest.java index 2c3bf3993..75207ba0a 100644 --- a/src/test/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfigurationTest.java +++ b/src/test/java/org/openrewrite/java/migrate/maven/UseMavenCompilerPluginReleaseConfigurationTest.java @@ -24,6 +24,7 @@ import static org.openrewrite.java.Assertions.mavenProject; import static org.openrewrite.maven.Assertions.pomXml; +@Deprecated(forRemoval = true) class UseMavenCompilerPluginReleaseConfigurationTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { @@ -43,7 +44,7 @@ void replacesSourceAndTargetConfig() { org.sample sample 1.0.0 - + @@ -57,7 +58,7 @@ void replacesSourceAndTargetConfig() { - + """, """ @@ -67,7 +68,7 @@ void replacesSourceAndTargetConfig() { org.sample sample 1.0.0 - + @@ -80,7 +81,7 @@ void replacesSourceAndTargetConfig() { - + """ ) @@ -100,7 +101,7 @@ void replaceSourceAndTargetConfigIfDefault() { org.sample sample 1.0.0 - + @@ -115,7 +116,7 @@ void replaceSourceAndTargetConfigIfDefault() { - + """, """ @@ -125,7 +126,7 @@ void replaceSourceAndTargetConfigIfDefault() { org.sample sample 1.0.0 - + @@ -139,7 +140,7 @@ void replaceSourceAndTargetConfigIfDefault() { - + """ ) @@ -158,11 +159,11 @@ void reusesJavaVersionVariableIfAvailable() { org.sample sample 1.0.0 - + 11 - + @@ -175,7 +176,7 @@ void reusesJavaVersionVariableIfAvailable() { - + """, """ @@ -185,11 +186,11 @@ void reusesJavaVersionVariableIfAvailable() { org.sample sample 1.0.0 - + 11 - + @@ -201,7 +202,7 @@ void reusesJavaVersionVariableIfAvailable() { - + """ ) @@ -220,7 +221,7 @@ void upgradesExistingReleaseConfig() { org.sample sample 1.0.0 - + @@ -233,7 +234,7 @@ void upgradesExistingReleaseConfig() { - + """, """ @@ -243,7 +244,7 @@ void upgradesExistingReleaseConfig() { org.sample sample 1.0.0 - + @@ -256,7 +257,7 @@ void upgradesExistingReleaseConfig() { - + """ ) @@ -275,11 +276,11 @@ void prefersJavaVersionIfAvailable() { org.sample sample 1.0.0 - + 11 - + @@ -292,7 +293,7 @@ void prefersJavaVersionIfAvailable() { - + """, """ @@ -302,11 +303,11 @@ void prefersJavaVersionIfAvailable() { org.sample sample 1.0.0 - + 11 - + @@ -319,7 +320,7 @@ void prefersJavaVersionIfAvailable() { - + """ ) @@ -338,11 +339,11 @@ void notMisledByUnrelatedProperty() { org.sample sample 1.0.0 - + 11 - + @@ -356,7 +357,7 @@ void notMisledByUnrelatedProperty() { - + """, """ @@ -366,11 +367,11 @@ void notMisledByUnrelatedProperty() { org.sample sample 1.0.0 - + 11 - + @@ -384,7 +385,7 @@ void notMisledByUnrelatedProperty() { - + """ ) @@ -404,7 +405,7 @@ void noVersionDowngrade() { org.sample sample 1.0.0 - + @@ -417,7 +418,7 @@ void noVersionDowngrade() { - + """) ); @@ -435,11 +436,11 @@ void reusesJavaVersionVariableIfDefinedInParentPom() { org.sample parent 1.0.0 - + 11 - + pom """), @@ -450,16 +451,16 @@ void reusesJavaVersionVariableIfDefinedInParentPom() { 4.0.0 - + org.sample parent 1.0.0 - + sample 1.0.0 - + @@ -478,16 +479,16 @@ void reusesJavaVersionVariableIfDefinedInParentPom() { 4.0.0 - + org.sample parent 1.0.0 - + sample 1.0.0 - +