27
27
import org .openrewrite .maven .UpdateMavenModel ;
28
28
import org .openrewrite .maven .internal .MavenPomDownloader ;
29
29
import org .openrewrite .maven .tree .*;
30
+ import org .openrewrite .semver .LatestRelease ;
31
+ import org .openrewrite .semver .VersionComparator ;
30
32
import org .openrewrite .xml .ChangeTagValueVisitor ;
31
33
import org .openrewrite .xml .tree .Xml ;
32
34
@@ -44,6 +46,7 @@ public class UpgradeUnmanagedSpringProject extends Recipe {
44
46
private Pattern oldVersionPattern ;
45
47
46
48
private Map <String , String > springBootDependenciesMap ;
49
+ private VersionComparator versionComparator = new LatestRelease (null );
47
50
48
51
public UpgradeUnmanagedSpringProject () {
49
52
}
@@ -65,57 +68,24 @@ public void setVersionPattern(String versionPattern) {
65
68
@ Override
66
69
protected TreeVisitor <?, ExecutionContext > getApplicableTest () {
67
70
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
-
97
71
@ Override
98
72
public Xml .Tag visitTag (Xml .Tag tag , ExecutionContext executionContext ) {
99
73
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 );
108
79
}
80
+ }
109
81
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 );
116
87
}
117
88
}
118
-
119
89
return resultTag ;
120
90
}
121
91
@@ -172,6 +142,9 @@ private void mayBeUpdateVersion(String key, Xml.Tag tag) {
172
142
return ;
173
143
}
174
144
String versionValue = version .get ().getValue ().get ();
145
+ if (!isVersionToUpgrade (dependencyVersion , versionValue )) {
146
+ return ;
147
+ }
175
148
if (versionValue .startsWith ("${" )) {
176
149
String propertyName = versionValue .substring (2 , versionValue .length () - 1 );
177
150
version .ifPresent (xml -> doAfterVisit (new ChangePropertyValue (propertyName , dependencyVersion , true )));
@@ -181,6 +154,20 @@ private void mayBeUpdateVersion(String key, Xml.Tag tag) {
181
154
doAfterVisit (new UpdateMavenModel <>());
182
155
}
183
156
}
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
+ }
184
171
};
185
172
}
186
173
0 commit comments