Skip to content

Commit

Permalink
Use recipes moved to openrewrite/rewrite (#662)
Browse files Browse the repository at this point in the history
* Use recipes moved to openrewrite/rewrite

* Update references to moved recipes

* Also move `UpdateMavenProjectPropertyJavaVersion`

* Clean up imports
  • Loading branch information
timtebeek authored Jan 17, 2025
1 parent e0a9a98 commit 6d7ba9f
Show file tree
Hide file tree
Showing 10 changed files with 96 additions and 299 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -56,63 +53,7 @@ public String getDescription() {
}

@Override
public TreeVisitor<?, ExecutionContext> getVisitor() {
return new JavaIsoVisitor<ExecutionContext>() {
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<Recipe> getRecipeList() {
return singletonList(new org.openrewrite.java.ChangeMethodInvocationReturnType(methodPattern, newReturnType));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -61,19 +64,7 @@ public String getDescription() {
}

@Override
public TreeVisitor<?, ExecutionContext> getVisitor() {
return new JavaIsoVisitor<ExecutionContext>() {
@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<Recipe> getRecipeList() {
return singletonList(new org.openrewrite.java.ReplaceStringLiteralValue(oldLiteralValue, newLiteralValue));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> 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<XPathMatcher> 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")
Expand All @@ -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<?, ExecutionContext> getVisitor() {
return new MavenIsoVisitor<ExecutionContext>() {
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<String, String> 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<Recipe> getRecipeList() {
return singletonList(new org.openrewrite.maven.UpdateMavenProjectPropertyJavaVersion(version));
}
}
Loading

0 comments on commit 6d7ba9f

Please sign in to comment.