Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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 @@ -29,10 +29,17 @@
import org.openrewrite.java.tree.TypeUtils;
import org.openrewrite.marker.Markers;

import java.util.List;

import static java.util.Collections.emptyList;
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 +63,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 @@ -28,8 +28,17 @@
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.JavaType;

import java.util.Collections;
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 +70,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,8 +24,8 @@
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.maven.UpdateMavenProjectPropertyJavaVersion;
import org.openrewrite.maven.UseMavenCompilerPluginReleaseConfiguration;
import org.openrewrite.java.tree.J;

import java.time.Duration;
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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,20 @@
import org.openrewrite.xml.XPathMatcher;
import org.openrewrite.xml.tree.Xml;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static java.util.Collections.singletonList;
import static org.openrewrite.xml.AddOrUpdateChild.addOrUpdateChild;
import static org.openrewrite.xml.FilterTagChildrenVisitor.filterTagChildren;

/**
* @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");

Expand All @@ -55,63 +62,7 @@ public String getDescription() {
}

@Override
public TreeVisitor<?, ExecutionContext> getVisitor() {
return new MavenIsoVisitor<ExecutionContext>() {
@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<Xml.Tag> 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<Xml.Tag> maybeCompilerPluginConfig = maybeCompilerPlugin
.flatMap(it -> it.getChild("configuration"));
if (!maybeCompilerPluginConfig.isPresent()) {
return t;
}
Xml.Tag compilerPluginConfig = maybeCompilerPluginConfig.get();
Optional<String> source = compilerPluginConfig.getChildValue("source");
Optional<String> target = compilerPluginConfig.getChildValue("target");
Optional<String> 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("<release>" + releaseVersionValue + "</release>"), getCursor().getParentOrThrow());
return updated;
}

};
}

private boolean currentNewerThanProposed(@SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional<String> 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<Recipe> getRecipeList() {
return singletonList(new org.openrewrite.maven.UseMavenCompilerPluginReleaseConfiguration(releaseVersion));
}
}
4 changes: 2 additions & 2 deletions src/main/resources/META-INF/rewrite/ibm-java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
---
Expand Down Expand Up @@ -143,4 +143,4 @@ recipeList:
artifactId: jaxb-api
- org.openrewrite.java.dependencies.RemoveDependency:
groupId: javax.activation
artifactId: activation
artifactId: activation
4 changes: 2 additions & 2 deletions src/main/resources/META-INF/rewrite/java-version-17.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
---
Expand All @@ -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:
Expand Down
Loading
Loading