added boot version validations for patch, minor, and major versions as individual markers, but individual preferences not yet done

This commit is contained in:
Martin Lippert
2022-11-17 19:17:01 +01:00
parent 1202827fff
commit 57dc9e8a52
2 changed files with 114 additions and 9 deletions

View File

@@ -34,17 +34,55 @@ public class VersionValidationUtils {
return currentDate.before(commercialEndDate); return currentDate.before(commercialEndDate);
} }
public static Version getLatestSupportedInSameMajor(ResolvedSpringProject springProject, Version version) public static Version getNewerPatchVersion(ResolvedSpringProject springProject, Version version) throws Exception {
throws Exception { Version result = version;
List<Release> rls = springProject.getReleases(); List<Release> rls = springProject.getReleases();
for (Release release : rls) { for (Release release : rls) {
Version rlVersion = release.getVersion(); Version rlVersion = release.getVersion();
if (GENERAL_AVAILABILITY_STATUS.equals(release.getStatus()) if (GENERAL_AVAILABILITY_STATUS.equals(release.getStatus())
&& rlVersion.getMajor() == version.getMajor()) { && rlVersion.getMajor() == result.getMajor()
return rlVersion; && rlVersion.getMinor() == result.getMinor()
&& rlVersion.getPatch() > result.getPatch()) {
result = rlVersion;
} }
} }
return null;
return result.equals(version) ? null : result;
}
public static Version getNewerMinorVersion(ResolvedSpringProject springProject, Version version) throws Exception {
Version result = version;
List<Release> rls = springProject.getReleases();
for (Release release : rls) {
Version rlVersion = release.getVersion();
if (GENERAL_AVAILABILITY_STATUS.equals(release.getStatus())
&& rlVersion.getMajor() == result.getMajor()
&& rlVersion.getMinor() > result.getMinor()) {
result = rlVersion;
}
}
return result.equals(version) ? null : result;
}
public static Version getNewerMajorVersion(ResolvedSpringProject springProject, Version version) throws Exception {
Version result = version;
List<Release> rls = springProject.getReleases();
for (Release release : rls) {
Version rlVersion = release.getVersion();
if (GENERAL_AVAILABILITY_STATUS.equals(release.getStatus())
&& rlVersion.getMajor() > result.getMajor()) {
result = rlVersion;
}
}
return result.equals(version) ? null : result;
} }
public static Version getLatestSupportedRelease(ResolvedSpringProject springProject) public static Version getLatestSupportedRelease(ResolvedSpringProject springProject)

View File

@@ -38,7 +38,9 @@ public class VersionValidators {
new UnsupportedCommercialValidator(diagnosticSeverityProvider), new UnsupportedCommercialValidator(diagnosticSeverityProvider),
new UnsupportedOssValidator(diagnosticSeverityProvider), new UnsupportedOssValidator(diagnosticSeverityProvider),
new SupportedCommercialValidator(diagnosticSeverityProvider), new SupportedCommercialValidator(diagnosticSeverityProvider),
new UpdateLatestMajorVersion(diagnosticSeverityProvider) }; new UpdateLatestMajorVersion(diagnosticSeverityProvider),
new UpdateLatestMinorVersion(diagnosticSeverityProvider),
new UpdateLatestPatchVersion(diagnosticSeverityProvider) };
} }
public List<VersionValidator> getValidators() { public List<VersionValidator> getValidators() {
@@ -138,16 +140,16 @@ public class VersionValidators {
} }
} }
private static class UpdateLatestMajorVersion extends AbstractDiagnosticValidator { private static class UpdateLatestMinorVersion extends AbstractDiagnosticValidator {
public UpdateLatestMajorVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) { public UpdateLatestMinorVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) {
super(diagnosticSeverityProvider); super(diagnosticSeverityProvider);
} }
@Override @Override
public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject,
Generation javaProjectGen, Version javaProjectVersion) throws Exception { Generation javaProjectGen, Version javaProjectVersion) throws Exception {
Version latest = VersionValidationUtils.getLatestSupportedInSameMajor(springProject, javaProjectVersion); Version latest = VersionValidationUtils.getNewerMinorVersion(springProject, javaProjectVersion);
if (latest != null) { if (latest != null) {
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MAJOR_VERSION; VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MAJOR_VERSION;
@@ -168,4 +170,69 @@ public class VersionValidators {
return null; return null;
} }
} }
private static class UpdateLatestPatchVersion extends AbstractDiagnosticValidator {
public UpdateLatestPatchVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) {
super(diagnosticSeverityProvider);
}
@Override
public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject,
Generation javaProjectGen, Version javaProjectVersion) throws Exception {
Version latest = VersionValidationUtils.getNewerPatchVersion(springProject, javaProjectVersion);
if (latest != null) {
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MAJOR_VERSION;
StringBuffer message = new StringBuffer();
message.append("Newer patch version of Spring Boot available: ");
message.append(latest.toString());
CodeAction ca = new CodeAction();
ca.setKind(CodeActionKind.QuickFix);
ca.setTitle("Upgrade to Version " + latest.toString());
String commandId = SpringBootUpgrade.CMD_UPGRADE_SPRING_BOOT;
ca.setCommand(new Command("Upgrade to Version " + latest.toString(), commandId,
ImmutableList.of(javaProject.getLocationUri().toString(), latest.toString())));
return createDiagnostic(ca, problemType, message.toString());
}
return null;
}
}
private static class UpdateLatestMajorVersion extends AbstractDiagnosticValidator {
public UpdateLatestMajorVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) {
super(diagnosticSeverityProvider);
}
@Override
public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject,
Generation javaProjectGen, Version javaProjectVersion) throws Exception {
Version latest = VersionValidationUtils.getNewerMajorVersion(springProject, javaProjectVersion);
if (latest != null) {
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MAJOR_VERSION;
StringBuffer message = new StringBuffer();
message.append("Newer major version of Spring Boot available: ");
message.append(latest.toString());
CodeAction ca = new CodeAction();
ca.setKind(CodeActionKind.QuickFix);
ca.setTitle("Upgrade to Version " + latest.toString());
String commandId = SpringBootUpgrade.CMD_UPGRADE_SPRING_BOOT;
ca.setCommand(new Command("Upgrade to Version " + latest.toString(), commandId,
ImmutableList.of(javaProject.getLocationUri().toString(), latest.toString())));
return createDiagnostic(ca, problemType, message.toString());
}
return null;
}
}
} }