diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml
index 5600bce91..df6a906ba 100644
--- a/headless-services/commons/pom.xml
+++ b/headless-services/commons/pom.xml
@@ -117,7 +117,7 @@
3.1.5.RELEASE
0.7.5.RELEASE
2.4
- 1.11
+ 1.13
true
pivotal
diff --git a/headless-services/spring-boot-language-server/pom.xml b/headless-services/spring-boot-language-server/pom.xml
index 17f30ba3d..892761079 100644
--- a/headless-services/spring-boot-language-server/pom.xml
+++ b/headless-services/spring-boot-language-server/pom.xml
@@ -80,12 +80,7 @@
org.springframework.ide.vscode
- commons-maven
- ${dependencies.version}
-
-
- org.springframework.ide.vscode
- commons-gradle
+ commons-java
${dependencies.version}
@@ -103,6 +98,10 @@
commons-io
${commons-io-version}
+
+ commons-codec
+ commons-codec
+
org.json
json
@@ -149,6 +148,19 @@
${mockito-version}
test
+
+
+ org.springframework.ide.vscode
+ commons-maven
+ ${dependencies.version}
+ test
+
+
+ org.springframework.ide.vscode
+ commons-gradle
+ ${dependencies.version}
+ test
+
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java
index 1702e34d1..95eaa5ce6 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2018, 2019 Pivotal, Inc.
+ * Copyright (c) 2018, 2020 Pivotal, 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
@@ -36,6 +36,8 @@ import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache;
import org.springframework.ide.vscode.boot.java.utils.SymbolCache;
import org.springframework.ide.vscode.boot.java.utils.SymbolCacheOnDisc;
import org.springframework.ide.vscode.boot.java.utils.SymbolCacheVoid;
+import org.springframework.ide.vscode.boot.jdt.ls.JavaProjectsService;
+import org.springframework.ide.vscode.boot.jdt.ls.JdtLsProjectCache;
import org.springframework.ide.vscode.boot.metadata.AdHocSpringPropertyIndexProvider;
import org.springframework.ide.vscode.boot.metadata.ClassReferenceProvider;
import org.springframework.ide.vscode.boot.metadata.LoggerNameProvider;
@@ -116,10 +118,15 @@ public class BootLanguagServerBootApp {
r.def("class-reference", ClassReferenceProvider.factory(sourceLinks));
};
}
+
+ @ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness")
+ @Bean JavaProjectsService javaProjectsService(SimpleLanguageServer server, BootLsConfigProperties configProperties) {
+ return new JdtLsProjectCache(server, configProperties.isEnableJandexIndex());
+ }
@ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness")
- @Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, ValueProviderRegistry valueProviders, BootLsConfigProperties configProperties) {
- return BootLanguageServerParams.createDefault(server, valueProviders, configProperties.isEnableJandexIndex());
+ @Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, ValueProviderRegistry valueProviders, JavaProjectsService projectsService) {
+ return BootLanguageServerParams.createDefault(server, valueProviders, projectsService);
}
@ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness")
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java
index de4f3380f..851dd14bc 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2019 Pivotal, Inc.
+ * Copyright (c) 2017, 2020 Pivotal, 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
@@ -10,38 +10,18 @@
*******************************************************************************/
package org.springframework.ide.vscode.boot.app;
-import java.nio.file.Paths;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Optional;
-
import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
import org.springframework.ide.vscode.boot.jdt.ls.JavaProjectsService;
-import org.springframework.ide.vscode.boot.jdt.ls.JavaProjectsServiceWithFallback;
-import org.springframework.ide.vscode.boot.jdt.ls.JdtLsProjectCache;
import org.springframework.ide.vscode.boot.metadata.DefaultSpringPropertyIndexProvider;
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider;
import org.springframework.ide.vscode.boot.metadata.ValueProviderRegistry;
import org.springframework.ide.vscode.boot.metadata.types.TypeUtil;
import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider;
-import org.springframework.ide.vscode.commons.gradle.GradleCore;
-import org.springframework.ide.vscode.commons.gradle.GradleProjectCache;
-import org.springframework.ide.vscode.commons.gradle.GradleProjectFinder;
-import org.springframework.ide.vscode.commons.java.IJavaProject;
-import org.springframework.ide.vscode.commons.java.IJavadocProvider;
import org.springframework.ide.vscode.commons.java.SpringProjectUtil;
-import org.springframework.ide.vscode.commons.javadoc.JavaDocProviders;
-import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
-import org.springframework.ide.vscode.commons.languageserver.java.CompositeProjectOvserver;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
-import org.springframework.ide.vscode.commons.languageserver.java.JavadocService;
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
-import org.springframework.ide.vscode.commons.maven.MavenCore;
-import org.springframework.ide.vscode.commons.maven.java.MavenProjectCache;
-import org.springframework.ide.vscode.commons.maven.java.MavenProjectFinder;
-import org.springframework.ide.vscode.commons.protocol.java.Classpath.CPE;
import org.springframework.ide.vscode.commons.util.Assert;
import org.springframework.ide.vscode.commons.util.FileObserver;
import org.springframework.ide.vscode.commons.util.text.IDocument;
@@ -83,89 +63,18 @@ public class BootLanguageServerParams {
this.typeUtilProvider = typeUtilProvider;
}
- public static BootLanguageServerParams createDefault(SimpleLanguageServer server, ValueProviderRegistry valueProviders, boolean isJandexIndex) {
+ public static BootLanguageServerParams createDefault(SimpleLanguageServer server, ValueProviderRegistry valueProviders, JavaProjectsService javaProjectService) {
// Initialize project finders, project caches and project observers
- JavaProjectsService jdtProjectCache = new JavaProjectsServiceWithFallback(
- server,
- new JdtLsProjectCache(server, isJandexIndex),
- () -> createFallbackProjectCache(server)
- );
-
FileObserver fileObserver = server.getWorkspaceService().getFileObserver();
- DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(jdtProjectCache, jdtProjectCache, fileObserver, valueProviders);
+ DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(javaProjectService, javaProjectService, fileObserver, valueProviders);
indexProvider.setProgressService(server.getProgressService());
return new BootLanguageServerParams(
- jdtProjectCache.filter(project -> SpringProjectUtil.isBootProject(project) || SpringProjectUtil.isSpringProject(project)),
- jdtProjectCache,
+ javaProjectService.filter(project -> SpringProjectUtil.isBootProject(project) || SpringProjectUtil.isSpringProject(project)),
+ javaProjectService,
indexProvider,
- (SourceLinks sourceLinks, IDocument doc) -> new TypeUtil(sourceLinks, jdtProjectCache.find(new TextDocumentIdentifier(doc.getUri())))
+ (SourceLinks sourceLinks, IDocument doc) -> new TypeUtil(sourceLinks, javaProjectService.find(new TextDocumentIdentifier(doc.getUri())))
);
}
- private static JavaProjectsService createFallbackProjectCache(SimpleLanguageServer server) {
- CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder();
-
- JavadocService javadocService = (uri, cpe) -> JavaDocProviders.createFor(cpe);
-
- MavenProjectCache mavenProjectCache = new MavenProjectCache(server, MavenCore.getDefault(), true, Paths.get(IJavaProject.PROJECT_CACHE_FOLDER), javadocService);
- javaProjectFinder.addJavaProjectFinder(new MavenProjectFinder(mavenProjectCache));
-
- GradleProjectCache gradleProjectCache = new GradleProjectCache(server, GradleCore.getDefault(), true, Paths.get(IJavaProject.PROJECT_CACHE_FOLDER), javadocService);
- javaProjectFinder.addJavaProjectFinder(new GradleProjectFinder(gradleProjectCache));
-
- CompositeProjectOvserver projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache));
-
- return new JavaProjectsService() {
-
- @Override
- public void removeListener(Listener listener) {
- projectObserver.removeListener(listener);
- }
-
- @Override
- public void addListener(Listener listener) {
- projectObserver.addListener(listener);
- }
-
- @Override
- public Optional find(TextDocumentIdentifier doc) {
- return javaProjectFinder.find(doc);
- }
-
- @Override
- public IJavadocProvider javadocProvider(String projectUri, CPE cpe) {
- return javadocService.javadocProvider(projectUri, cpe);
- }
-
- @Override
- public Collection extends IJavaProject> all() {
- return javaProjectFinder.all();
- }
- };
- }
-
- public static BootLanguageServerParams createTestDefault(SimpleLanguageServer server, ValueProviderRegistry valueProviders) {
- // Initialize project finders, project caches and project observers
- CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder();
- MavenProjectCache mavenProjectCache = new MavenProjectCache(server, MavenCore.getDefault(), false, null, (uri, cpe) -> JavaDocProviders.createFor(cpe));
- mavenProjectCache.setAlwaysFireEventOnFileChanged(true);
- javaProjectFinder.addJavaProjectFinder(new MavenProjectFinder(mavenProjectCache));
-
- GradleProjectCache gradleProjectCache = new GradleProjectCache(server, GradleCore.getDefault(), false, null, (uri, cpe) -> JavaDocProviders.createFor(cpe));
- gradleProjectCache.setAlwaysFireEventOnFileChanged(true);
- javaProjectFinder.addJavaProjectFinder(new GradleProjectFinder(gradleProjectCache));
-
- CompositeProjectOvserver projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache));
-
- DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(javaProjectFinder, projectObserver, null, valueProviders);
- indexProvider.setProgressService(server.getProgressService());
-
- return new BootLanguageServerParams(
- javaProjectFinder.filter(project -> SpringProjectUtil.isBootProject(project) || SpringProjectUtil.isSpringProject(project)),
- projectObserver,
- indexProvider,
- (SourceLinks sourceLinks, IDocument doc) -> new TypeUtil(sourceLinks, javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())))
- );
- }
}
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/PropertiesJavaDefinitionHandler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/PropertiesJavaDefinitionHandler.java
index cc6db4212..b5491b6ec 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/PropertiesJavaDefinitionHandler.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/PropertiesJavaDefinitionHandler.java
@@ -17,7 +17,6 @@ import java.util.stream.Collectors;
import org.eclipse.lsp4j.LocationLink;
import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.TextDocumentPositionParams;
-import org.gradle.internal.impldep.com.google.common.collect.ImmutableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +41,8 @@ import org.springframework.ide.vscode.java.properties.parser.PropertiesAst.Node;
import org.springframework.ide.vscode.java.properties.parser.PropertiesAst.Value;
import org.springframework.stereotype.Component;
+import com.google.common.collect.ImmutableList;
+
@Component
public class PropertiesJavaDefinitionHandler implements DefinitionHandler, LanguageSpecific {
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java
index 09345a77a..c531304b2 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2019 Pivotal, Inc.
+ * Copyright (c) 2017, 2020 Pivotal, 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
@@ -21,7 +21,6 @@ import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.lsp4j.CodeLens;
import org.eclipse.lsp4j.Hover;
import org.eclipse.lsp4j.Range;
-import org.gradle.internal.impldep.com.google.common.collect.ImmutableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.boot.java.autowired.AutowiredHoverProvider;
@@ -33,6 +32,8 @@ import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.util.Optionals;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
+import com.google.common.collect.ImmutableList;
+
public class BeanInjectedIntoHoverProvider extends AbstractInjectedIntoHoverProvider {
private static final Logger log = LoggerFactory.getLogger(BeanInjectedIntoHoverProvider.class);
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JavaProjectsServiceWithFallback.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JavaProjectsServiceWithFallback.java
deleted file mode 100644
index 8ad76af2b..000000000
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JavaProjectsServiceWithFallback.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2018, 2019 Pivotal, 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:
- * Pivotal, Inc. - initial API and implementation
- *******************************************************************************/
-package org.springframework.ide.vscode.boot.jdt.ls;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-
-import org.eclipse.lsp4j.TextDocumentIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.ide.vscode.commons.java.IJavaProject;
-import org.springframework.ide.vscode.commons.java.IJavadocProvider;
-import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
-import org.springframework.ide.vscode.commons.protocol.java.Classpath.CPE;
-import org.springframework.ide.vscode.commons.util.Assert;
-
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.collect.ImmutableList;
-
-import reactor.core.Disposable;
-
-public class JavaProjectsServiceWithFallback implements JavaProjectsService {
-
- private Logger log = LoggerFactory.getLogger(JavaProjectsServiceWithFallback.class);
-
- private final CompletableFuture mainServiceInitialized;
-
- private final SimpleLanguageServer server;
- private final Supplier fallback;
- private final InitializableJavaProjectsService main;
-
- private final Listener listenerDelegate;
- private final List listeners;
-
- public JavaProjectsServiceWithFallback(SimpleLanguageServer server, InitializableJavaProjectsService main, Supplier fallback) {
- Assert.isNotNull(fallback);
- this.main = main;
- this.fallback = Suppliers.memoize(new Supplier() {
- @Override
- public JavaProjectsService get() {
- JavaProjectsService fallbackService = fallback.get();
- fallbackService.addListener(listenerDelegate);
- return fallbackService;
- }
- });
-
- this.server = server;
- this.listeners = new ArrayList<>();
-
- this.listenerDelegate = new Listener() {
- @Override
- public void deleted(IJavaProject project) {
- notifyDelete(project);
- }
-
- @Override
- public void created(IJavaProject project) {
- notifyCreated(project);
- }
-
- @Override
- public void changed(IJavaProject project) {
- notifyChanged(project);
- }
- };
- this.main.addListener(this.listenerDelegate);
-
- this.mainServiceInitialized = this.server
- .onInitialized(main.initialize())
- .doOnSuccess((disposable) -> {
- server.onShutdown(() -> {
- disposable.dispose();
- });
- })
- .doOnError(error -> {
- log.warn("JDT-based JavaProject service not available, will use fallback service", error);
- })
- .toFuture();
-
- log.info("set fallback shutdown handler");
- }
-
- @Override
- public void addListener(Listener listener) {
- synchronized (listeners) {
- listeners.add(listener);
- }
- }
-
- @Override
- public void removeListener(Listener listener) {
- synchronized (listeners) {
- listeners.remove(listener);
- }
- }
-
- private void notifyCreated(IJavaProject newProject) {
- log.info("Project created: " + newProject.getLocationUri());
-
- synchronized (listeners) {
- for (Listener listener : listeners) {
- listener.created(newProject);
- }
- }
- }
-
- private void notifyDelete(IJavaProject deleted) {
- log.info("Project deleted: " + deleted.getLocationUri());
-
- synchronized (listeners) {
- for (Listener listener : listeners) {
- listener.deleted(deleted);
- }
- }
- }
-
- private void notifyChanged(IJavaProject project) {
- log.info("Project changed: " + project.getLocationUri());
-
- synchronized (listeners) {
- for (Listener listener : listeners) {
- listener.changed(project);
- }
- }
- }
-
- @Override
- public Optional find(TextDocumentIdentifier doc) {
- if (mainServiceInitialized.isDone()) {
- if (mainServiceInitialized.isCompletedExceptionally()) {
- return fallback.get().find(doc);
- } else {
- return main.find(doc);
- }
- } else {
- log.debug("find => NOT INITIALIZED YET");
- }
- log.debug("NOT FOUND {} ", doc.getUri());
- return Optional.empty();
- }
-
- @Override
- public IJavadocProvider javadocProvider(String projectUri, CPE classpathEntry) {
- if (mainServiceInitialized.isDone()) {
- if (mainServiceInitialized.isCompletedExceptionally()) {
- return fallback.get().javadocProvider(projectUri, classpathEntry);
- } else {
- return main.javadocProvider(projectUri, classpathEntry);
- }
- } else {
- log.debug("javadoc => NOT INITIALIZED YET");
- }
- return IJavadocProvider.NULL;
- }
-
- @Override
- public Collection extends IJavaProject> all() {
- if (mainServiceInitialized.isDone()) {
- if (mainServiceInitialized.isCompletedExceptionally()) {
- return fallback.get().all();
- } else {
- return main.all();
- }
- } else {
- log.debug("find => NOT INITIALIZED YET");
- }
- return ImmutableList.of();
- }
-
-}
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 f0ab7efc4..758ce9f2a 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2018, 2019 Pivotal, Inc.
+ * Copyright (c) 2018, 2020 Pivotal, 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
@@ -59,6 +59,17 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService {
public JdtLsProjectCache(SimpleLanguageServer server, boolean isJandexIndex) {
this.server = server;
this.IS_JANDEX_INDEX = isJandexIndex;
+ this.server
+ .onInitialized(initialize())
+ .doOnSuccess((disposable) -> {
+ server.onShutdown(() -> {
+ disposable.dispose();
+ });
+ })
+ .doOnError(error -> {
+ log.error("JDT-based JavaProject service not available!", error);
+ })
+ .toFuture();
}
private FileObserver getFileObserver() {
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/BootLanguageServerTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/BootLanguageServerTest.java
index b7bc9c24f..305344e40 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/BootLanguageServerTest.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/BootLanguageServerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2018 Pivotal, Inc.
+ * Copyright (c) 2018-2020 Pivotal, 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
@@ -27,7 +27,7 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode;
@Retention(RUNTIME)
@Target(TYPE)
@OverrideAutoConfiguration(enabled=false)
-@ImportAutoConfiguration(classes=LanguageServerAutoConf.class)
+@ImportAutoConfiguration(classes= {LanguageServerAutoConf.class, JavaTestConf.class})
@SpringBootTest(classes={
BootLanguagServerBootApp.class
})
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/HoverTestConf.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/HoverTestConf.java
index 74fc5d9ee..b5ca29598 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/HoverTestConf.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/HoverTestConf.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2018, 2019 Pivotal, Inc.
+ * Copyright (c) 2018, 2020 Pivotal, 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
@@ -42,7 +42,7 @@ public class HoverTestConf {
}
@Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, ValueProviderRegistry valueProviders, PropertyIndexHarness indexHarness) {
- BootLanguageServerParams testDefaults = BootLanguageServerParams.createTestDefault(server, valueProviders);
+ BootLanguageServerParams testDefaults = BootLanguageServerHarness.createTestDefault(server, valueProviders);
return new BootLanguageServerParams(
indexHarness.getProjectFinder(),
testDefaults.projectObserver,
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/JavaTestConf.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/JavaTestConf.java
new file mode 100644
index 000000000..f35c3c95c
--- /dev/null
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/JavaTestConf.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Pivotal, 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:
+ * Pivotal, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.springframework.ide.vscode.boot.bootiful;
+
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Optional;
+
+import org.eclipse.lsp4j.TextDocumentIdentifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.ide.vscode.boot.jdt.ls.JavaProjectsService;
+import org.springframework.ide.vscode.commons.gradle.GradleCore;
+import org.springframework.ide.vscode.commons.gradle.GradleProjectCache;
+import org.springframework.ide.vscode.commons.gradle.GradleProjectFinder;
+import org.springframework.ide.vscode.commons.java.IJavaProject;
+import org.springframework.ide.vscode.commons.java.IJavadocProvider;
+import org.springframework.ide.vscode.commons.javadoc.JavaDocProviders;
+import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
+import org.springframework.ide.vscode.commons.languageserver.java.CompositeProjectOvserver;
+import org.springframework.ide.vscode.commons.languageserver.java.JavadocService;
+import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
+import org.springframework.ide.vscode.commons.maven.MavenCore;
+import org.springframework.ide.vscode.commons.maven.java.MavenProjectCache;
+import org.springframework.ide.vscode.commons.maven.java.MavenProjectFinder;
+import org.springframework.ide.vscode.commons.protocol.java.Classpath.CPE;
+
+@Configuration
+public class JavaTestConf {
+
+ @Bean JavaProjectsService javaProjectsService(SimpleLanguageServer server) {
+ CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder();
+
+ JavadocService javadocService = (uri, cpe) -> JavaDocProviders.createFor(cpe);
+
+ MavenProjectCache mavenProjectCache = new MavenProjectCache(server, MavenCore.getDefault(), true, Paths.get(IJavaProject.PROJECT_CACHE_FOLDER), javadocService);
+ javaProjectFinder.addJavaProjectFinder(new MavenProjectFinder(mavenProjectCache));
+
+ GradleProjectCache gradleProjectCache = new GradleProjectCache(server, GradleCore.getDefault(), true, Paths.get(IJavaProject.PROJECT_CACHE_FOLDER), javadocService);
+ javaProjectFinder.addJavaProjectFinder(new GradleProjectFinder(gradleProjectCache));
+
+ CompositeProjectOvserver projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache));
+
+ return new JavaProjectsService() {
+
+ @Override
+ public void removeListener(Listener listener) {
+ projectObserver.removeListener(listener);
+ }
+
+ @Override
+ public void addListener(Listener listener) {
+ projectObserver.addListener(listener);
+ }
+
+ @Override
+ public Optional find(TextDocumentIdentifier doc) {
+ return javaProjectFinder.find(doc);
+ }
+
+ @Override
+ public IJavadocProvider javadocProvider(String projectUri, CPE cpe) {
+ return javadocService.javadocProvider(projectUri, cpe);
+ }
+
+ @Override
+ public Collection extends IJavaProject> all() {
+ return javaProjectFinder.all();
+ }
+ };
+ }
+
+}
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SourceLinksTestConf.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SourceLinksTestConf.java
index 18a202268..2ce2ec818 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SourceLinksTestConf.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SourceLinksTestConf.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019 Pivotal, Inc.
+ * Copyright (c) 2019-2020 Pivotal, 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
@@ -52,7 +52,7 @@ public class SourceLinksTestConf {
}
@Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, ValueProviderRegistry valueProviders) {
- BootLanguageServerParams testDefaults = BootLanguageServerParams.createTestDefault(server, valueProviders);
+ BootLanguageServerParams testDefaults = BootLanguageServerHarness.createTestDefault(server, valueProviders);
return new BootLanguageServerParams(
testDefaults.projectFinder,
new MockProjectObserver(),
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SymbolProviderTestConf.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SymbolProviderTestConf.java
index 201fe3b28..486eae3c9 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SymbolProviderTestConf.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/SymbolProviderTestConf.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2018, 2019 Pivotal, Inc.
+ * Copyright (c) 2018, 2020 Pivotal, 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
@@ -47,7 +47,7 @@ public class SymbolProviderTestConf {
}
@Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, ValueProviderRegistry valueProviders) {
- return BootLanguageServerParams.createTestDefault(server, valueProviders);
+ return BootLanguageServerHarness.createTestDefault(server, valueProviders);
}
@Bean DefaultSpringPropertyIndexProvider indexProvider(BootLanguageServerParams serverParams) {
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/XmlBeansTestConf.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/XmlBeansTestConf.java
index 065f594df..f603b792b 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/XmlBeansTestConf.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/bootiful/XmlBeansTestConf.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019 Pivotal, Inc.
+ * Copyright (c) 2019, 2020 Pivotal, 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
@@ -51,7 +51,7 @@ public class XmlBeansTestConf {
}
@Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, ValueProviderRegistry valueProviders, PropertyIndexHarness indexHarness) {
- BootLanguageServerParams testDefaults = BootLanguageServerParams.createTestDefault(server, valueProviders);
+ BootLanguageServerParams testDefaults = BootLanguageServerHarness.createTestDefault(server, valueProviders);
return new BootLanguageServerParams(
indexHarness.getProjectFinder(),
new MockProjectObserver(),
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/CompilationUnitCacheTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/CompilationUnitCacheTest.java
index 570f8f03b..9a0b37c18 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/CompilationUnitCacheTest.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/CompilationUnitCacheTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2019 Pivotal, Inc.
+ * Copyright (c) 2017, 2020 Pivotal, 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
@@ -95,7 +95,7 @@ public class CompilationUnitCacheTest {
}
@Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, MockProjectObserver projectObserver, ValueProviderRegistry valueProviders, PropertyIndexHarness indexHarness) {
- BootLanguageServerParams testDefaults = BootLanguageServerParams.createTestDefault(server, valueProviders);
+ BootLanguageServerParams testDefaults = BootLanguageServerHarness.createTestDefault(server, valueProviders);
return new BootLanguageServerParams(
indexHarness.getProjectFinder(),
projectObserver,
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java
index c1fb6a8e6..30dda51f3 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2019 Pivotal, Inc.
+ * Copyright (c) 2017, 2020 Pivotal, 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
@@ -108,7 +108,7 @@ public class ValueCompletionTest {
}
@Bean BootLanguageServerParams serverParams(SimpleLanguageServer server, JavaProjectFinder projectFinder, ValueProviderRegistry valueProviders, PropertyIndexHarness indexHarness) {
- BootLanguageServerParams testDefaults = BootLanguageServerParams.createTestDefault(server, valueProviders);
+ BootLanguageServerParams testDefaults = BootLanguageServerHarness.createTestDefault(server, valueProviders);
return new BootLanguageServerParams(
projectFinder,
ProjectObserver.NULL,
diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/project/harness/BootLanguageServerHarness.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/project/harness/BootLanguageServerHarness.java
index 477fa1ac9..40e5488fe 100644
--- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/project/harness/BootLanguageServerHarness.java
+++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/project/harness/BootLanguageServerHarness.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2019 Pivotal, Inc.
+ * Copyright (c) 2017, 2020 Pivotal, 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
@@ -12,16 +12,33 @@ package org.springframework.ide.vscode.project.harness;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Arrays;
+import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.junit.Assert;
import org.springframework.ide.vscode.boot.app.BootLanguageServerParams;
import org.springframework.ide.vscode.boot.editor.harness.PropertyIndexHarness;
+import org.springframework.ide.vscode.boot.java.links.SourceLinks;
+import org.springframework.ide.vscode.boot.metadata.DefaultSpringPropertyIndexProvider;
+import org.springframework.ide.vscode.boot.metadata.ValueProviderRegistry;
+import org.springframework.ide.vscode.boot.metadata.types.TypeUtil;
+import org.springframework.ide.vscode.commons.gradle.GradleCore;
+import org.springframework.ide.vscode.commons.gradle.GradleProjectCache;
+import org.springframework.ide.vscode.commons.gradle.GradleProjectFinder;
import org.springframework.ide.vscode.commons.java.IClasspath;
import org.springframework.ide.vscode.commons.java.IJavaProject;
+import org.springframework.ide.vscode.commons.java.SpringProjectUtil;
+import org.springframework.ide.vscode.commons.javadoc.JavaDocProviders;
+import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
+import org.springframework.ide.vscode.commons.languageserver.java.CompositeProjectOvserver;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
+import org.springframework.ide.vscode.commons.maven.MavenCore;
+import org.springframework.ide.vscode.commons.maven.java.MavenProjectCache;
+import org.springframework.ide.vscode.commons.maven.java.MavenProjectFinder;
import org.springframework.ide.vscode.commons.protocol.java.Classpath;
import org.springframework.ide.vscode.commons.protocol.java.Classpath.CPE;
+import org.springframework.ide.vscode.commons.util.text.IDocument;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
@@ -144,5 +161,30 @@ public class BootLanguageServerHarness extends LanguageServerHarness {
}
return null;
}
+
+ public static BootLanguageServerParams createTestDefault(SimpleLanguageServer server, ValueProviderRegistry valueProviders) {
+ // Initialize project finders, project caches and project observers
+ CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder();
+ MavenProjectCache mavenProjectCache = new MavenProjectCache(server, MavenCore.getDefault(), false, null, (uri, cpe) -> JavaDocProviders.createFor(cpe));
+ mavenProjectCache.setAlwaysFireEventOnFileChanged(true);
+ javaProjectFinder.addJavaProjectFinder(new MavenProjectFinder(mavenProjectCache));
+
+ GradleProjectCache gradleProjectCache = new GradleProjectCache(server, GradleCore.getDefault(), false, null, (uri, cpe) -> JavaDocProviders.createFor(cpe));
+ gradleProjectCache.setAlwaysFireEventOnFileChanged(true);
+ javaProjectFinder.addJavaProjectFinder(new GradleProjectFinder(gradleProjectCache));
+
+ CompositeProjectOvserver projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache));
+
+ DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(javaProjectFinder, projectObserver, null, valueProviders);
+ indexProvider.setProgressService(server.getProgressService());
+
+ return new BootLanguageServerParams(
+ javaProjectFinder.filter(project -> SpringProjectUtil.isBootProject(project) || SpringProjectUtil.isSpringProject(project)),
+ projectObserver,
+ indexProvider,
+ (SourceLinks sourceLinks, IDocument doc) -> new TypeUtil(sourceLinks, javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())))
+ );
+ }
+
}