Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use recipes moved to openrewrite/rewrite #662

Merged
merged 4 commits into from
Jan 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading