From da1f00ec5bef98a1fe2ece101089b2c5264de5d4 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 26 Mar 2019 13:52:30 -0700 Subject: [PATCH] Turn BootJavaConfig into a Bean --- .../boot/{java => app}/BootJavaConfig.java | 31 +++++++++++++++++-- .../app/BootLanguageServerInitializer.java | 3 +- .../BootJavaLanguageServerComponents.java | 22 ++++--------- 3 files changed, 36 insertions(+), 20 deletions(-) rename headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/{java => app}/BootJavaConfig.java (54%) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java similarity index 54% rename from headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaConfig.java rename to headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java index 59ee972fa..cd82a1787 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaConfig.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java @@ -8,19 +8,36 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.boot.java; +package org.springframework.ide.vscode.boot.app; +import java.util.function.Consumer; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.ide.vscode.commons.languageserver.util.ListenerList; import org.springframework.ide.vscode.commons.languageserver.util.Settings; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspaceService; +import org.springframework.stereotype.Component; /** * Boot-Java LS settings * * @author Alex Boyko - * */ -public class BootJavaConfig { +@Component +public class BootJavaConfig implements InitializingBean { + //TODO: Consider changing this to something that raises Spring application events. + // I.e. like described in here: https://www.baeldung.com/spring-events + + private final SimpleWorkspaceService workspace; private Settings settings = new Settings(null); + private ListenerList listeners = new ListenerList(); + + BootJavaConfig(SimpleLanguageServer server) { + this.workspace = server.getWorkspaceService(); + } + public boolean isBootHintsEnabled() { Boolean enabled = settings.getBoolean("boot-java", "boot-hints", "on"); @@ -39,7 +56,15 @@ public class BootJavaConfig { public void handleConfigurationChange(Settings newConfig) { this.settings = newConfig; + listeners.fire(null); } + public void addListener(Consumer l) { + listeners.add(l); + } + @Override + public void afterPropertiesSet() throws Exception { + workspace.onDidChangeConfiguraton(this::handleConfigurationChange); + } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java index f91a73c2d..888e043f5 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java @@ -48,6 +48,7 @@ public class BootLanguageServerInitializer implements InitializingBean { @Autowired YamlStructureProvider yamlStructureProvider; @Autowired YamlAssistContextProvider yamlAssistContextProvider; @Autowired SymbolCache symbolCache; + @Autowired BootJavaConfig config; @Qualifier("adHocProperties") @Autowired ProjectBasedPropertyIndexProvider adHocProperties; @@ -73,7 +74,7 @@ public class BootLanguageServerInitializer implements InitializingBean { // some server intialization code. Migrate that code and get rid of the ComposableLanguageServer class CompositeLanguageServerComponents.Builder builder = new CompositeLanguageServerComponents.Builder(); builder.add(new BootPropertiesLanguageServerComponents(server, params, javaElementLocationProvider, parser, yamlStructureProvider, yamlAssistContextProvider, sourceLinks)); - builder.add(new BootJavaLanguageServerComponents(server, params, sourceLinks, cuCache, adHocProperties, symbolCache)); + builder.add(new BootJavaLanguageServerComponents(server, params, sourceLinks, cuCache, adHocProperties, symbolCache, config)); components = builder.build(server); params.projectObserver.addListener(reconcileOpenDocuments(server, components)); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java index 2f29d0102..b8b74e54f 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java @@ -20,6 +20,7 @@ import org.eclipse.lsp4j.CompletionItemKind; import org.eclipse.lsp4j.InitializeParams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.ide.vscode.boot.app.BootJavaConfig; import org.springframework.ide.vscode.boot.app.BootLanguageServerParams; import org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchyAwareLookup; import org.springframework.ide.vscode.boot.java.autowired.AutowiredHoverProvider; @@ -58,12 +59,10 @@ import org.springframework.ide.vscode.boot.java.snippets.JavaSnippetContext; import org.springframework.ide.vscode.boot.java.snippets.JavaSnippetManager; import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache; import org.springframework.ide.vscode.boot.java.utils.RestrictedDefaultSymbolProvider; -import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex; -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.java.utils.SpringLiveChangeDetectionWatchdog; import org.springframework.ide.vscode.boot.java.utils.SpringLiveHoverWatchdog; +import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex; +import org.springframework.ide.vscode.boot.java.utils.SymbolCache; 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; @@ -113,7 +112,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent private final SpringLiveHoverWatchdog liveHoverWatchdog; private final SpringLiveChangeDetectionWatchdog liveChangeDetectionWatchdog; private final ProjectObserver projectObserver; - private final BootJavaConfig config; private final CompilationUnitCache cuCache; private JavaProjectFinder projectFinder; @@ -127,13 +125,12 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent SourceLinks sourceLinks, CompilationUnitCache cuCache, ProjectBasedPropertyIndexProvider adHocIndexProvider, - SymbolCache symbolCache + SymbolCache symbolCache, + BootJavaConfig config ) { this.server = server; this.serverParams = serverParams; - this.config = new BootJavaConfig(); - projectFinder = serverParams.projectFinder; projectObserver = serverParams.projectObserver; this.cuCache = cuCache; @@ -210,9 +207,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent highlightsEngine = createDocumentHighlightEngine(); documents.onDocumentHighlight(highlightsEngine); - workspaceService.onDidChangeConfiguraton(settings -> { - config.handleConfigurationChange(settings); - + config.addListener(ignore -> { // live hover watchdog if (config.isBootHintsEnabled()) { liveHoverWatchdog.enableHighlights(); @@ -222,7 +217,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent indexer.configureIndexer(config.isSpringXMLSupportEnabled()); - // live change detection watchdog if (config.isChangeDetectionEnabled()) { liveChangeDetectionWatchdog.enableHighlights(); @@ -472,10 +466,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent return propertyIndexProvider; } - public BootJavaConfig getConfig() { - return config; - } - public CompilationUnitCache getCompilationUnitCache() { return cuCache; }