diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java index fbd6065e7..507cb492b 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java @@ -46,10 +46,9 @@ public class BootVersionValidator { String url = getSpringProjectsUrl(preferences); SpringProjectsClient client = new SpringProjectsClient(url); SpringProjectsProvider provider = new SpringIoProjectsProvider(client); - VersionValidators validators = new VersionValidators(server.getDiagnosticSeverityProvider()); + VersionValidators validators = new VersionValidators(server.getDiagnosticSeverityProvider(), provider); - ProjectVersionDiagnosticProvider diagnosticProvider = new ProjectVersionDiagnosticProvider(provider, - validators); + ProjectVersionDiagnosticProvider diagnosticProvider = new ProjectVersionDiagnosticProvider(validators); try { DiagnosticResult result = diagnosticProvider.getDiagnostics(project); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java index 4d4a46f84..696ceb9e3 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java @@ -46,6 +46,7 @@ import org.springframework.ide.vscode.commons.protocol.java.ProjectBuild; import org.springframework.ide.vscode.commons.util.FileObserver; import org.springframework.ide.vscode.commons.util.UriUtil; +import com.google.common.collect.ImmutableList; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; @@ -291,7 +292,7 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService, Serv @Override public Collection all() { - return table.values(); + return ImmutableList.copyOf(table.values()); } @Override diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java index 07c664c8a..5e7027868 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java @@ -16,19 +16,20 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.lsp4j.Diagnostic; -import org.springframework.ide.vscode.boot.validation.generations.json.ResolvedSpringProject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.java.SpringProjectUtil; import org.springframework.ide.vscode.commons.java.Version; public class ProjectVersionDiagnosticProvider { + + private static final Logger log = LoggerFactory.getLogger(ProjectVersionDiagnosticProvider.class); - private final SpringProjectsProvider provider; private final VersionValidators validators; - public ProjectVersionDiagnosticProvider(SpringProjectsProvider provider, VersionValidators validators) { + public ProjectVersionDiagnosticProvider(VersionValidators validators) { this.validators = validators; - this.provider = provider; } @@ -39,7 +40,6 @@ public class ProjectVersionDiagnosticProvider { throw new Exception("Unable to find build file in project while computing version validation for: "); } - ResolvedSpringProject springProject = provider.getProject(SpringProjectUtil.SPRING_BOOT); Version javaProjectVersion = SpringProjectUtil.getSpringBootVersion(javaProject); if (javaProjectVersion == null) { @@ -49,9 +49,13 @@ public class ProjectVersionDiagnosticProvider { List diagnostics = new ArrayList(); for (VersionValidator validator : validators.getValidators()) { - Diagnostic diagnostic = validator.validate(springProject, javaProject, javaProjectVersion); - if (diagnostic != null) { - diagnostics.add(diagnostic); + try { + Diagnostic diagnostic = validator.validate(javaProject, javaProjectVersion); + if (diagnostic != null) { + diagnostics.add(diagnostic); + } + } catch (Exception e) { + log.error("", e); } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java index 125642277..ab45e9b4a 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java @@ -11,13 +11,11 @@ package org.springframework.ide.vscode.boot.validation.generations; import org.eclipse.lsp4j.Diagnostic; -import org.springframework.ide.vscode.boot.validation.generations.json.ResolvedSpringProject; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.java.Version; public interface VersionValidator { - Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, Version javaProjectVersion) - throws Exception; - + Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception; + } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java index 33b18f878..90e708845 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java @@ -35,12 +35,12 @@ public class VersionValidators { private final VersionValidator[] validators; - public VersionValidators(DiagnosticSeverityProvider diagnosticSeverityProvider) { + public VersionValidators(DiagnosticSeverityProvider diagnosticSeverityProvider, SpringProjectsProvider provider) { this.validators = new VersionValidator[] { -// new SupportedOssValidator(diagnosticSeverityProvider), -// new UnsupportedCommercialValidator(diagnosticSeverityProvider), -// new UnsupportedOssValidator(diagnosticSeverityProvider), -// new SupportedCommercialValidator(diagnosticSeverityProvider), +// new SupportedOssValidator(diagnosticSeverityProvider, provider), +// new UnsupportedCommercialValidator(diagnosticSeverityProvider, provider), +// new UnsupportedOssValidator(diagnosticSeverityProvider, provider), +// new SupportedCommercialValidator(diagnosticSeverityProvider, provider), new UpdateLatestMajorVersion(diagnosticSeverityProvider), new UpdateLatestMinorVersion(diagnosticSeverityProvider), new UpdateLatestPatchVersion(diagnosticSeverityProvider) }; @@ -68,14 +68,16 @@ public class VersionValidators { // // private static class SupportedOssValidator extends AbstractDiagnosticValidator { // -// public SupportedOssValidator(DiagnosticSeverityProvider diagnosticSeverityProvider) { +// private SpringProjectsProvider provider; +// +// public SupportedOssValidator(DiagnosticSeverityProvider diagnosticSeverityProvider, SpringProjectsProvider provider) { // super(diagnosticSeverityProvider); +// this.provider = provider; // } // // @Override -// public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, -// Version javaProjectVersion) throws Exception { -// +// public Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception { +// ResolvedSpringProject springProject = provider.getProject(SpringProjectUtil.SPRING_BOOT); // Generation javaProjectGen = getGenerationForJavaProject(javaProject, springProject); // Assert.isLegal(javaProjectGen != null, "Unable to find Spring Project Generation for project: " + javaProjectVersion.toString()); // if (VersionValidationUtils.isOssValid(javaProjectGen)) { @@ -93,14 +95,16 @@ public class VersionValidators { // // private static class SupportedCommercialValidator extends AbstractDiagnosticValidator { // -// public SupportedCommercialValidator(DiagnosticSeverityProvider diagnosticSeverityProvider) { +// private SpringProjectsProvider provider; +// +// public SupportedCommercialValidator(DiagnosticSeverityProvider diagnosticSeverityProvider, SpringProjectsProvider provider) { // super(diagnosticSeverityProvider); +// this.provider = provider; // } // // @Override -// public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, -// Version javaProjectVersion) throws Exception { -// +// public Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception { +// ResolvedSpringProject springProject = provider.getProject(SpringProjectUtil.SPRING_BOOT); // Generation javaProjectGen = getGenerationForJavaProject(javaProject, springProject); // Assert.isLegal(javaProjectGen != null, "Unable to find Spring Project Generation for project: " + javaProjectVersion.toString()); // @@ -120,13 +124,16 @@ public class VersionValidators { // // private static class UnsupportedOssValidator extends AbstractDiagnosticValidator { // -// public UnsupportedOssValidator(DiagnosticSeverityProvider diagnosticSeverityProvider) { +// private SpringProjectsProvider provider; +// +// public UnsupportedOssValidator(DiagnosticSeverityProvider diagnosticSeverityProvider, SpringProjectsProvider provider) { // super(diagnosticSeverityProvider); +// this.provider = provider; // } // // @Override -// public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, -// Version javaProjectVersion) throws Exception { +// public Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception { +// ResolvedSpringProject springProject = provider.getProject(SpringProjectUtil.SPRING_BOOT); // Generation javaProjectGen = getGenerationForJavaProject(javaProject, springProject); // Assert.isLegal(javaProjectGen != null, "Unable to find Spring Project Generation for project: " + javaProjectVersion.toString()); // @@ -146,13 +153,16 @@ public class VersionValidators { // // private static class UnsupportedCommercialValidator extends AbstractDiagnosticValidator { // -// public UnsupportedCommercialValidator(DiagnosticSeverityProvider diagnosticSeverityProvider) { +// private SpringProjectsProvider provider; +// +// public UnsupportedCommercialValidator(DiagnosticSeverityProvider diagnosticSeverityProvider, SpringProjectsProvider provider) { // super(diagnosticSeverityProvider); +// this.provider = provider; // } // // @Override -// public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, -// Version javaProjectVersion) throws Exception { +// public Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception { +// ResolvedSpringProject springProject = provider.getProject(SpringProjectUtil.SPRING_BOOT); // Generation javaProjectGen = getGenerationForJavaProject(javaProject, springProject); // Assert.isLegal(javaProjectGen != null, "Unable to find Spring Project Generation for project: " + javaProjectVersion.toString()); // @@ -177,9 +187,8 @@ public class VersionValidators { } @Override - public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, - Version javaProjectVersion) throws Exception { - Version latest = VersionValidationUtils.getNewerLatestPatchRelease(springProject.getReleases(), javaProjectVersion); + public Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception { + Version latest = VersionValidationUtils.getNewerLatestPatchRelease(CachedBootVersionsFromMavenCentral.getBootVersions(), javaProjectVersion); if (latest != null) { VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_PATCH_VERSION; @@ -209,9 +218,8 @@ public class VersionValidators { } @Override - public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, - Version javaProjectVersion) throws Exception { - Version latest = VersionValidationUtils.getNewerLatestMinorRelease(springProject.getReleases(), javaProjectVersion); + public Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception { + Version latest = VersionValidationUtils.getNewerLatestMinorRelease(CachedBootVersionsFromMavenCentral.getBootVersions(), javaProjectVersion); if (latest != null) { VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MINOR_VERSION; @@ -241,9 +249,8 @@ public class VersionValidators { } @Override - public Diagnostic validate(ResolvedSpringProject springProject, IJavaProject javaProject, - Version javaProjectVersion) throws Exception { - Version latest = VersionValidationUtils.getNewerLatestMajorRelease(springProject.getReleases(), javaProjectVersion); + public Diagnostic validate(IJavaProject javaProject, Version javaProjectVersion) throws Exception { + Version latest = VersionValidationUtils.getNewerLatestMajorRelease(CachedBootVersionsFromMavenCentral.getBootVersions(), javaProjectVersion); if (latest != null) { VersionValidationProblemType problemType = VersionValidationProblemType.UPDATE_LATEST_MAJOR_VERSION;