From 65aa2ef69f7ffd3abb1b16de13021b7bf82863e1 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Mon, 11 Mar 2019 09:48:59 +0100 Subject: [PATCH] test symbol infrastructure without caching enabled --- .../BootJavaLanguageServerComponents.java | 24 ++++++++++++++++--- .../boot/java/utils/SpringSymbolIndex.java | 18 ++++---------- .../boot/bootiful/SymbolProviderTestConf.java | 5 ++-- 3 files changed, 28 insertions(+), 19 deletions(-) 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 7b35d19d7..349117ff6 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 @@ -59,6 +59,9 @@ 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.value.ValueCompletionProcessor; @@ -111,6 +114,8 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent private CodeLensHandler codeLensHandler; private DocumentHighlightHandler highlightsEngine; + private SymbolCache symbolCache; + public BootJavaLanguageServerComponents( SimpleLanguageServer server, BootLanguageServerParams serverParams, @@ -136,7 +141,20 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent ReferencesHandler referencesHandler = createReferenceHandler(server, projectFinder); documents.onReferences(referencesHandler); - indexer = createAnnotationIndexer(server, serverParams); + if ("true".equals(System.getProperty("boot.ls.symbolCache.enabled", "true"))) { + try { + this.symbolCache = new SymbolCacheOnDisc(); + } + catch (Exception e) { + log.warn("symbol cache directory could not be created, no cache enabled"); + this.symbolCache = new SymbolCacheVoid(); + } + } + else { + this.symbolCache = new SymbolCacheVoid(); + } + + indexer = createAnnotationIndexer(server, serverParams, symbolCache); documents.onDidSave(params -> { TextDocument document = params.getDocument(); // Spring Boot LS get events from boot properties files as well, so filter them out @@ -376,7 +394,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent return new BootJavaHoverProvider(this, javaProjectFinder, providers, runningAppProvider); } - protected SpringSymbolIndex createAnnotationIndexer(SimpleLanguageServer server, BootLanguageServerParams params) { + public SpringSymbolIndex createAnnotationIndexer(SimpleLanguageServer server, BootLanguageServerParams params, SymbolCache cache) { AnnotationHierarchyAwareLookup providers = new AnnotationHierarchyAwareLookup<>(); RequestMappingSymbolProvider requestMappingSymbolProvider = new RequestMappingSymbolProvider(); BeansSymbolProvider beansSymbolProvider = new BeansSymbolProvider(); @@ -419,7 +437,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent providers.put(Annotations.REPOSITORY, dataRepositorySymbolProvider); providers.put("", webfluxRouterSymbolProvider); - return new SpringSymbolIndex(server, params, providers); + return new SpringSymbolIndex(server, params, providers, cache); } protected ReferencesHandler createReferenceHandler(SimpleLanguageServer server, JavaProjectFinder projectFinder) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringSymbolIndex.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringSymbolIndex.java index 61814728d..7247f7294 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringSymbolIndex.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringSymbolIndex.java @@ -72,7 +72,7 @@ public class SpringSymbolIndex { private final ExecutorService updateQueue; private SpringIndexer[] indexer; - private SymbolCache cache; + private final SymbolCache cache; private static final Logger log = LoggerFactory.getLogger(SpringSymbolIndex.class); @@ -111,7 +111,8 @@ public class SpringSymbolIndex { return params.projectObserver; } - public SpringSymbolIndex(SimpleLanguageServer server, BootLanguageServerParams params, AnnotationHierarchyAwareLookup specificProviders) { + public SpringSymbolIndex(SimpleLanguageServer server, BootLanguageServerParams params, + AnnotationHierarchyAwareLookup specificProviders, SymbolCache cache) { log.debug("Creating {}", this); this.server = server; this.params = params; @@ -124,18 +125,7 @@ public class SpringSymbolIndex { this.addonInformationByDoc = new ConcurrentHashMap<>(); this.addonInformationByProject = new ConcurrentHashMap<>(); - if ("true".equals(System.getProperty("boot.ls.symbolCache.enabled", "true"))) { - try { - this.cache = new SymbolCacheOnDisc(); - } - catch (Exception e) { - log.warn("symbol cache directory could not be created, no cache enabled"); - } - } - - if (this.cache == null) { - this.cache = new SymbolCacheVoid(); - } + this.cache = cache; SymbolHandler handler = new SymbolHandler() { @Override 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 5d670f552..203c0690f 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 @@ -20,6 +20,7 @@ import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents import org.springframework.ide.vscode.boot.java.links.SourceLinkFactory; import org.springframework.ide.vscode.boot.java.links.SourceLinks; import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex; +import org.springframework.ide.vscode.boot.java.utils.SymbolCacheVoid; import org.springframework.ide.vscode.boot.metadata.DefaultSpringPropertyIndexProvider; import org.springframework.ide.vscode.boot.metadata.ValueProviderRegistry; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; @@ -47,8 +48,8 @@ public class SymbolProviderTestConf { return BootLanguageServerParams.createTestDefault(server, valueProviders); } - @Bean SpringSymbolIndex springSymbolIndex(BootLanguageServerInitializer serverInit) { - return serverInit.getComponents().get(BootJavaLanguageServerComponents.class).getSpringSymbolIndex(); + @Bean SpringSymbolIndex springSymbolIndex(BootLanguageServerInitializer serverInit, SimpleLanguageServer server, BootLanguageServerParams params) { + return serverInit.getComponents().get(BootJavaLanguageServerComponents.class).createAnnotationIndexer(server, params, new SymbolCacheVoid()); } @Bean DefaultSpringPropertyIndexProvider indexProvider(BootLanguageServerParams serverParams) {