Refactor boot Java language server

Allow running app provider to be injected into language server for
testing purposes.
This commit is contained in:
nsingh
2017-10-16 16:10:13 -07:00
parent 5d8bd397f7
commit 17eb2eb2f0
3 changed files with 19 additions and 8 deletions

View File

@@ -32,6 +32,7 @@ import org.springframework.ide.vscode.boot.java.handlers.BootJavaWorkspaceSymbol
import org.springframework.ide.vscode.boot.java.handlers.CompletionProvider;
import org.springframework.ide.vscode.boot.java.handlers.HoverProvider;
import org.springframework.ide.vscode.boot.java.handlers.ReferenceProvider;
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingHoverProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingSymbolProvider;
@@ -84,6 +85,10 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
private final WordHighlighter testHightlighter = null; //new WordHighlighter("foo");
public BootJavaLanguageServer(CompositeJavaProjectFinder javaProjectFinder, SpringPropertyIndexProvider indexProvider) {
this(javaProjectFinder, indexProvider, RunningAppProvider.DEFAULT);
}
public BootJavaLanguageServer(CompositeJavaProjectFinder javaProjectFinder, SpringPropertyIndexProvider indexProvider, RunningAppProvider runningAppProvider) {
super("vscode-boot-java");
System.setProperty(LANGUAGE_SERVER_PROCESS_PROPERTY, LANGUAGE_SERVER_PROCESS_PROPERTY);
@@ -103,10 +108,10 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
documents.onCompletion(completionEngine::getCompletions);
documents.onCompletionResolve(completionEngine::resolveCompletion);
BootJavaHoverProvider hoverInfoProvider = createHoverHandler(javaProjectFinder);
BootJavaHoverProvider hoverInfoProvider = createHoverHandler(javaProjectFinder, runningAppProvider);
documents.onHover(hoverInfoProvider);
liveHoverWatchdog = new SpringLiveHoverWatchdog(this, hoverInfoProvider);
liveHoverWatchdog = new SpringLiveHoverWatchdog(this, hoverInfoProvider, runningAppProvider);
documents.onDidChangeContent(params -> {
TextDocument doc = params.getDocument();
if (testHightlighter != null) {
@@ -242,7 +247,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
return new BootJavaCompletionEngine(javaProjectFinder, providers, snippetManager);
}
protected BootJavaHoverProvider createHoverHandler(JavaProjectFinder javaProjectFinder) {
protected BootJavaHoverProvider createHoverHandler(JavaProjectFinder javaProjectFinder, RunningAppProvider runningAppProvider) {
HashMap<String, HoverProvider> providers = new HashMap<>();
providers.put(org.springframework.ide.vscode.boot.java.value.Constants.SPRING_VALUE, new ValueHoverProvider());
@@ -257,7 +262,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
providers.put(org.springframework.ide.vscode.boot.java.autowired.Constants.SPRING_AUTOWIRED, new AutowiredHoverProvider());
providers.put(org.springframework.ide.vscode.boot.java.beans.Constants.SPRING_COMPONENT, new ComponentHoverProvider());
return new BootJavaHoverProvider(this, javaProjectFinder, providers);
return new BootJavaHoverProvider(this, javaProjectFinder, providers, runningAppProvider);
}
protected SpringIndexer createAnnotationIndexer(SimpleLanguageServer server, JavaProjectFinder projectFinder) {

View File

@@ -52,11 +52,13 @@ public class BootJavaHoverProvider implements HoverHandler {
private JavaProjectFinder projectFinder;
private SimpleLanguageServer server;
private Map<String, HoverProvider> hoverProviders;
private RunningAppProvider runningAppProvider;
public BootJavaHoverProvider(SimpleLanguageServer server, JavaProjectFinder projectFinder, Map<String, HoverProvider> specificProviders) {
public BootJavaHoverProvider(SimpleLanguageServer server, JavaProjectFinder projectFinder, Map<String, HoverProvider> specificProviders, RunningAppProvider runningAppProvider) {
this.server = server;
this.projectFinder = projectFinder;
this.hoverProviders = specificProviders;
this.runningAppProvider = runningAppProvider;
}
@Override
@@ -222,7 +224,7 @@ public class BootJavaHoverProvider implements HoverHandler {
private SpringBootApp[] getRunningSpringApps(IJavaProject project) {
try {
return SpringBootApp.getAllRunningSpringApps().values().stream()
return runningAppProvider.getAllRunningSpringApps().stream()
.filter((app) -> !app.containsSystemProperty(BootJavaLanguageServer.LANGUAGE_SERVER_PROCESS_PROPERTY))
.toArray(SpringBootApp[]::new);
} catch (Exception e) {

View File

@@ -20,6 +20,7 @@ import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaHoverProvider;
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp;
import org.springframework.ide.vscode.commons.languageserver.HighlightParams;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
@@ -35,12 +36,15 @@ public class SpringLiveHoverWatchdog {
private final Set<String> watchedDocs;
private final SimpleLanguageServer server;
private final BootJavaHoverProvider hoverProvider;
private RunningAppProvider runningAppProvider;
private final Timer timer;
public SpringLiveHoverWatchdog(SimpleLanguageServer server, BootJavaHoverProvider hoverProvider) {
public SpringLiveHoverWatchdog(SimpleLanguageServer server, BootJavaHoverProvider hoverProvider, RunningAppProvider runningAppProvider) {
this.server = server;
this.hoverProvider = hoverProvider;
this.runningAppProvider = runningAppProvider;
this.watchedDocs = new ConcurrentSkipListSet<>();
this.timer = new Timer();
@@ -76,7 +80,7 @@ public class SpringLiveHoverWatchdog {
public void update(String docURI) {
try {
SpringBootApp[] runningBootApps = SpringBootApp.getAllRunningSpringApps().values().stream()
SpringBootApp[] runningBootApps = runningAppProvider.getAllRunningSpringApps().stream()
.filter((app) -> !app.containsSystemProperty(BootJavaLanguageServer.LANGUAGE_SERVER_PROCESS_PROPERTY))
.toArray(SpringBootApp[]::new);