Skip to content

Commit 93b52c7

Browse files
authored
upgrade only older explicit versions (#421)
1 parent 1b3d531 commit 93b52c7

File tree

3 files changed

+364
-116
lines changed

3 files changed

+364
-116
lines changed

applications/spring-shell/src/test/java/org/springframework/sbm/BootUpgrade_27_30_ManuallyManaged_IntegrationTest.java

-3
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,13 @@
2020
import org.jetbrains.annotations.NotNull;
2121
import org.junit.jupiter.api.Tag;
2222
import org.junit.jupiter.api.Test;
23-
import org.openrewrite.InMemoryExecutionContext;
2423
import org.openrewrite.maven.MavenParser;
25-
import org.openrewrite.maven.internal.MavenPomDownloader;
2624
import org.openrewrite.maven.tree.Dependency;
2725
import org.openrewrite.maven.tree.MavenResolutionResult;
2826
import org.openrewrite.maven.tree.ResolvedManagedDependency;
2927
import org.openrewrite.xml.tree.Xml;
3028

3129
import java.nio.file.Path;
32-
import java.util.HashMap;
3330
import java.util.List;
3431
import java.util.Map;
3532
import java.util.Optional;

components/sbm-openrewrite/src/main/java/org/openrewrite/maven/spring/UpgradeUnmanagedSpringProject.java

+31-44
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.openrewrite.maven.UpdateMavenModel;
2828
import org.openrewrite.maven.internal.MavenPomDownloader;
2929
import org.openrewrite.maven.tree.*;
30+
import org.openrewrite.semver.LatestRelease;
31+
import org.openrewrite.semver.VersionComparator;
3032
import org.openrewrite.xml.ChangeTagValueVisitor;
3133
import org.openrewrite.xml.tree.Xml;
3234

@@ -44,6 +46,7 @@ public class UpgradeUnmanagedSpringProject extends Recipe {
4446
private Pattern oldVersionPattern;
4547

4648
private Map<String, String> springBootDependenciesMap;
49+
private VersionComparator versionComparator = new LatestRelease(null);
4750

4851
public UpgradeUnmanagedSpringProject() {
4952
}
@@ -65,57 +68,24 @@ public void setVersionPattern(String versionPattern) {
6568
@Override
6669
protected TreeVisitor<?, ExecutionContext> getApplicableTest() {
6770
return new MavenIsoVisitor<>() {
68-
private boolean validForFurtherReview = true;
69-
70-
@Override
71-
public Xml.Document visitDocument(Xml.Document document, ExecutionContext executionContext) {
72-
new MavenIsoVisitor<Integer>() {
73-
@Override
74-
public Xml.Tag visitTag(Xml.Tag tag, Integer executionContext) {
75-
if (isParentTag()) {
76-
Optional<Xml.Tag> artifactId = tag.getChild(ARTIFACT_ID);
77-
if (artifactId.isPresent()) {
78-
Optional<String> artifactIdValue = artifactId.get().getValue();
79-
if (artifactIdValue.isPresent()) {
80-
if (artifactIdValue.get().equals(SPRING_BOOT_STARTER_PARENT)) {
81-
validForFurtherReview = false;
82-
}
83-
}
84-
}
85-
}
86-
if (isManagedDependencyTag(SPRINGBOOT_GROUP, SPRING_BOOT_DEPENDENCIES)) {
87-
validForFurtherReview = false;
88-
}
89-
90-
return super.visitTag(tag, executionContext);
91-
}
92-
}.visit(document, 0);
93-
94-
return super.visitDocument(document, executionContext);
95-
}
96-
9771
@Override
9872
public Xml.Tag visitTag(Xml.Tag tag, ExecutionContext executionContext) {
9973
Xml.Tag resultTag = super.visitTag(tag, executionContext);
100-
101-
if (validForFurtherReview) {
102-
if (isManagedDependencyTag()) {
103-
ResolvedManagedDependency managedDependency = findManagedDependency(resultTag);
104-
if ((managedDependency != null) && managedDependency.getGroupId().equals(SPRINGBOOT_GROUP)
105-
&& satisfiesOldVersionPattern(managedDependency.getVersion())) {
106-
return applyThisRecipe(resultTag);
107-
}
74+
if (isManagedDependencyTag()) {
75+
ResolvedManagedDependency managedDependency = findManagedDependency(resultTag);
76+
if ((managedDependency != null) && managedDependency.getGroupId().equals(SPRINGBOOT_GROUP)
77+
&& satisfiesOldVersionPattern(managedDependency.getVersion())) {
78+
return applyThisRecipe(resultTag);
10879
}
80+
}
10981

110-
if (isDependencyTag()) {
111-
ResolvedDependency dependency = findDependency(resultTag);
112-
if ((dependency != null) && dependency.getGroupId().equals(SPRINGBOOT_GROUP)
113-
&& satisfiesOldVersionPattern(dependency.getVersion())) {
114-
return applyThisRecipe(resultTag);
115-
}
82+
if (isDependencyTag()) {
83+
ResolvedDependency dependency = findDependency(resultTag);
84+
if ((dependency != null) && dependency.getGroupId().equals(SPRINGBOOT_GROUP)
85+
&& satisfiesOldVersionPattern(dependency.getVersion())) {
86+
return applyThisRecipe(resultTag);
11687
}
11788
}
118-
11989
return resultTag;
12090
}
12191

@@ -172,6 +142,9 @@ private void mayBeUpdateVersion(String key, Xml.Tag tag) {
172142
return;
173143
}
174144
String versionValue = version.get().getValue().get();
145+
if (!isVersionToUpgrade(dependencyVersion, versionValue)) {
146+
return;
147+
}
175148
if (versionValue.startsWith("${")) {
176149
String propertyName = versionValue.substring(2, versionValue.length() - 1);
177150
version.ifPresent(xml -> doAfterVisit(new ChangePropertyValue(propertyName, dependencyVersion, true)));
@@ -181,6 +154,20 @@ private void mayBeUpdateVersion(String key, Xml.Tag tag) {
181154
doAfterVisit(new UpdateMavenModel<>());
182155
}
183156
}
157+
158+
private boolean isVersionToUpgrade(String upgradeVersion, String versionValue) {
159+
String currentVersion = versionValue;
160+
if (versionValue.startsWith("${")) {
161+
String versionName = versionValue.substring(2, versionValue.length() - 1);
162+
Map<String, String> properties = getResolutionResult().getPom().getProperties();
163+
if ((properties != null) && properties.containsKey(versionName)) {
164+
currentVersion = properties.get(versionName);
165+
} else {
166+
return false;
167+
}
168+
}
169+
return versionComparator.compare(null, upgradeVersion, currentVersion) > 0;
170+
}
184171
};
185172
}
186173

0 commit comments

Comments
 (0)