Skip to content

420 upgrade only older explicit versions #421

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

Merged
merged 18 commits into from
Sep 26, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
8434328
Updated test container dependency
ashakirin Aug 18, 2022
c6624e4
Revert "Updated test container dependency"
ashakirin Aug 18, 2022
597e140
Merge branch 'spring-projects-experimental:main' into main
sanagaraj-pivotal Aug 22, 2022
48e5f8e
Merge branch 'spring-projects-experimental:main' into main
sanagaraj-pivotal Aug 24, 2022
ba6da28
Merge branch 'spring-projects-experimental:main' into main
sanagaraj-pivotal Aug 25, 2022
4720e24
Merge branch 'spring-projects-experimental:main' into main
sanagaraj-pivotal Aug 26, 2022
2f9c293
Merge branch 'spring-projects-experimental:main' into main
ashakirin Sep 5, 2022
216fcb4
Merge branch 'spring-projects-experimental:main' into main
sanagaraj-pivotal Sep 6, 2022
e820dc1
Merge branch 'spring-projects-experimental:main' into main
ashakirin Sep 12, 2022
911ec76
Merge branch 'spring-projects-experimental:main' into main
sanagaraj-pivotal Sep 15, 2022
c0b7c78
Merge branch 'spring-projects-experimental:main' into main
ashakirin Sep 19, 2022
4411cc3
Added check for not found unmanaged dependency
ashakirin Sep 19, 2022
b4880e9
Upgrade only older explicit versions; removed unnecessary check for p…
ashakirin Sep 19, 2022
e259286
Formatting
ashakirin Sep 20, 2022
1ec4ebf
Merge branch 'main' into 420-upgrade-only-older-explicit-versions
fabapp2 Sep 23, 2022
2ae13d9
Merge branch 'main' into 420-upgrade-only-older-explicit-versions
fabapp2 Sep 23, 2022
f697e06
Merge branch 'main' into 420-upgrade-only-older-explicit-versions
fabapp2 Sep 23, 2022
4e95a4c
Merge branch 'main' into 420-upgrade-only-older-explicit-versions
fabapp2 Sep 26, 2022
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 @@ -20,16 +20,13 @@
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.maven.MavenParser;
import org.openrewrite.maven.internal.MavenPomDownloader;
import org.openrewrite.maven.tree.Dependency;
import org.openrewrite.maven.tree.MavenResolutionResult;
import org.openrewrite.maven.tree.ResolvedManagedDependency;
import org.openrewrite.xml.tree.Xml;

import java.nio.file.Path;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import org.openrewrite.maven.UpdateMavenModel;
import org.openrewrite.maven.internal.MavenPomDownloader;
import org.openrewrite.maven.tree.*;
import org.openrewrite.semver.LatestRelease;
import org.openrewrite.semver.VersionComparator;
import org.openrewrite.xml.ChangeTagValueVisitor;
import org.openrewrite.xml.tree.Xml;

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

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

public UpgradeUnmanagedSpringProject() {
}
Expand All @@ -65,57 +68,24 @@ public void setVersionPattern(String versionPattern) {
@Override
protected TreeVisitor<?, ExecutionContext> getApplicableTest() {
return new MavenIsoVisitor<>() {
private boolean validForFurtherReview = true;

@Override
public Xml.Document visitDocument(Xml.Document document, ExecutionContext executionContext) {
new MavenIsoVisitor<Integer>() {
@Override
public Xml.Tag visitTag(Xml.Tag tag, Integer executionContext) {
if (isParentTag()) {
Optional<Xml.Tag> artifactId = tag.getChild(ARTIFACT_ID);
if (artifactId.isPresent()) {
Optional<String> artifactIdValue = artifactId.get().getValue();
if (artifactIdValue.isPresent()) {
if (artifactIdValue.get().equals(SPRING_BOOT_STARTER_PARENT)) {
validForFurtherReview = false;
}
}
}
}
if (isManagedDependencyTag(SPRINGBOOT_GROUP, SPRING_BOOT_DEPENDENCIES)) {
validForFurtherReview = false;
}

return super.visitTag(tag, executionContext);
}
}.visit(document, 0);

return super.visitDocument(document, executionContext);
}

@Override
public Xml.Tag visitTag(Xml.Tag tag, ExecutionContext executionContext) {
Xml.Tag resultTag = super.visitTag(tag, executionContext);

if (validForFurtherReview) {
if (isManagedDependencyTag()) {
ResolvedManagedDependency managedDependency = findManagedDependency(resultTag);
if ((managedDependency != null) && managedDependency.getGroupId().equals(SPRINGBOOT_GROUP)
&& satisfiesOldVersionPattern(managedDependency.getVersion())) {
return applyThisRecipe(resultTag);
}
if (isManagedDependencyTag()) {
ResolvedManagedDependency managedDependency = findManagedDependency(resultTag);
if ((managedDependency != null) && managedDependency.getGroupId().equals(SPRINGBOOT_GROUP)
&& satisfiesOldVersionPattern(managedDependency.getVersion())) {
return applyThisRecipe(resultTag);
}
}

if (isDependencyTag()) {
ResolvedDependency dependency = findDependency(resultTag);
if ((dependency != null) && dependency.getGroupId().equals(SPRINGBOOT_GROUP)
&& satisfiesOldVersionPattern(dependency.getVersion())) {
return applyThisRecipe(resultTag);
}
if (isDependencyTag()) {
ResolvedDependency dependency = findDependency(resultTag);
if ((dependency != null) && dependency.getGroupId().equals(SPRINGBOOT_GROUP)
&& satisfiesOldVersionPattern(dependency.getVersion())) {
return applyThisRecipe(resultTag);
}
}

return resultTag;
}

Expand Down Expand Up @@ -172,6 +142,9 @@ private void mayBeUpdateVersion(String key, Xml.Tag tag) {
return;
}
String versionValue = version.get().getValue().get();
if (!isVersionToUpgrade(dependencyVersion, versionValue)) {
return;
}
if (versionValue.startsWith("${")) {
String propertyName = versionValue.substring(2, versionValue.length() - 1);
version.ifPresent(xml -> doAfterVisit(new ChangePropertyValue(propertyName, dependencyVersion, true)));
Expand All @@ -181,6 +154,20 @@ private void mayBeUpdateVersion(String key, Xml.Tag tag) {
doAfterVisit(new UpdateMavenModel<>());
}
}

private boolean isVersionToUpgrade(String upgradeVersion, String versionValue) {
String currentVersion = versionValue;
if (versionValue.startsWith("${")) {
String versionName = versionValue.substring(2, versionValue.length() - 1);
Map<String, String> properties = getResolutionResult().getPom().getProperties();
if ((properties != null) && properties.containsKey(versionName)) {
currentVersion = properties.get(versionName);
} else {
return false;
}
}
return versionComparator.compare(null, upgradeVersion, currentVersion) > 0;
}
};
}

Expand Down
Loading