From 17eb2eb2f0a917ce990cce36e775e1d5c0c7eb8a Mon Sep 17 00:00:00 2001 From: nsingh Date: Mon, 16 Oct 2017 16:10:13 -0700 Subject: [PATCH] Refactor boot Java language server Allow running app provider to be injected into language server for testing purposes. --- .../vscode/boot/java/BootJavaLanguageServer.java | 13 +++++++++---- .../boot/java/handlers/BootJavaHoverProvider.java | 6 ++++-- .../boot/java/utils/SpringLiveHoverWatchdog.java | 8 ++++++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java index 8920c659f..20796f0d6 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java @@ -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 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) { diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java index d719a838f..05dfd2413 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java @@ -52,11 +52,13 @@ public class BootJavaHoverProvider implements HoverHandler { private JavaProjectFinder projectFinder; private SimpleLanguageServer server; private Map hoverProviders; + private RunningAppProvider runningAppProvider; - public BootJavaHoverProvider(SimpleLanguageServer server, JavaProjectFinder projectFinder, Map specificProviders) { + public BootJavaHoverProvider(SimpleLanguageServer server, JavaProjectFinder projectFinder, Map 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) { diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java index 86f640f51..b5ac870b7 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java @@ -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 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);