Convert SpringSymbolIndexer to a @Component

This commit is contained in:
Kris De Volder
2019-03-26 16:23:07 -07:00
parent da1f00ec5b
commit 7684f59796
20 changed files with 165 additions and 157 deletions

View File

@@ -49,6 +49,7 @@ public class BootLanguageServerInitializer implements InitializingBean {
@Autowired YamlAssistContextProvider yamlAssistContextProvider;
@Autowired SymbolCache symbolCache;
@Autowired BootJavaConfig config;
@Autowired SpringSymbolIndex springIndexer;
@Qualifier("adHocProperties") @Autowired ProjectBasedPropertyIndexProvider adHocProperties;
@@ -74,7 +75,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, config));
builder.add(new BootJavaLanguageServerComponents(server, params, sourceLinks, cuCache, adHocProperties, symbolCache, config, springIndexer));
components = builder.build(server);
params.projectObserver.addListener(reconcileOpenDocuments(server, components));

View File

@@ -8,7 +8,7 @@
* Contributors:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.utils;
package org.springframework.ide.vscode.boot.app;
import java.io.File;
import java.net.URI;
@@ -34,45 +34,60 @@ import org.eclipse.lsp4j.SymbolInformation;
import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.boot.app.BootLanguageServerParams;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents;
import org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchyAwareLookup;
import org.springframework.ide.vscode.boot.java.handlers.EnhancedSymbolInformation;
import org.springframework.ide.vscode.boot.java.handlers.SymbolAddOnInformation;
import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexer;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexerJava;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexerXML;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexerXMLNamespaceHandler;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexerXMLNamespaceHandlerBeans;
import org.springframework.ide.vscode.boot.java.utils.SymbolCache;
import org.springframework.ide.vscode.boot.java.utils.SymbolHandler;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.java.SpringProjectUtil;
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.java.ProjectObserver.Listener;
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.util.Futures;
import org.springframework.ide.vscode.commons.util.StringUtil;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
import org.springframework.stereotype.Component;
/**
* @author Martin Lippert
*/
public class SpringSymbolIndex {
@Component
public class SpringSymbolIndex implements InitializingBean {
@Autowired SimpleLanguageServer server;
@Autowired BootJavaConfig config;
@Autowired BootLanguageServerParams params;
@Autowired AnnotationHierarchyAwareLookup<SymbolProvider> specificProviders;
@Autowired SymbolCache cache;
private static final String QUERY_PARAM_LOCATION_PREFIX = "locationPrefix:";
private static final int MAX_NUMBER_OF_SYMBOLS_IN_RESPONSE = 50;
private final SimpleLanguageServer server;
private final BootLanguageServerParams params;
private final JavaProjectFinder projectFinder;
private final List<SymbolInformation> symbols = new ArrayList<>();
private final List<SymbolAddOnInformation> addonInformation = new ArrayList<>();
private final List<SymbolInformation> symbols;
private final List<SymbolAddOnInformation> addonInformation;
private final ConcurrentMap<String, List<SymbolInformation>> symbolsByDoc = new ConcurrentHashMap<>();
private final ConcurrentMap<String, List<SymbolAddOnInformation>> addonInformationByDoc = new ConcurrentHashMap<>();
private final ConcurrentMap<String, List<SymbolInformation>> symbolsByDoc;
private final ConcurrentMap<String, List<SymbolAddOnInformation>> addonInformationByDoc;
private final ConcurrentMap<String, List<SymbolInformation>> symbolsByProject = new ConcurrentHashMap<>();
private final ConcurrentMap<String, List<SymbolAddOnInformation>> addonInformationByProject = new ConcurrentHashMap<>();
private final ConcurrentMap<String, List<SymbolInformation>> symbolsByProject;
private final ConcurrentMap<String, List<SymbolAddOnInformation>> addonInformationByProject;
private final ExecutorService updateQueue;
private final ExecutorService updateQueue = Executors.newSingleThreadExecutor();
private SpringIndexer[] indexer;
private final SymbolCache cache;
private static final Logger log = LoggerFactory.getLogger(SpringSymbolIndex.class);
@@ -103,6 +118,7 @@ public class SpringSymbolIndex {
private String watchXMLCreatedRegistration;
private String watchXMLChangedRegistration;
private SimpleWorkspaceService getWorkspaceService() {
return server.getServer().getWorkspaceService();
}
@@ -111,21 +127,9 @@ public class SpringSymbolIndex {
return params.projectObserver;
}
public SpringSymbolIndex(SimpleLanguageServer server, BootLanguageServerParams params,
AnnotationHierarchyAwareLookup<SymbolProvider> specificProviders, SymbolCache cache) {
log.debug("Creating {}", this);
this.server = server;
this.params = params;
this.projectFinder = params.projectFinder;
this.symbols = new ArrayList<>();
this.symbolsByDoc = new ConcurrentHashMap<>();
this.symbolsByProject = new ConcurrentHashMap<>();
this.addonInformation = new ArrayList<>();
this.addonInformationByDoc = new ConcurrentHashMap<>();
this.addonInformationByProject = new ConcurrentHashMap<>();
this.cache = cache;
@Override
public void afterPropertiesSet() throws Exception {
log.debug("Setting up {}", this);
SymbolHandler handler = new SymbolHandler() {
@Override
@@ -141,7 +145,6 @@ public class SpringSymbolIndex {
this.indexer = new SpringIndexer[] {springIndexerJava};
this.updateQueue = Executors.newSingleThreadExecutor();
getWorkspaceService().onDidChangeWorkspaceFolders(evt -> {
log.debug("workspace roots have changed event arrived - added: " + evt.getEvent().getAdded() + " - removed: " + evt.getEvent().getRemoved());
@@ -151,6 +154,22 @@ public class SpringSymbolIndex {
getProjectObserver().addListener(projectListener);
log.info("project listener registered");
}
SimpleTextDocumentService documents = server.getTextDocumentService();
documents.onDidSave(params -> {
TextDocument document = params.getDocument();
// Spring Boot LS get events from boot properties files as well, so filter them out
if (BootJavaLanguageServerComponents.LANGUAGES.contains(document.getLanguageId())) {
String docURI = document.getId().getUri();
String content = document.get();
this.updateDocument(docURI, content);
}
});
config.addListener(evt -> {
this.configureIndexer(config.isSpringXMLSupportEnabled());
});
server.doOnInitialized(this::serverInitialized);
server.onShutdown(this::shutdown);
}
public void serverInitialized() {
@@ -266,7 +285,7 @@ public class SpringSymbolIndex {
for (SpringIndexer indexer : this.indexer) {
if (indexer.isInterestedIn(docURI)) {
Optional<IJavaProject> maybeProject = projectFinder.find(new TextDocumentIdentifier(docURI));
Optional<IJavaProject> maybeProject = projectFinder().find(new TextDocumentIdentifier(docURI));
if (maybeProject.isPresent()) {
try {
@@ -289,13 +308,17 @@ public class SpringSymbolIndex {
}
}
private JavaProjectFinder projectFinder() {
return params.projectFinder;
}
public CompletableFuture<Void> updateDocument(String docURI, String content) {
synchronized(this) {
List<CompletableFuture<Void>> futures = new ArrayList<>();
for (SpringIndexer indexer : this.indexer) {
if (indexer.isInterestedIn(docURI)) {
Optional<IJavaProject> maybeProject = projectFinder.find(new TextDocumentIdentifier(docURI));
Optional<IJavaProject> maybeProject = projectFinder().find(new TextDocumentIdentifier(docURI));
if (maybeProject.isPresent()) {
try {
File file = new File(new URI(docURI));
@@ -321,7 +344,7 @@ public class SpringSymbolIndex {
public CompletableFuture<Void> deleteDocument(String deletedDocURI) {
synchronized(this) {
try {
Optional<IJavaProject> maybeProject = projectFinder.find(new TextDocumentIdentifier(deletedDocURI));
Optional<IJavaProject> maybeProject = projectFinder().find(new TextDocumentIdentifier(deletedDocURI));
if (maybeProject.isPresent()) {
DeleteItem deleteItem = new DeleteItem(maybeProject.get(), deletedDocURI, this.indexer);
return CompletableFuture.runAsync(deleteItem, this.updateQueue);
@@ -674,7 +697,5 @@ public class SpringSymbolIndex {
}
}
}
}
}

View File

@@ -0,0 +1,75 @@
/*******************************************************************************
* Copyright (c) 2019 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
* https://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.app;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ide.vscode.boot.java.Annotations;
import org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchyAwareLookup;
import org.springframework.ide.vscode.boot.java.beans.BeansSymbolProvider;
import org.springframework.ide.vscode.boot.java.beans.ComponentSymbolProvider;
import org.springframework.ide.vscode.boot.java.data.DataRepositorySymbolProvider;
import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingSymbolProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.WebfluxRouterSymbolProvider;
import org.springframework.ide.vscode.boot.java.utils.RestrictedDefaultSymbolProvider;
import org.springframework.ide.vscode.boot.java.utils.SymbolCache;
@Configuration
public class SpringSymbolIndexerConfig {
@Bean
AnnotationHierarchyAwareLookup<SymbolProvider> symbolProviders(SymbolCache cache) {
AnnotationHierarchyAwareLookup<SymbolProvider> providers = new AnnotationHierarchyAwareLookup<>();
RequestMappingSymbolProvider requestMappingSymbolProvider = new RequestMappingSymbolProvider();
BeansSymbolProvider beansSymbolProvider = new BeansSymbolProvider();
ComponentSymbolProvider componentSymbolProvider = new ComponentSymbolProvider();
RestrictedDefaultSymbolProvider restrictedDefaultSymbolProvider = new RestrictedDefaultSymbolProvider();
DataRepositorySymbolProvider dataRepositorySymbolProvider = new DataRepositorySymbolProvider();
WebfluxRouterSymbolProvider webfluxRouterSymbolProvider = new WebfluxRouterSymbolProvider();
providers.put(Annotations.SPRING_REQUEST_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_GET_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_POST_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_PUT_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_DELETE_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_PATCH_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.BEAN, beansSymbolProvider);
providers.put(Annotations.COMPONENT, componentSymbolProvider);
providers.put(Annotations.PROFILE, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_BEAN, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_MISSING_BEAN, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_PROPERTY, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_RESOURCE, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_CLASS, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_MISSING_CLASS, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_CLOUD_PLATFORM, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_WEB_APPLICATION, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_NOT_WEB_APPLICATION, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_INFO_CONTRIBUTOR, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_RESOURCE_CHAIN, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_ENDPOINT, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_HEALTH_INDICATOR, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_EXPRESSION, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_JAVA, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_JNDI, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_SINGLE_CANDIDATE, restrictedDefaultSymbolProvider);
providers.put(Annotations.REPOSITORY, dataRepositorySymbolProvider);
providers.put("", webfluxRouterSymbolProvider);
return providers;
}
}

View File

@@ -17,18 +17,15 @@ import java.util.Map;
import java.util.Set;
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.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchyAwareLookup;
import org.springframework.ide.vscode.boot.java.autowired.AutowiredHoverProvider;
import org.springframework.ide.vscode.boot.java.beans.BeansSymbolProvider;
import org.springframework.ide.vscode.boot.java.beans.ComponentSymbolProvider;
import org.springframework.ide.vscode.boot.java.conditionals.ConditionalsLiveHoverProvider;
import org.springframework.ide.vscode.boot.java.data.DataRepositoryCompletionProcessor;
import org.springframework.ide.vscode.boot.java.data.DataRepositorySymbolProvider;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCodeLensEngine;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCompletionEngine;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaDocumentHighlightEngine;
@@ -42,26 +39,21 @@ import org.springframework.ide.vscode.boot.java.handlers.HighlightProvider;
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.links.SourceLinks;
import org.springframework.ide.vscode.boot.java.livehover.ActiveProfilesProvider;
import org.springframework.ide.vscode.boot.java.livehover.BeanInjectedIntoHoverProvider;
import org.springframework.ide.vscode.boot.java.livehover.ComponentInjectionsHoverProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.LiveAppURLSymbolProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingHoverProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingSymbolProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.WebfluxHandlerCodeLensProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.WebfluxRouteHighlightProdivder;
import org.springframework.ide.vscode.boot.java.requestmapping.WebfluxRouterSymbolProvider;
import org.springframework.ide.vscode.boot.java.scope.ScopeCompletionProcessor;
import org.springframework.ide.vscode.boot.java.snippets.JavaSnippet;
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.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;
@@ -100,13 +92,13 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
// Do not add more components here. You should instead just make your new
// components into separate beans.
private static final Set<LanguageId> LANGUAGES = ImmutableSet.of(LanguageId.JAVA, LanguageId.XML);
public static final Set<LanguageId> LANGUAGES = ImmutableSet.of(LanguageId.JAVA, LanguageId.XML);
private static final Logger log = LoggerFactory.getLogger(BootJavaLanguageServerComponents.class);
private final SimpleLanguageServer server;
private final BootLanguageServerParams serverParams;
private final SpringSymbolIndex indexer;
// private final SpringSymbolIndex indexer;
private final SpringPropertyIndexProvider propertyIndexProvider;
private final ProjectBasedPropertyIndexProvider adHocPropertyIndexProvider;
private final SpringLiveHoverWatchdog liveHoverWatchdog;
@@ -126,7 +118,8 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
CompilationUnitCache cuCache,
ProjectBasedPropertyIndexProvider adHocIndexProvider,
SymbolCache symbolCache,
BootJavaConfig config
BootJavaConfig config,
SpringSymbolIndex indexer
) {
this.server = server;
this.serverParams = serverParams;
@@ -144,17 +137,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
ReferencesHandler referencesHandler = createReferenceHandler(server, projectFinder);
documents.onReferences(referencesHandler);
this.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
if (getInterestingLanguages().contains(document.getLanguageId())) {
String docURI = document.getId().getUri();
String content = document.get();
indexer.updateDocument(docURI, content);
}
});
documents.onDocumentSymbol(new BootJavaDocumentSymbolHandler(indexer));
workspaceService.onWorkspaceSymbol(new BootJavaWorkspaceSymbolHandler(indexer,
@@ -201,10 +183,10 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
serverParams.watchDogInterval,
sourceLinks);
codeLensHandler = createCodeLensEngine();
codeLensHandler = createCodeLensEngine(indexer);
documents.onCodeLens(codeLensHandler);
highlightsEngine = createDocumentHighlightEngine();
highlightsEngine = createDocumentHighlightEngine(indexer);
documents.onDocumentHighlight(highlightsEngine);
config.addListener(ignore -> {
@@ -215,8 +197,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
liveHoverWatchdog.disableHighlights();
}
indexer.configureIndexer(config.isSpringXMLSupportEnabled());
// live change detection watchdog
if (config.isChangeDetectionEnabled()) {
liveChangeDetectionWatchdog.enableHighlights();
@@ -226,7 +206,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
}
});
server.onInitialize(this::initialize);
server.doOnInitialized(this::initialized);
server.onShutdown(this::shutdown);
}
@@ -253,26 +232,13 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
return highlightsEngine;
}
private void initialize(InitializeParams params) {
// this.indexer.initialize(server.getWorkspaceRoots());
}
private void initialized() {
this.indexer.serverInitialized();
this.liveChangeDetectionWatchdog.start();
// TODO: due to a missing message from lsp4e this "initialized" is not called in
// the LSP4E case
// if this gets fixed, the code should move here (from "initialize" above)
// this.indexer.initialize(this.getWorkspaceRoot());
// this.liveHoverWatchdog.start();
}
private void shutdown() {
this.liveHoverWatchdog.shutdown();
this.liveChangeDetectionWatchdog.shutdown();
this.indexer.shutdown();
this.cuCache.dispose();
}
@@ -382,52 +348,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
return new BootJavaHoverProvider(this, javaProjectFinder, providers, runningAppProvider);
}
public SpringSymbolIndex createAnnotationIndexer(SimpleLanguageServer server, BootLanguageServerParams params, SymbolCache cache) {
AnnotationHierarchyAwareLookup<SymbolProvider> providers = new AnnotationHierarchyAwareLookup<>();
RequestMappingSymbolProvider requestMappingSymbolProvider = new RequestMappingSymbolProvider();
BeansSymbolProvider beansSymbolProvider = new BeansSymbolProvider();
ComponentSymbolProvider componentSymbolProvider = new ComponentSymbolProvider();
RestrictedDefaultSymbolProvider restrictedDefaultSymbolProvider = new RestrictedDefaultSymbolProvider();
DataRepositorySymbolProvider dataRepositorySymbolProvider = new DataRepositorySymbolProvider();
WebfluxRouterSymbolProvider webfluxRouterSymbolProvider = new WebfluxRouterSymbolProvider();
providers.put(Annotations.SPRING_REQUEST_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_GET_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_POST_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_PUT_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_DELETE_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.SPRING_PATCH_MAPPING, requestMappingSymbolProvider);
providers.put(Annotations.BEAN, beansSymbolProvider);
providers.put(Annotations.COMPONENT, componentSymbolProvider);
providers.put(Annotations.PROFILE, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_BEAN, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_MISSING_BEAN, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_PROPERTY, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_RESOURCE, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_CLASS, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_MISSING_CLASS, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_CLOUD_PLATFORM, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_WEB_APPLICATION, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_NOT_WEB_APPLICATION, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_INFO_CONTRIBUTOR, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_RESOURCE_CHAIN, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_ENDPOINT, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_ENABLED_HEALTH_INDICATOR, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_EXPRESSION, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_JAVA, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_JNDI, restrictedDefaultSymbolProvider);
providers.put(Annotations.CONDITIONAL_ON_SINGLE_CANDIDATE, restrictedDefaultSymbolProvider);
providers.put(Annotations.REPOSITORY, dataRepositorySymbolProvider);
providers.put("", webfluxRouterSymbolProvider);
return new SpringSymbolIndex(server, params, providers, cache);
}
protected ReferencesHandler createReferenceHandler(SimpleLanguageServer server, JavaProjectFinder projectFinder) {
Map<String, ReferenceProvider> providers = new HashMap<>();
providers.put(org.springframework.ide.vscode.boot.java.value.Constants.SPRING_VALUE,
@@ -436,16 +356,16 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
return new BootJavaReferencesHandler(this, projectFinder, providers);
}
protected BootJavaCodeLensEngine createCodeLensEngine() {
protected BootJavaCodeLensEngine createCodeLensEngine(SpringSymbolIndex index) {
Collection<CodeLensProvider> codeLensProvider = new ArrayList<>();
codeLensProvider.add(new WebfluxHandlerCodeLensProvider(this));
codeLensProvider.add(new WebfluxHandlerCodeLensProvider(index));
return new BootJavaCodeLensEngine(this, codeLensProvider);
}
protected BootJavaDocumentHighlightEngine createDocumentHighlightEngine() {
protected BootJavaDocumentHighlightEngine createDocumentHighlightEngine(SpringSymbolIndex indexer) {
Collection<HighlightProvider> highlightProvider = new ArrayList<>();
highlightProvider.add(new WebfluxRouteHighlightProdivder(this));
highlightProvider.add(new WebfluxRouteHighlightProdivder(indexer));
return new BootJavaDocumentHighlightEngine(this, highlightProvider);
}
@@ -458,10 +378,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
return projectFinder;
}
public SpringSymbolIndex getSpringSymbolIndex() {
return indexer;
}
public SpringPropertyIndexProvider getSpringPropertyIndexProvider() {
return propertyIndexProvider;
}

View File

@@ -14,7 +14,7 @@ import java.util.List;
import org.eclipse.lsp4j.DocumentSymbolParams;
import org.eclipse.lsp4j.SymbolInformation;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
/**

View File

@@ -14,8 +14,8 @@ import java.util.List;
import org.eclipse.lsp4j.SymbolInformation;
import org.eclipse.lsp4j.WorkspaceSymbolParams;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.java.requestmapping.LiveAppURLSymbolProvider;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.languageserver.util.WorkspaceSymbolHandler;
/**

View File

@@ -18,10 +18,10 @@ import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.lsp4j.CodeLens;
import org.eclipse.lsp4j.Command;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents;
import org.springframework.ide.vscode.boot.java.handlers.CodeLensProvider;
import org.springframework.ide.vscode.boot.java.handlers.SymbolAddOnInformation;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.util.BadLocationException;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
@@ -32,8 +32,8 @@ public class WebfluxHandlerCodeLensProvider implements CodeLensProvider {
private final SpringSymbolIndex springIndexer;
public WebfluxHandlerCodeLensProvider(BootJavaLanguageServerComponents bootJavaLanguageServerComponents) {
this.springIndexer = bootJavaLanguageServerComponents.getSpringSymbolIndex();
public WebfluxHandlerCodeLensProvider(SpringSymbolIndex springIndexer) {
this.springIndexer = springIndexer;
}
@Override

View File

@@ -17,9 +17,8 @@ import org.eclipse.lsp4j.DocumentHighlight;
import org.eclipse.lsp4j.Position;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.java.handlers.HighlightProvider;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
/**
@@ -31,8 +30,8 @@ public class WebfluxRouteHighlightProdivder implements HighlightProvider {
private final SpringSymbolIndex springIndexer;
public WebfluxRouteHighlightProdivder(BootJavaLanguageServerComponents bootJavaLanguageServerComponents) {
this.springIndexer = bootJavaLanguageServerComponents.getSpringSymbolIndex();
public WebfluxRouteHighlightProdivder(SpringSymbolIndex indexer) {
this.springIndexer = indexer;
}
@Override

View File

@@ -15,11 +15,11 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.BootLanguageServerInitializer;
import org.springframework.ide.vscode.boot.app.BootLanguageServerParams;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.editor.harness.PropertyIndexHarness;
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.SymbolCache;
import org.springframework.ide.vscode.boot.java.utils.SymbolCacheVoid;
import org.springframework.ide.vscode.boot.metadata.DefaultSpringPropertyIndexProvider;
@@ -53,10 +53,6 @@ public class SymbolProviderTestConf {
return BootLanguageServerParams.createTestDefault(server, valueProviders);
}
@Bean SpringSymbolIndex springSymbolIndex(BootLanguageServerInitializer serverInit) {
return serverInit.getComponents().get(BootJavaLanguageServerComponents.class).getSpringSymbolIndex();
}
@Bean DefaultSpringPropertyIndexProvider indexProvider(BootLanguageServerParams serverParams) {
return (DefaultSpringPropertyIndexProvider) serverParams.indexProvider;
}

View File

@@ -21,9 +21,9 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.BootLanguageServerInitializer;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
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;

View File

@@ -20,9 +20,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
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;

View File

@@ -22,7 +22,7 @@ import java.util.List;
import org.apache.commons.io.IOUtils;
import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.SymbolInformation;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
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.Editor;

View File

@@ -26,9 +26,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
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;

View File

@@ -26,9 +26,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
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;

View File

@@ -29,9 +29,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
import org.springframework.ide.vscode.languageserver.testharness.TextDocumentInfo;

View File

@@ -28,11 +28,11 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.handlers.SymbolAddOnInformation;
import org.springframework.ide.vscode.boot.java.requestmapping.WebfluxHandlerInformation;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.util.Assert;
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;

View File

@@ -25,9 +25,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.util.UriUtil;
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;

View File

@@ -26,9 +26,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;

View File

@@ -30,9 +30,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.util.Assert;

View File

@@ -26,9 +26,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.java.utils.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;