Cleaner dependency injection for BootJavaLanguageServer
This commit is contained in:
@@ -10,7 +10,6 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -46,24 +45,18 @@ import org.springframework.ide.vscode.boot.java.value.ValueCompletionProcessor;
|
||||
import org.springframework.ide.vscode.boot.java.value.ValueHoverProvider;
|
||||
import org.springframework.ide.vscode.boot.java.value.ValuePropertyReferencesProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider;
|
||||
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.languageserver.HighlightParams;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter;
|
||||
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.ProjectObserver;
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.LSFactory;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.ReferencesHandler;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspaceService;
|
||||
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.util.text.TextDocument;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
@@ -80,19 +73,19 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
private final VscodeCompletionEngineAdapter completionEngine;
|
||||
private final SpringIndexer indexer;
|
||||
private final SpringLiveHoverWatchdog liveHoverWatchdog;
|
||||
private final CompositeProjectOvserver projectObserver;
|
||||
private final ProjectObserver projectObserver;
|
||||
|
||||
private final WordHighlighter testHightlighter = null; //new WordHighlighter("foo");
|
||||
|
||||
public BootJavaLanguageServer(CompositeJavaProjectFinder javaProjectFinder, SpringPropertyIndexProvider indexProvider) {
|
||||
this(javaProjectFinder, indexProvider, RunningAppProvider.DEFAULT);
|
||||
}
|
||||
private JavaProjectFinder projectFinder;
|
||||
|
||||
public BootJavaLanguageServer(CompositeJavaProjectFinder javaProjectFinder, SpringPropertyIndexProvider indexProvider, RunningAppProvider runningAppProvider) {
|
||||
public BootJavaLanguageServer(LSFactory<BootJavaLanguageServerParams> _params) {
|
||||
super("vscode-boot-java");
|
||||
BootJavaLanguageServerParams serverParams = _params.create(this);
|
||||
|
||||
System.setProperty(LANGUAGE_SERVER_PROCESS_PROPERTY, LANGUAGE_SERVER_PROCESS_PROPERTY);
|
||||
|
||||
JavaProjectFinder javaProjectFinder = serverParams.projectFinder;
|
||||
SimpleWorkspaceService workspaceService = getWorkspaceService();
|
||||
SimpleTextDocumentService documents = getTextDocumentService();
|
||||
|
||||
@@ -102,16 +95,16 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
validateWith(doc.getId(), reconcileEngine);
|
||||
});
|
||||
|
||||
ICompletionEngine bootCompletionEngine = createCompletionEngine(javaProjectFinder, indexProvider);
|
||||
ICompletionEngine bootCompletionEngine = createCompletionEngine(javaProjectFinder, serverParams.indexProvider);
|
||||
completionEngine = createCompletionEngineAdapter(this, bootCompletionEngine);
|
||||
completionEngine.setMaxCompletions(100);
|
||||
documents.onCompletion(completionEngine::getCompletions);
|
||||
documents.onCompletionResolve(completionEngine::resolveCompletion);
|
||||
|
||||
BootJavaHoverProvider hoverInfoProvider = createHoverHandler(javaProjectFinder, runningAppProvider);
|
||||
BootJavaHoverProvider hoverInfoProvider = createHoverHandler(javaProjectFinder, serverParams.runningAppProvider);
|
||||
documents.onHover(hoverInfoProvider);
|
||||
|
||||
liveHoverWatchdog = new SpringLiveHoverWatchdog(this, hoverInfoProvider, runningAppProvider);
|
||||
liveHoverWatchdog = new SpringLiveHoverWatchdog(this, hoverInfoProvider, serverParams.runningAppProvider);
|
||||
documents.onDidChangeContent(params -> {
|
||||
TextDocument doc = params.getDocument();
|
||||
if (testHightlighter != null) {
|
||||
@@ -139,14 +132,8 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
documents.onCodeLens(codeLensHandler::createCodeLenses);
|
||||
documents.onCodeLensResolve(codeLensHandler::resolveCodeLens);
|
||||
|
||||
// Initialize project finders, project caches and project observers
|
||||
MavenProjectCache mavenProjectCache = new MavenProjectCache(getWorkspaceService().getFileObserver(), MavenCore.getDefault());
|
||||
javaProjectFinder.addJavaProjectFinder(new MavenProjectFinder(mavenProjectCache));
|
||||
|
||||
GradleProjectCache gradleProjectCache = new GradleProjectCache(getWorkspaceService().getFileObserver(), GradleCore.getDefault());
|
||||
javaProjectFinder.addJavaProjectFinder(new GradleProjectFinder(gradleProjectCache));
|
||||
|
||||
projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache));
|
||||
projectFinder = serverParams.projectFinder;
|
||||
projectObserver = serverParams.projectObserver;
|
||||
}
|
||||
|
||||
public void setMaxCompletionsNumber(int number) {
|
||||
@@ -295,4 +282,13 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
return projectObserver;
|
||||
}
|
||||
|
||||
public JavaProjectFinder getProjectFinder() {
|
||||
return projectFinder;
|
||||
}
|
||||
|
||||
|
||||
public SpringIndexer getSpringIndexer() {
|
||||
return indexer;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package org.springframework.ide.vscode.boot.java;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.DefaultSpringPropertyIndexProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider;
|
||||
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.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.ProjectObserver;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.LSFactory;
|
||||
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.util.FileObserver;
|
||||
|
||||
public class BootJavaLanguageServerParams {
|
||||
|
||||
public final JavaProjectFinder projectFinder;
|
||||
public final ProjectObserver projectObserver;
|
||||
public final SpringPropertyIndexProvider indexProvider;
|
||||
public final RunningAppProvider runningAppProvider;
|
||||
|
||||
public BootJavaLanguageServerParams(
|
||||
JavaProjectFinder projectFinder,
|
||||
ProjectObserver projectObserver,
|
||||
SpringPropertyIndexProvider indexProvider,
|
||||
RunningAppProvider runningAppProvider) {
|
||||
super();
|
||||
this.projectFinder = projectFinder;
|
||||
this.projectObserver = projectObserver;
|
||||
this.indexProvider = indexProvider;
|
||||
this.runningAppProvider = runningAppProvider;
|
||||
}
|
||||
|
||||
public static LSFactory<BootJavaLanguageServerParams> createDefault() {
|
||||
return (SimpleLanguageServer server) -> {
|
||||
// Initialize project finders, project caches and project observers
|
||||
FileObserver fileObserver = server.getWorkspaceService().getFileObserver();
|
||||
CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder();
|
||||
MavenProjectCache mavenProjectCache = new MavenProjectCache(fileObserver, MavenCore.getDefault());
|
||||
javaProjectFinder.addJavaProjectFinder(new MavenProjectFinder(mavenProjectCache));
|
||||
|
||||
GradleProjectCache gradleProjectCache = new GradleProjectCache(fileObserver, GradleCore.getDefault());
|
||||
javaProjectFinder.addJavaProjectFinder(new GradleProjectFinder(gradleProjectCache));
|
||||
|
||||
CompositeProjectOvserver projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache));
|
||||
|
||||
return new BootJavaLanguageServerParams(
|
||||
javaProjectFinder,
|
||||
projectObserver,
|
||||
new DefaultSpringPropertyIndexProvider(javaProjectFinder),
|
||||
RunningAppProvider.DEFAULT
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -26,9 +26,12 @@ public class Main {
|
||||
|
||||
public static void main(String[] args) throws IOException, InterruptedException {
|
||||
LaunguageServerApp.start(() -> {
|
||||
|
||||
CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder();
|
||||
DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(javaProjectFinder);
|
||||
SimpleLanguageServer server = new BootJavaLanguageServer(javaProjectFinder, indexProvider);
|
||||
SimpleLanguageServer server = new BootJavaLanguageServer(
|
||||
BootJavaLanguageServerParams.createDefault()
|
||||
);
|
||||
return server;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java;
|
||||
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
|
||||
|
||||
public class ProjectServices {
|
||||
|
||||
public final JavaProjectFinder finder;
|
||||
public final ProjectObserver observer;
|
||||
|
||||
public ProjectServices(JavaProjectFinder finder, ProjectObserver observer) {
|
||||
super();
|
||||
this.finder = finder;
|
||||
this.observer = observer;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java.utils;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
import org.springframework.ide.vscode.commons.java.IClasspath;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.util.Log;
|
||||
|
||||
public class BootProjectUtil {
|
||||
|
||||
public static boolean isBootProject(IJavaProject jp) {
|
||||
try {
|
||||
IClasspath cp = jp.getClasspath();
|
||||
if (cp!=null) {
|
||||
return cp.getClasspathEntries().anyMatch(cpe -> isBootEntry(cpe));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.log(e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isBootEntry(Path cpe) {
|
||||
String name = cpe.getFileName().toString();
|
||||
return name.endsWith(".jar") && name.startsWith("spring-boot");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -47,10 +47,12 @@ import org.springframework.ide.vscode.boot.java.autowired.SpringBootAppProvider;
|
||||
import org.springframework.ide.vscode.commons.java.IClasspath;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.util.BadLocationException;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
@@ -59,27 +61,13 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
*/
|
||||
public class AutowiredHoverProviderTest {
|
||||
|
||||
private CompositeJavaProjectFinder projectFinder;
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private BootLanguageServerHarness harness;
|
||||
private JavaProjectFinder projectFinder;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
projectFinder = new CompositeJavaProjectFinder();
|
||||
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
|
||||
@Override
|
||||
public BootJavaLanguageServer call() throws Exception {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(projectFinder, indexHarness.getIndexProvider());
|
||||
return server;
|
||||
}
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
harness = new BootLanguageServerHarness();
|
||||
projectFinder = harness.getProjectFinder();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -22,7 +22,6 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -41,16 +40,15 @@ import org.eclipse.lsp4j.TextDocumentIdentifier;
|
||||
import org.eclipse.lsp4j.jsonrpc.messages.Either;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.boot.java.autowired.SpringBootAppProvider;
|
||||
import org.springframework.ide.vscode.boot.java.beans.ComponentHoverProvider;
|
||||
import org.springframework.ide.vscode.commons.java.IClasspath;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.util.BadLocationException;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
@@ -59,27 +57,13 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
*/
|
||||
public class ComponentHoverProviderTest {
|
||||
|
||||
private CompositeJavaProjectFinder projectFinder;
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private JavaProjectFinder projectFinder;
|
||||
private BootLanguageServerHarness harness;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
projectFinder = new CompositeJavaProjectFinder();
|
||||
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
|
||||
@Override
|
||||
public BootJavaLanguageServer call() throws Exception {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(projectFinder, indexHarness.getIndexProvider());
|
||||
return server;
|
||||
}
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
harness = new BootLanguageServerHarness();
|
||||
projectFinder = (d) -> harness.getProjectFinder().find(d);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -30,7 +30,9 @@ import org.springframework.ide.vscode.boot.java.beans.Constants;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
|
||||
import org.springframework.ide.vscode.boot.java.utils.SpringIndexer;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
@@ -40,9 +42,8 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
public class SpringIndexerBeansTest {
|
||||
|
||||
private Map<String, SymbolProvider> symbolProviders;
|
||||
private CompositeJavaProjectFinder projectManager;
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private BootLanguageServerHarness harness;
|
||||
private JavaProjectFinder projectFinder;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
@@ -50,27 +51,14 @@ public class SpringIndexerBeansTest {
|
||||
symbolProviders.put(Constants.SPRING_BEAN, new BeansSymbolProvider());
|
||||
symbolProviders.put(Constants.SPRING_COMPONENT, new ComponentSymbolProvider());
|
||||
|
||||
projectManager = new CompositeJavaProjectFinder();
|
||||
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
|
||||
@Override
|
||||
public BootJavaLanguageServer call() throws Exception {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(projectManager, indexHarness.getIndexProvider());
|
||||
return server;
|
||||
}
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
harness = new BootLanguageServerHarness();
|
||||
projectFinder = harness.getProjectFinder();
|
||||
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testScanSimpleConfigurationClass() throws Exception {
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectFinder, symbolProviders);
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI());
|
||||
indexer.initialize(directory.toPath());
|
||||
|
||||
@@ -82,7 +70,7 @@ public class SpringIndexerBeansTest {
|
||||
|
||||
@Test
|
||||
public void testScanSimpleFunctionBean() throws Exception {
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectFinder, symbolProviders);
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI());
|
||||
indexer.initialize(directory.toPath());
|
||||
|
||||
@@ -94,7 +82,7 @@ public class SpringIndexerBeansTest {
|
||||
|
||||
@Test
|
||||
public void testScanSimpleComponentClass() throws Exception {
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectFinder, symbolProviders);
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI());
|
||||
indexer.initialize(directory.toPath());
|
||||
|
||||
|
||||
@@ -1,46 +1,44 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java.requestmapping.test;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.MockRunningAppProvider;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
|
||||
public class RequestMappingLiveHoverTest {
|
||||
|
||||
private CompositeJavaProjectFinder projectManager;
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private MockRunningAppProvider mockAppProvider;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
|
||||
projectManager = new CompositeJavaProjectFinder();
|
||||
mockAppProvider = new MockRunningAppProvider();
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(() -> {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(projectManager, indexHarness.getIndexProvider(), mockAppProvider.provider);
|
||||
return server;
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
///*******************************************************************************
|
||||
// * Copyright (c) 2017 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
|
||||
// * http://www.eclipse.org/legal/epl-v10.html
|
||||
// *
|
||||
// * Contributors:
|
||||
// * Pivotal, Inc. - initial API and implementation
|
||||
// *******************************************************************************/
|
||||
//package org.springframework.ide.vscode.boot.java.requestmapping.test;
|
||||
//
|
||||
//import org.junit.Before;
|
||||
//import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
//import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
//import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
//import org.springframework.ide.vscode.project.harness.MockRunningAppProvider;
|
||||
//import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
//
|
||||
//
|
||||
//public class RequestMappingLiveHoverTest {
|
||||
//
|
||||
// private CompositeJavaProjectFinder projectManager;
|
||||
// private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
// private PropertyIndexHarness indexHarness;
|
||||
// private MockRunningAppProvider mockAppProvider;
|
||||
//
|
||||
// @Before
|
||||
// public void setup() throws Exception {
|
||||
//
|
||||
// mockAppProvider = new MockRunningAppProvider();
|
||||
// harness = new LanguageServerHarness<BootJavaLanguageServer>(() -> {
|
||||
// BootJavaLanguageServer server = new BootJavaLanguageServer(indexHarness.getProjectFinder(), indexHarness.getIndexProvider(), mockAppProvider.provider);
|
||||
// return server;
|
||||
// }) {
|
||||
// @Override
|
||||
// protected String getFileExtension() {
|
||||
// return ".java";
|
||||
// }
|
||||
// };
|
||||
// }
|
||||
//
|
||||
//
|
||||
//}
|
||||
|
||||
@@ -18,20 +18,17 @@ import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import org.eclipse.lsp4j.SymbolInformation;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
|
||||
import org.springframework.ide.vscode.boot.java.requestmapping.Constants;
|
||||
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingSymbolProvider;
|
||||
import org.springframework.ide.vscode.boot.java.utils.SpringIndexer;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
/**
|
||||
* @author Martin Lippert
|
||||
@@ -39,37 +36,23 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
public class RequestMappingSymbolProviderTest {
|
||||
|
||||
private Map<String, SymbolProvider> symbolProviders;
|
||||
private CompositeJavaProjectFinder projectManager;
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private BootLanguageServerHarness harness;
|
||||
private JavaProjectFinder projectFinder;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
symbolProviders = new HashMap<>();
|
||||
symbolProviders.put(Constants.SPRING_REQUEST_MAPPING, new RequestMappingSymbolProvider());
|
||||
|
||||
projectManager = new CompositeJavaProjectFinder();
|
||||
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
|
||||
@Override
|
||||
public BootJavaLanguageServer call() throws Exception {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(projectManager, indexHarness.getIndexProvider());
|
||||
return server;
|
||||
}
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
harness = new BootLanguageServerHarness();
|
||||
projectFinder = harness.getProjectFinder();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleRequestMappingSymbol() throws Exception {
|
||||
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI()));
|
||||
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectFinder, symbolProviders);
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI());
|
||||
indexer.initialize(directory.toPath());
|
||||
|
||||
@@ -83,7 +66,7 @@ public class RequestMappingSymbolProviderTest {
|
||||
public void testParentRequestMappingSymbol() throws Exception {
|
||||
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI()));
|
||||
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
|
||||
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectFinder, symbolProviders);
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI());
|
||||
indexer.initialize(directory.toPath());
|
||||
|
||||
|
||||
@@ -13,69 +13,39 @@ package org.springframework.ide.vscode.boot.java.scope.test;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.eclipse.lsp4j.CompletionItem;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.Editor;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
/**
|
||||
* @author Martin Lippert
|
||||
*/
|
||||
public class ScopeCompletionTest {
|
||||
|
||||
protected final CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(Arrays.asList((JavaProjectFinder)new FileBasedJavaProjectFinder() {
|
||||
@Override
|
||||
public IJavaProject find(File doc) {
|
||||
return getTestProject();
|
||||
}
|
||||
}));
|
||||
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private IJavaProject testProject;
|
||||
|
||||
private BootLanguageServerHarness harness;
|
||||
private Editor editor;
|
||||
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
testProject = ProjectsHarness.INSTANCE.mavenProject("test-annotations");
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
|
||||
@Override
|
||||
public BootJavaLanguageServer call() throws Exception {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(javaProjectFinder, indexHarness.getIndexProvider());
|
||||
return server;
|
||||
}
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
IJavaProject testProject = ProjectsHarness.INSTANCE.mavenProject("test-annotations");
|
||||
harness = BootLanguageServerHarness.createMocked();
|
||||
harness.useProject(testProject);
|
||||
harness.intialize(null);
|
||||
}
|
||||
|
||||
private IJavaProject getTestProject() {
|
||||
return testProject;
|
||||
}
|
||||
// private IJavaProject getTestProject() {
|
||||
// return testProject;
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void testEmptyBracketsCompletion() throws Exception {
|
||||
|
||||
@@ -38,6 +38,7 @@ import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFin
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
|
||||
import org.springframework.ide.vscode.commons.maven.MavenCore;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
@@ -47,36 +48,18 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
public class SpringIndexerTest {
|
||||
|
||||
private Map<String, SymbolProvider> symbolProviders;
|
||||
private CompositeJavaProjectFinder projectFinder;
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private SpringIndexer indexer;
|
||||
|
||||
private SpringIndexer indexer() {
|
||||
return harness.getServer().getSpringIndexer();
|
||||
}
|
||||
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
symbolProviders = new HashMap<>();
|
||||
symbolProviders.put(Constants.SPRING_REQUEST_MAPPING, new RequestMappingSymbolProvider());
|
||||
|
||||
projectFinder = new CompositeJavaProjectFinder();
|
||||
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
|
||||
@Override
|
||||
public BootJavaLanguageServer call() throws Exception {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(projectFinder, indexHarness.getIndexProvider()) {
|
||||
@Override
|
||||
protected SpringIndexer createAnnotationIndexer(SimpleLanguageServer server, JavaProjectFinder projectManager) {
|
||||
return indexer = new SpringIndexer((BootJavaLanguageServer) server, projectFinder, symbolProviders);
|
||||
}
|
||||
};
|
||||
return server;
|
||||
}
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
harness = new BootLanguageServerHarness();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -85,7 +68,7 @@ public class SpringIndexerTest {
|
||||
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
|
||||
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
|
||||
List<? extends SymbolInformation> allSymbols = indexer().getAllSymbols("");
|
||||
|
||||
assertEquals(8, allSymbols.size());
|
||||
|
||||
@@ -108,19 +91,19 @@ public class SpringIndexerTest {
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
|
||||
|
||||
String uriPrefix = "file://" + directory.getAbsolutePath();
|
||||
List<? extends SymbolInformation> symbols = indexer.getSymbols(uriPrefix + "/src/main/java/org/test/MainClass.java");
|
||||
List<? extends SymbolInformation> symbols = indexer().getSymbols(uriPrefix + "/src/main/java/org/test/MainClass.java");
|
||||
assertEquals(4, symbols.size());
|
||||
assertTrue(containsSymbol(symbols, "@SpringBootApplication", uriPrefix + "/src/main/java/org/test/MainClass.java", 6, 0, 6, 22));
|
||||
assertTrue(containsSymbol(symbols, "@/embedded-foo-mapping -- (no method defined)", uriPrefix + "/src/main/java/org/test/MainClass.java", 17, 1, 17, 41));
|
||||
assertTrue(containsSymbol(symbols, "@/foo-root-mapping -- (no method defined)", uriPrefix + "/src/main/java/org/test/MainClass.java", 24, 0, 24, 36));
|
||||
assertTrue(containsSymbol(symbols, "@/foo-root-mapping/embedded-foo-mapping-with-root -- (no method defined)", uriPrefix + "/src/main/java/org/test/MainClass.java", 27, 1, 27, 51));
|
||||
|
||||
symbols = indexer.getSymbols(uriPrefix + "/src/main/java/org/test/SimpleMappingClass.java");
|
||||
symbols = indexer().getSymbols(uriPrefix + "/src/main/java/org/test/SimpleMappingClass.java");
|
||||
assertEquals(2, symbols.size());
|
||||
assertTrue(containsSymbol(symbols, "@/mapping1 -- (no method defined)", uriPrefix + "/src/main/java/org/test/SimpleMappingClass.java", 6, 1, 6, 28));
|
||||
assertTrue(containsSymbol(symbols, "@/mapping2 -- (no method defined)", uriPrefix + "/src/main/java/org/test/SimpleMappingClass.java", 11, 1, 11, 28));
|
||||
|
||||
symbols = indexer.getSymbols(uriPrefix + "/src/main/java/org/test/sub/MappingClassSubpackage.java");
|
||||
symbols = indexer().getSymbols(uriPrefix + "/src/main/java/org/test/sub/MappingClassSubpackage.java");
|
||||
assertEquals(2, symbols.size());
|
||||
assertTrue(containsSymbol(symbols, "@/classlevel -- (no method defined)", uriPrefix + "/src/main/java/org/test/sub/MappingClassSubpackage.java", 4, 0, 4, 30));
|
||||
assertTrue(containsSymbol(symbols, "@/classlevel/mapping-subpackage -- (no method defined)", uriPrefix + "/src/main/java/org/test/sub/MappingClassSubpackage.java", 7, 1, 7, 38));
|
||||
@@ -132,7 +115,7 @@ public class SpringIndexerTest {
|
||||
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/").toURI());
|
||||
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
|
||||
List<? extends SymbolInformation> allSymbols = indexer().getAllSymbols("");
|
||||
|
||||
assertEquals(8, allSymbols.size());
|
||||
|
||||
@@ -157,18 +140,18 @@ public class SpringIndexerTest {
|
||||
// update document and update index
|
||||
String changedDocURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/SimpleMappingClass.java";
|
||||
String newContent = FileUtils.readFileToString(new File(new URI(changedDocURI))).replace("mapping1", "mapping1-CHANGED");
|
||||
CompletableFuture<Void> updateFuture = indexer.updateDocument(changedDocURI, newContent);
|
||||
CompletableFuture<Void> updateFuture = indexer().updateDocument(changedDocURI, newContent);
|
||||
|
||||
updateFuture.get(5, TimeUnit.SECONDS);
|
||||
|
||||
// check for updated index per document
|
||||
List<? extends SymbolInformation> symbols = indexer.getSymbols(changedDocURI);
|
||||
List<? extends SymbolInformation> symbols = indexer().getSymbols(changedDocURI);
|
||||
assertEquals(2, symbols.size());
|
||||
assertTrue(containsSymbol(symbols, "@/mapping1-CHANGED -- (no method defined)", changedDocURI, 6, 1, 6, 36));
|
||||
assertTrue(containsSymbol(symbols, "@/mapping2 -- (no method defined)", changedDocURI, 11, 1, 11, 28));
|
||||
|
||||
// check for updated index in all symbols
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
|
||||
List<? extends SymbolInformation> allSymbols = indexer().getAllSymbols("");
|
||||
assertEquals(8, allSymbols.size());
|
||||
|
||||
String uriPrefix = "file://" + directory.getAbsolutePath();
|
||||
@@ -189,7 +172,7 @@ public class SpringIndexerTest {
|
||||
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
|
||||
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("mapp");
|
||||
List<? extends SymbolInformation> allSymbols = indexer().getAllSymbols("mapp");
|
||||
|
||||
assertEquals(6, allSymbols.size());
|
||||
|
||||
@@ -209,7 +192,7 @@ public class SpringIndexerTest {
|
||||
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
|
||||
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("@/foo-root-mapping -- (no method defined)");
|
||||
List<? extends SymbolInformation> allSymbols = indexer().getAllSymbols("@/foo-root-mapping -- (no method defined)");
|
||||
|
||||
assertEquals(2, allSymbols.size());
|
||||
|
||||
@@ -225,7 +208,7 @@ public class SpringIndexerTest {
|
||||
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
|
||||
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("@/foo-root-mapping/embedded-foo-mapping-with-root -- (no method defined)");
|
||||
List<? extends SymbolInformation> allSymbols = indexer().getAllSymbols("@/foo-root-mapping/embedded-foo-mapping-with-root -- (no method defined)");
|
||||
|
||||
assertEquals(1, allSymbols.size());
|
||||
|
||||
@@ -257,18 +240,18 @@ public class SpringIndexerTest {
|
||||
|
||||
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
|
||||
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
|
||||
List<? extends SymbolInformation> allSymbols = indexer().getAllSymbols("");
|
||||
assertEquals(8, allSymbols.size());
|
||||
|
||||
File pomFile = directory.toPath().resolve(MavenCore.POM_XML).toFile();
|
||||
|
||||
assertFalse(indexer.isInitializing());
|
||||
assertFalse(indexer().isInitializing());
|
||||
harness.changeFile(pomFile.toURI().toString());
|
||||
// Refresh in progress
|
||||
assertTrue(indexer.isInitializing());
|
||||
assertTrue(indexer().isInitializing());
|
||||
|
||||
allSymbols = indexer.getAllSymbols("");
|
||||
assertFalse(indexer.isInitializing());
|
||||
allSymbols = indexer().getAllSymbols("");
|
||||
assertFalse(indexer().isInitializing());
|
||||
assertEquals(8, allSymbols.size());
|
||||
}
|
||||
|
||||
|
||||
@@ -11,26 +11,23 @@
|
||||
package org.springframework.ide.vscode.boot.java.value.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.eclipse.lsp4j.CompletionItem;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerParams;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
|
||||
import org.springframework.ide.vscode.boot.java.value.ValueCompletionProcessor;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.Editor;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
@@ -39,7 +36,7 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
*/
|
||||
public class ValueCompletionTest {
|
||||
|
||||
private LanguageServerHarness<BootJavaLanguageServer> harness;
|
||||
private BootLanguageServerHarness harness;
|
||||
private IJavaProject testProject;
|
||||
|
||||
private Editor editor;
|
||||
@@ -50,24 +47,15 @@ public class ValueCompletionTest {
|
||||
public void setup() throws Exception {
|
||||
testProject = ProjectsHarness.INSTANCE.mavenProject("test-annotations");
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
|
||||
harness = new LanguageServerHarness<BootJavaLanguageServer>(() -> {
|
||||
BootJavaLanguageServer server = new BootJavaLanguageServer(
|
||||
new CompositeJavaProjectFinder(new ArrayList<>(Collections.singleton(new FileBasedJavaProjectFinder() {
|
||||
@Override
|
||||
public IJavaProject find(File doc) {
|
||||
return getTestProject();
|
||||
}
|
||||
}))),
|
||||
indexHarness.getIndexProvider()
|
||||
);
|
||||
return server;
|
||||
}) {
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
};
|
||||
//Somewhat strange test setup, with a project context finder that finds the test project,
|
||||
// but doesn't use it in the indexProvider.
|
||||
BootJavaLanguageServerParams params = new BootJavaLanguageServerParams(
|
||||
d -> getTestProject(),
|
||||
ProjectObserver.NULL,
|
||||
indexHarness.getIndexProvider(),
|
||||
RunningAppProvider.DEFAULT
|
||||
);
|
||||
harness = new BootLanguageServerHarness(params);
|
||||
harness.intialize(null);
|
||||
}
|
||||
|
||||
@@ -297,7 +285,9 @@ public class ValueCompletionTest {
|
||||
for (String expectedCompleted : completedAnnotations) {
|
||||
Editor clonedEditor = editor.clone();
|
||||
clonedEditor.apply(completions.get(i++));
|
||||
assertTrue(clonedEditor.getText().contains(expectedCompleted));
|
||||
if (!clonedEditor.getText().contains(expectedCompleted)) {
|
||||
fail("Not found '"+expectedCompleted+"' in \n"+clonedEditor.getText());
|
||||
}
|
||||
}
|
||||
|
||||
assertEquals(i, completions.size());
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.project.harness;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerParams;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
|
||||
public class BootLanguageServerHarness extends LanguageServerHarness<BootJavaLanguageServer> {
|
||||
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private JavaProjectFinder projectFinder = (doc) -> getServer().getProjectFinder().find(doc);
|
||||
|
||||
/**
|
||||
* Creates a harness with a 'realistic' language server. I.e. no fake or mocked components.
|
||||
*/
|
||||
public BootLanguageServerHarness() throws Exception {
|
||||
super(() -> new BootJavaLanguageServer(BootJavaLanguageServerParams.createDefault()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a harness with custom (potentially mocked) params.
|
||||
*/
|
||||
public BootLanguageServerHarness(BootJavaLanguageServerParams params) throws Exception {
|
||||
super(() -> {
|
||||
return new BootJavaLanguageServer((server) -> params);
|
||||
});
|
||||
this.projectFinder = params.projectFinder;
|
||||
}
|
||||
|
||||
|
||||
public static BootLanguageServerHarness createMocked() throws Exception {
|
||||
PropertyIndexHarness indexHarness = new PropertyIndexHarness();
|
||||
BootLanguageServerHarness harness = new BootLanguageServerHarness(new BootJavaLanguageServerParams(indexHarness.getProjectFinder(), ProjectObserver.NULL, indexHarness.getIndexProvider(), RunningAppProvider.DEFAULT));
|
||||
harness.indexHarness = indexHarness;
|
||||
return harness;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
}
|
||||
|
||||
public JavaProjectFinder getProjectFinder() {
|
||||
return projectFinder;
|
||||
}
|
||||
|
||||
public PropertyIndexHarness getPropertyIndexHarness() {
|
||||
Assert.assertNotNull(indexHarness); //only supported in some types of instantations of the harness (i.e. when indexer is controlled by indexer harness.
|
||||
return indexHarness;
|
||||
}
|
||||
|
||||
public void useProject(IJavaProject p) throws Exception {
|
||||
indexHarness.useProject(p);
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,13 @@ import org.springframework.boot.configurationmetadata.ConfigurationMetadataPrope
|
||||
import org.springframework.boot.configurationmetadata.Deprecation;
|
||||
import org.springframework.boot.configurationmetadata.ValueHint;
|
||||
import org.springframework.boot.configurationmetadata.ValueProvider;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerParams;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndex;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider;
|
||||
import org.springframework.ide.vscode.commons.java.IClasspath;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.LSFactory;
|
||||
import org.springframework.ide.vscode.commons.util.FuzzyMap;
|
||||
import org.springframework.ide.vscode.commons.util.text.IDocument;
|
||||
|
||||
@@ -559,4 +562,8 @@ public class PropertyIndexHarness {
|
||||
return indexProvider;
|
||||
}
|
||||
|
||||
public JavaProjectFinder getProjectFinder() {
|
||||
return (doc) -> testProject;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user