boot version validation logic now works with a list of releases that contain all releases instead of the latest one only
This commit is contained in:
@@ -10,6 +10,8 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.commons.java;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public final class Version implements Comparable<Version> {
|
||||
|
||||
private int major;
|
||||
@@ -74,6 +76,24 @@ public final class Version implements Comparable<Version> {
|
||||
} else {
|
||||
return major - o.major;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(major, minor, patch, qualifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
Version other = (Version) obj;
|
||||
return major == other.major && minor == other.minor && patch == other.patch
|
||||
&& Objects.equals(qualifier, other.qualifier);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
package org.springframework.ide.vscode.boot.validation.generations;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.ide.vscode.boot.validation.generations.json.Generation;
|
||||
@@ -32,29 +31,67 @@ public class VersionValidationUtils {
|
||||
return currentDate.before(commercialEndDate);
|
||||
}
|
||||
|
||||
public static Version getNewerPatchVersion(ResolvedSpringProject springProject, Version version) throws Exception {
|
||||
Version result = null;
|
||||
List<Version> releases = springProject.getReleases();
|
||||
int found = Collections.binarySearch(releases, version);
|
||||
int index = found < 0 ? -found - 1 : found + 1;
|
||||
for (int i = index; i < releases.size() && releases.get(i).getMajor() == version.getMajor() && releases.get(i).getMinor() == version.getMinor(); i++) {
|
||||
result = releases.get(i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Version getNewerMinorVersion(ResolvedSpringProject springProject, Version version) throws Exception {
|
||||
return getNewerPatchVersion(springProject, new Version(version.getMajor(), version.getMinor() + 1, 0, null));
|
||||
}
|
||||
|
||||
public static Version getNewerMajorVersion(ResolvedSpringProject springProject, Version version) throws Exception {
|
||||
return getNewerPatchVersion(springProject, new Version(version.getMajor() + 1, 0, 0, null));
|
||||
}
|
||||
|
||||
public static Version getLatestSupportedRelease(ResolvedSpringProject springProject)
|
||||
throws Exception {
|
||||
List<Version> rls = springProject.getReleases();
|
||||
return rls.isEmpty() ? null : rls.get(rls.size() - 1);
|
||||
}
|
||||
|
||||
public static Version getNewestPatchRelease(List<Version> releases, Version version) {
|
||||
Version result = version;
|
||||
|
||||
for (Version release : releases) {
|
||||
if (release.getMajor() == result.getMajor()
|
||||
&& release.getMinor() == result.getMinor()
|
||||
&& release.getPatch() > result.getPatch()) {
|
||||
result = release;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Version getNewestMinorRelease(List<Version> releases, Version version) {
|
||||
Version result = version;
|
||||
|
||||
for (Version release : releases) {
|
||||
if (release.getMajor() == result.getMajor()
|
||||
&& (release.getMinor() > result.getMinor()
|
||||
|| (release.getMinor() == result.getMinor() && release.getPatch() > result.getPatch()))) {
|
||||
result = release;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Version getNewestMajorRelease(List<Version> releases, Version version) {
|
||||
Version result = version;
|
||||
|
||||
for (Version release : releases) {
|
||||
if (release.getMajor() > result.getMajor()
|
||||
|| (release.getMajor() == result.getMajor() && release.getMinor() > result.getMinor())
|
||||
|| (release.getMajor() == result.getMajor() && release.getMinor() == result.getMinor() && release.getPatch() > result.getPatch())) {
|
||||
result = release;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Version getNewerLatestPatchRelease(List<Version> releases, Version version) {
|
||||
Version newestPatch = getNewestPatchRelease(releases, version);
|
||||
return newestPatch.equals(version) ? null : newestPatch;
|
||||
}
|
||||
|
||||
public static Version getNewerLatestMinorRelease(List<Version> releases, Version version) {
|
||||
Version newestMinor = getNewestMinorRelease(releases, version);
|
||||
return newestMinor.getMinor() == version.getMinor() ? null : newestMinor;
|
||||
}
|
||||
|
||||
public static Version getNewerLatestMajorRelease(List<Version> releases, Version version) {
|
||||
Version newestMajor = getNewestMajorRelease(releases, version);
|
||||
return newestMajor.getMajor() == version.getMajor() ? null : newestMajor;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -141,21 +141,22 @@ public class VersionValidators {
|
||||
}
|
||||
}
|
||||
|
||||
private static class UpdateLatestMinorVersion extends AbstractDiagnosticValidator {
|
||||
private static class UpdateLatestPatchVersion extends AbstractDiagnosticValidator {
|
||||
|
||||
public UpdateLatestMinorVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) {
|
||||
public UpdateLatestPatchVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) {
|
||||
super(diagnosticSeverityProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject,
|
||||
Generation javaProjectGen, Version javaProjectVersion) throws Exception {
|
||||
Version latest = VersionValidationUtils.getNewerMinorVersion(springProject, javaProjectVersion);
|
||||
Version latest = VersionValidationUtils.getNewerLatestPatchRelease(springProject.getReleases(), javaProjectVersion);
|
||||
|
||||
if (latest != null) {
|
||||
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MINOR_VERSION;
|
||||
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_PATCH_VERSION;
|
||||
|
||||
StringBuffer message = new StringBuffer();
|
||||
message.append("Newer minor version of Spring Boot available: ");
|
||||
message.append("Newer patch version of Spring Boot available: ");
|
||||
message.append(latest.toString());
|
||||
|
||||
CodeAction ca = new CodeAction();
|
||||
@@ -172,21 +173,22 @@ public class VersionValidators {
|
||||
}
|
||||
}
|
||||
|
||||
private static class UpdateLatestPatchVersion extends AbstractDiagnosticValidator {
|
||||
private static class UpdateLatestMinorVersion extends AbstractDiagnosticValidator {
|
||||
|
||||
public UpdateLatestPatchVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) {
|
||||
public UpdateLatestMinorVersion(DiagnosticSeverityProvider diagnosticSeverityProvider) {
|
||||
super(diagnosticSeverityProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject,
|
||||
Generation javaProjectGen, Version javaProjectVersion) throws Exception {
|
||||
Version latest = VersionValidationUtils.getNewerPatchVersion(springProject, javaProjectVersion);
|
||||
Version latest = VersionValidationUtils.getNewerLatestMinorRelease(springProject.getReleases(), javaProjectVersion);
|
||||
|
||||
if (latest != null) {
|
||||
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_PATCH_VERSION;
|
||||
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MINOR_VERSION;
|
||||
|
||||
StringBuffer message = new StringBuffer();
|
||||
message.append("Newer patch version of Spring Boot available: ");
|
||||
message.append("Newer minor version of Spring Boot available: ");
|
||||
message.append(latest.toString());
|
||||
|
||||
CodeAction ca = new CodeAction();
|
||||
@@ -212,7 +214,8 @@ public class VersionValidators {
|
||||
@Override
|
||||
public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject,
|
||||
Generation javaProjectGen, Version javaProjectVersion) throws Exception {
|
||||
Version latest = VersionValidationUtils.getNewerMajorVersion(springProject, javaProjectVersion);
|
||||
Version latest = VersionValidationUtils.getNewerLatestMajorRelease(springProject.getReleases(), javaProjectVersion);
|
||||
|
||||
if (latest != null) {
|
||||
VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MAJOR_VERSION;
|
||||
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2022 VMware, Inc.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* VMware, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.validation.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.ide.vscode.boot.validation.generations.VersionValidationUtils;
|
||||
import org.springframework.ide.vscode.commons.java.Version;
|
||||
|
||||
public class VersionValidationUtilsTest {
|
||||
|
||||
final List<Version> releases = Arrays.asList(
|
||||
new Version(1,5,3,"RELEASE"),
|
||||
new Version(1,5,10,"RELEASE"),
|
||||
new Version(1,5,12,"RELEASE"),
|
||||
new Version(2,0,0,null),
|
||||
new Version(2,0,3,null),
|
||||
new Version(2,1,6,null),
|
||||
new Version(2,4,15,null),
|
||||
new Version(2,5,21,null),
|
||||
new Version(2,6,10,null),
|
||||
new Version(2,6,18,null),
|
||||
new Version(2,7,3,null),
|
||||
new Version(2,7,6,null),
|
||||
new Version(3,0,0,null)
|
||||
);
|
||||
|
||||
@Test
|
||||
void testFindNewestPatchRelease() {
|
||||
assertEquals(new Version(1,5,12,"RELEASE"), VersionValidationUtils.getNewestPatchRelease(releases, new Version(1,5,3, "RELEASE")));
|
||||
assertEquals(new Version(1,4,3, null), VersionValidationUtils.getNewestPatchRelease(releases, new Version(1,4,3, null)));
|
||||
assertEquals(new Version(2,1,6,null), VersionValidationUtils.getNewestPatchRelease(releases, new Version(2,1,3, null)));
|
||||
assertEquals(new Version(2,6,18,null), VersionValidationUtils.getNewestPatchRelease(releases, new Version(2,6,5, null)));
|
||||
assertEquals(new Version(3,0,0, null), VersionValidationUtils.getNewestPatchRelease(releases, new Version(3,0,0, null)));
|
||||
assertEquals(new Version(3,0,1, null), VersionValidationUtils.getNewestPatchRelease(releases, new Version(3,0,1, null)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetNewerLatestPatchRelease() {
|
||||
assertEquals(new Version(1,5,12,"RELEASE"), VersionValidationUtils.getNewerLatestPatchRelease(releases, new Version(1,5,3, "RELEASE")));
|
||||
assertNull(VersionValidationUtils.getNewerLatestPatchRelease(releases, new Version(1,4,3, null)));
|
||||
assertEquals(new Version(2,1,6,null), VersionValidationUtils.getNewerLatestPatchRelease(releases, new Version(2,1,3, null)));
|
||||
assertEquals(new Version(2,6,18,null), VersionValidationUtils.getNewerLatestPatchRelease(releases, new Version(2,6,5, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestPatchRelease(releases, new Version(2,6,18, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestPatchRelease(releases, new Version(3,0,0, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestPatchRelease(releases, new Version(3,0,1, null)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindNewestMinorRelease() {
|
||||
assertEquals(new Version(1,5,12,"RELEASE"), VersionValidationUtils.getNewestMinorRelease(releases, new Version(1,5,3, "RELEASE")));
|
||||
assertEquals(new Version(1,5,12,"RELEASE"), VersionValidationUtils.getNewestMinorRelease(releases, new Version(1,4,3, "RELEASE")));
|
||||
assertEquals(new Version(2,7,6,null), VersionValidationUtils.getNewestMinorRelease(releases, new Version(2,1,3, null)));
|
||||
assertEquals(new Version(2,7,6,null), VersionValidationUtils.getNewestMinorRelease(releases, new Version(2,6,5, null)));
|
||||
assertEquals(new Version(2,7,6, null), VersionValidationUtils.getNewestMinorRelease(releases, new Version(2,7,3, null)));
|
||||
assertEquals(new Version(2,7,6, null), VersionValidationUtils.getNewestMinorRelease(releases, new Version(2,7,6, null)));
|
||||
assertEquals(new Version(3,0,0, null), VersionValidationUtils.getNewestMinorRelease(releases, new Version(3,0,0, null)));
|
||||
assertEquals(new Version(3,0,1, null), VersionValidationUtils.getNewestMinorRelease(releases, new Version(3,0,1, null)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetNewerLatestMinorRelease() {
|
||||
assertNull(VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(1,5,3, "RELEASE")));
|
||||
assertEquals(new Version(1,5,12,"RELEASE"), VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(1,4,3, "RELEASE")));
|
||||
assertEquals(new Version(2,7,6,null), VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(2,1,3, null)));
|
||||
assertEquals(new Version(2,7,6,null), VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(2,6,5, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(2,7,3, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(2,7,6, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(3,0,0, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestMinorRelease(releases, new Version(3,0,1, null)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindNewestMajorRelease() {
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewestMajorRelease(releases, new Version(1,5,3, "RELEASE")));
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewestMajorRelease(releases, new Version(1,4,3, null)));
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewestMajorRelease(releases, new Version(2,1,3, null)));
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewestMajorRelease(releases, new Version(2,6,5, null)));
|
||||
assertEquals(new Version(3,0,0, null), VersionValidationUtils.getNewestMajorRelease(releases, new Version(3,0,0, null)));
|
||||
assertEquals(new Version(3,0,1, null), VersionValidationUtils.getNewestMajorRelease(releases, new Version(3,0,1, null)));
|
||||
assertEquals(new Version(4,1,3, null), VersionValidationUtils.getNewestMajorRelease(releases, new Version(4,1,3, null)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetNewerLatestMajorRelease() {
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewerLatestMajorRelease(releases, new Version(1,5,3, "RELEASE")));
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewerLatestMajorRelease(releases, new Version(1,4,3, null)));
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewerLatestMajorRelease(releases, new Version(2,1,3, null)));
|
||||
assertEquals(new Version(3,0,0,null), VersionValidationUtils.getNewerLatestMajorRelease(releases, new Version(2,6,5, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestMajorRelease(releases, new Version(3,0,0, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestMajorRelease(releases, new Version(3,0,1, null)));
|
||||
assertNull(VersionValidationUtils.getNewerLatestMajorRelease(releases, new Version(4,1,3, null)));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user