From db780c0479815585e68d230c4fd8ef34a9e9c07e Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Fri, 3 May 2019 13:09:00 +0200 Subject: [PATCH] disable XML content-assist if overall XML support is disabled via user configuration --- .../boot/ls/xml/XMLContentAssistProposalComputer.java | 10 ++++++++++ .../vscode/boot/app/BootLanguageServerInitializer.java | 2 +- .../ide/vscode/boot/xml/SpringXMLCompletionEngine.java | 10 +++++++++- .../boot/xml/SpringXMLLanguageServerComponents.java | 6 ++++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/xml/XMLContentAssistProposalComputer.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/xml/XMLContentAssistProposalComputer.java index f5a284589..fd0cc64ad 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/xml/XMLContentAssistProposalComputer.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/xml/XMLContentAssistProposalComputer.java @@ -24,6 +24,8 @@ import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.lsp4e.operations.completion.LSContentAssistProcessor; import org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext; import org.eclipse.wst.sse.ui.contentassist.IAsyncCompletionProposalComputer; +import org.springframework.tooling.boot.ls.BootLanguageServerPlugin; +import org.springframework.tooling.boot.ls.Constants; /** * @author Martin Lippert @@ -42,6 +44,10 @@ public class XMLContentAssistProposalComputer implements IAsyncCompletionProposa @Override public List computeCompletionProposals(CompletionProposalInvocationContext context, IProgressMonitor monitor) { + if (!BootLanguageServerPlugin.getDefault().getPreferenceStore().getBoolean(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS)) { + return Collections.emptyList(); + } + CompletableFuture future = CompletableFuture.supplyAsync(() -> { return lsContentAssistProcessor.computeCompletionProposals(context.getViewer(), context.getInvocationOffset()); }); @@ -56,6 +62,10 @@ public class XMLContentAssistProposalComputer implements IAsyncCompletionProposa @Override public List computeContextInformation(CompletionProposalInvocationContext context, IProgressMonitor monitor) { + if (!BootLanguageServerPlugin.getDefault().getPreferenceStore().getBoolean(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS)) { + return Collections.emptyList(); + } + IContextInformation[] contextInformation = lsContentAssistProcessor.computeContextInformation(context.getViewer(), context.getInvocationOffset()); return Arrays.asList(contextInformation); } 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 576258244..09e6dd9da 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 @@ -79,7 +79,7 @@ public class BootLanguageServerInitializer implements InitializingBean { 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, springIndexer, runningAppProvider)); - builder.add(new SpringXMLLanguageServerComponents(server, springIndexer, params)); + builder.add(new SpringXMLLanguageServerComponents(server, springIndexer, params, 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/xml/SpringXMLCompletionEngine.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLCompletionEngine.java index 5ae8e9ac8..efde81710 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLCompletionEngine.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLCompletionEngine.java @@ -22,6 +22,7 @@ import org.eclipse.lsp4xml.dom.DOMParser; import org.eclipse.lsp4xml.dom.parser.Scanner; import org.eclipse.lsp4xml.dom.parser.TokenType; import org.eclipse.lsp4xml.dom.parser.XMLScanner; +import org.springframework.ide.vscode.boot.app.BootJavaConfig; import org.springframework.ide.vscode.boot.app.SpringSymbolIndex; import org.springframework.ide.vscode.boot.xml.completions.BeanRefCompletionProposalProvider; import org.springframework.ide.vscode.boot.xml.completions.PropertyNameCompletionProposalProvider; @@ -47,10 +48,13 @@ public class SpringXMLCompletionEngine implements ICompletionEngine { private static final String REF_ATTRIBUTE = "ref"; private final Map completionProviders; + private final BootJavaConfig config; public SpringXMLCompletionEngine(SpringXMLLanguageServerComponents springXMLLanguageServerComponents, - JavaProjectFinder projectFinder, SpringSymbolIndex symbolIndex, SimpleTextDocumentService simpleTextDocumentService) { + JavaProjectFinder projectFinder, SpringSymbolIndex symbolIndex, SimpleTextDocumentService simpleTextDocumentService, BootJavaConfig config) { + this.config = config; + this.completionProviders = new HashMap<>(); this.completionProviders.put(new XMLCompletionProviderKey(BEANS_NAMESPACE, null, BEAN_ELEMENT, CLASS_ATTRIBUTE), new TypeCompletionProposalProvider(projectFinder, simpleTextDocumentService, true)); this.completionProviders.put(new XMLCompletionProviderKey(BEANS_NAMESPACE, BEAN_ELEMENT, PROPERTY_ELEMENT, NAME_ATTRIBUTE), new PropertyNameCompletionProposalProvider(projectFinder)); @@ -59,6 +63,10 @@ public class SpringXMLCompletionEngine implements ICompletionEngine { @Override public Collection getCompletions(TextDocument doc, int offset) throws Exception { + if (!config.isSpringXMLSupportEnabled()) { + return Collections.emptyList(); + } + String content = doc.get(); DOMParser parser = DOMParser.getInstance(); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java index ce9d8767c..42d28fdc5 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java @@ -14,6 +14,7 @@ import java.util.Set; 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.commons.languageserver.completion.ICompletionEngine; @@ -43,7 +44,8 @@ public class SpringXMLLanguageServerComponents implements LanguageServerComponen public SpringXMLLanguageServerComponents( SimpleLanguageServer server, SpringSymbolIndex springIndexer, - BootLanguageServerParams serverParams) { + BootLanguageServerParams serverParams, + BootJavaConfig config) { this.server = server; this.serverParams = serverParams; @@ -53,7 +55,7 @@ public class SpringXMLLanguageServerComponents implements LanguageServerComponen server.doOnInitialized(this::initialized); server.onShutdown(this::shutdown); - this.completionEngine = new SpringXMLCompletionEngine(this, projectFinder, symbolIndex, server.getTextDocumentService()); + this.completionEngine = new SpringXMLCompletionEngine(this, projectFinder, symbolIndex, server.getTextDocumentService(), config); } @Override