Reorganize how server capabilites are determined in SimpleLanguageServer
Compute it based on registered handlers and quickfixes.instead of handcrafting it for every subclass.
This commit is contained in:
@@ -10,9 +10,6 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java;
|
||||
|
||||
import org.eclipse.lsp4j.CompletionOptions;
|
||||
import org.eclipse.lsp4j.ServerCapabilities;
|
||||
import org.eclipse.lsp4j.TextDocumentSyncKind;
|
||||
import org.springframework.ide.vscode.boot.java.completions.BootJavaCompletionEngine;
|
||||
import org.springframework.ide.vscode.boot.java.completions.BootJavaReconcileEngine;
|
||||
import org.springframework.ide.vscode.boot.java.hover.BootJavaHoverProvider;
|
||||
@@ -37,11 +34,11 @@ import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
|
||||
/**
|
||||
* Language Server for Spring Boot Application Properties files
|
||||
*
|
||||
*
|
||||
* @author Martin Lippert
|
||||
*/
|
||||
public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
|
||||
|
||||
public static final JavaProjectFinder DEFAULT_PROJECT_FINDER = new DefaultJavaProjectFinder(new IJavaProjectFinderStrategy[] {
|
||||
new MavenProjectFinderStrategy(MavenCore.getDefault()),
|
||||
new GradleProjectFinderStrategy(GradleCore.getDefault()),
|
||||
@@ -49,7 +46,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
});
|
||||
|
||||
private final VscodeCompletionEngineAdapter completionEngine;
|
||||
|
||||
|
||||
public BootJavaLanguageServer(JavaProjectFinder javaProjectFinder, SpringPropertyIndexProvider indexProvider) {
|
||||
SimpleTextDocumentService documents = getTextDocumentService();
|
||||
|
||||
@@ -58,7 +55,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
TextDocument doc = params.getDocument();
|
||||
validateWith(doc, reconcileEngine);
|
||||
});
|
||||
|
||||
|
||||
ICompletionEngine bootCompletionEngine = new BootJavaCompletionEngine(javaProjectFinder, indexProvider);
|
||||
completionEngine = new VscodeCompletionEngineAdapter(this, bootCompletionEngine);
|
||||
completionEngine.setMaxCompletionsNumber(100);
|
||||
@@ -67,7 +64,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
|
||||
HoverHandler hoverInfoProvider = new BootJavaHoverProvider(this, javaProjectFinder);
|
||||
documents.onHover(hoverInfoProvider);
|
||||
|
||||
|
||||
ReferencesHandler referencesHandler = new BootJavaReferencesHandler(this, javaProjectFinder);
|
||||
documents.onReferences(referencesHandler);
|
||||
}
|
||||
@@ -75,19 +72,5 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
public void setMaxCompletionsNumber(int number) {
|
||||
completionEngine.setMaxCompletionsNumber(number);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServerCapabilities getServerCapabilities() {
|
||||
ServerCapabilities c = new ServerCapabilities();
|
||||
|
||||
c.setTextDocumentSync(TextDocumentSyncKind.Incremental);
|
||||
CompletionOptions completionProvider = new CompletionOptions();
|
||||
completionProvider.setResolveProvider(false);
|
||||
c.setCompletionProvider(completionProvider);
|
||||
c.setHoverProvider(true);
|
||||
c.setReferencesProvider(true);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot;
|
||||
|
||||
import org.eclipse.lsp4j.CompletionOptions;
|
||||
import org.eclipse.lsp4j.ServerCapabilities;
|
||||
import org.eclipse.lsp4j.TextDocumentSyncKind;
|
||||
import org.springframework.ide.vscode.boot.common.PropertyCompletionFactory;
|
||||
import org.springframework.ide.vscode.boot.common.RelaxedNameConfig;
|
||||
import org.springframework.ide.vscode.boot.metadata.PropertyInfo;
|
||||
@@ -56,12 +53,12 @@ import com.google.common.collect.ImmutableList;
|
||||
|
||||
/**
|
||||
* Language Server for Spring Boot Application Properties files
|
||||
*
|
||||
*
|
||||
* @author Alex Boyko
|
||||
*
|
||||
*/
|
||||
public class BootPropertiesLanguageServer extends SimpleLanguageServer {
|
||||
|
||||
|
||||
public static final JavaProjectFinder DEFAULT_PROJECT_FINDER = new DefaultJavaProjectFinder(new IJavaProjectFinderStrategy[] {
|
||||
new MavenProjectFinderStrategy(MavenCore.getDefault()),
|
||||
new GradleProjectFinderStrategy(GradleCore.getDefault()),
|
||||
@@ -77,7 +74,7 @@ public class BootPropertiesLanguageServer extends SimpleLanguageServer {
|
||||
private final VscodeCompletionEngineAdapter completionEngine;
|
||||
private final VscodeHoverEngineAdapter hoverEngine;
|
||||
private final RelaxedNameConfig relaxedNameConfig = RelaxedNameConfig.COMPLETION_DEFAULTS;
|
||||
|
||||
|
||||
private final PropertyCompletionFactory completionFactory;
|
||||
|
||||
// For yaml
|
||||
@@ -85,7 +82,7 @@ public class BootPropertiesLanguageServer extends SimpleLanguageServer {
|
||||
private final YamlASTProvider parser = new YamlParser(yaml);
|
||||
private final YamlStructureProvider yamlStructureProvider= YamlStructureProvider.DEFAULT;
|
||||
private YamlAssistContextProvider yamlAssistContextProvider;
|
||||
|
||||
|
||||
public BootPropertiesLanguageServer(SpringPropertyIndexProvider indexProvider, TypeUtilProvider typeUtilProvider, JavaProjectFinder javaProjectFinder) {
|
||||
this.indexProvider = indexProvider;
|
||||
this.typeUtilProvider = typeUtilProvider;
|
||||
@@ -107,13 +104,13 @@ public class BootPropertiesLanguageServer extends SimpleLanguageServer {
|
||||
TextDocument doc = params.getDocument();
|
||||
validateWith(doc, reconcileEngine);
|
||||
});
|
||||
|
||||
|
||||
ICompletionEngine propertiesCompletionEngine = getCompletionEngine();
|
||||
completionEngine = new VscodeCompletionEngineAdapter(this, propertiesCompletionEngine);
|
||||
completionEngine.setMaxCompletionsNumber(100);
|
||||
documents.onCompletion(completionEngine::getCompletions);
|
||||
documents.onCompletionResolve(completionEngine::resolveCompletion);
|
||||
|
||||
|
||||
HoverInfoProvider hoverInfoProvider = getHoverProvider();
|
||||
hoverEngine = new VscodeHoverEngineAdapter(this, hoverInfoProvider);
|
||||
documents.onHover(hoverEngine::getHover);
|
||||
@@ -138,7 +135,7 @@ public class BootPropertiesLanguageServer extends SimpleLanguageServer {
|
||||
protected HoverInfoProvider getHoverProvider() {
|
||||
HoverInfoProvider propertiesHovers = new PropertiesHoverInfoProvider(indexProvider, typeUtilProvider, javaProjectFinder);
|
||||
HoverInfoProvider ymlHovers = new YamlHoverInfoProvider(parser, yamlStructureProvider, yamlAssistContextProvider);
|
||||
|
||||
|
||||
return (IDocument document, int offset) -> {
|
||||
String uri = document.getUri();
|
||||
if (uri!=null) {
|
||||
@@ -151,33 +148,19 @@ public class BootPropertiesLanguageServer extends SimpleLanguageServer {
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public void setMaxCompletionsNumber(int number) {
|
||||
completionEngine.setMaxCompletionsNumber(number);
|
||||
}
|
||||
|
||||
|
||||
public void setHoverType(HoverType type) {
|
||||
hoverEngine.setHoverType(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServerCapabilities getServerCapabilities() {
|
||||
ServerCapabilities c = new ServerCapabilities();
|
||||
|
||||
c.setTextDocumentSync(TextDocumentSyncKind.Incremental);
|
||||
CompletionOptions completionProvider = new CompletionOptions();
|
||||
completionProvider.setResolveProvider(false);
|
||||
c.setCompletionProvider(completionProvider);
|
||||
|
||||
c.setHoverProvider(true);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
protected IReconcileEngine getReconcileEngine() {
|
||||
IReconcileEngine propertiesReconciler = new SpringPropertiesReconcileEngine(indexProvider, typeUtilProvider);
|
||||
IReconcileEngine ymlReconciler = new ApplicationYamlReconcileEngine(parser, indexProvider, typeUtilProvider);
|
||||
|
||||
|
||||
return (doc, problemCollector) -> {
|
||||
String uri = doc.getUri();
|
||||
if (uri!=null) {
|
||||
|
||||
@@ -59,5 +59,7 @@ public class QuickfixRegistry {
|
||||
}).toFuture();
|
||||
}
|
||||
|
||||
|
||||
public boolean hasFixes() {
|
||||
return !registry.isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.eclipse.lsp4j.CompletionOptions;
|
||||
import org.eclipse.lsp4j.Diagnostic;
|
||||
import org.eclipse.lsp4j.DiagnosticSeverity;
|
||||
import org.eclipse.lsp4j.InitializeParams;
|
||||
@@ -26,6 +27,7 @@ import org.eclipse.lsp4j.MessageParams;
|
||||
import org.eclipse.lsp4j.MessageType;
|
||||
import org.eclipse.lsp4j.Range;
|
||||
import org.eclipse.lsp4j.ServerCapabilities;
|
||||
import org.eclipse.lsp4j.TextDocumentSyncKind;
|
||||
import org.eclipse.lsp4j.WorkspaceEdit;
|
||||
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest;
|
||||
import org.eclipse.lsp4j.services.LanguageClient;
|
||||
@@ -129,17 +131,52 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract ServerCapabilities getServerCapabilities();
|
||||
protected final ServerCapabilities getServerCapabilities() {
|
||||
ServerCapabilities c = new ServerCapabilities();
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Object> shutdown() {
|
||||
return CompletableFuture.completedFuture(new Object());
|
||||
}
|
||||
c.setTextDocumentSync(TextDocumentSyncKind.Incremental);
|
||||
c.setHoverProvider(true);
|
||||
|
||||
@Override
|
||||
public void exit() {
|
||||
System.exit(0);
|
||||
}
|
||||
CompletionOptions completionProvider = new CompletionOptions();
|
||||
completionProvider.setResolveProvider(false);
|
||||
c.setCompletionProvider(completionProvider);
|
||||
|
||||
if (hasQuickFixes()) {
|
||||
c.setCodeActionProvider(true);
|
||||
}
|
||||
|
||||
if (hasDefinitionHandler()) {
|
||||
c.setDefinitionProvider(true);
|
||||
}
|
||||
|
||||
if (hasReferencesHandler()) {
|
||||
c.setReferencesProvider(true);
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
private boolean hasReferencesHandler() {
|
||||
return getTextDocumentService().hasReferencesHandler();
|
||||
}
|
||||
|
||||
private boolean hasDefinitionHandler() {
|
||||
return getTextDocumentService().hasDefinitionHandler();
|
||||
}
|
||||
|
||||
private boolean hasQuickFixes() {
|
||||
return quickfixRegistry!=null && quickfixRegistry.hasFixes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Object> shutdown() {
|
||||
return CompletableFuture.completedFuture(new Object());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exit() {
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
public Path getWorkspaceRoot() {
|
||||
return workspaceRoot;
|
||||
|
||||
@@ -352,4 +352,12 @@ public class SimpleTextDocumentService implements TextDocumentService {
|
||||
return CompletableFuture.completedFuture(Collections.emptyList());
|
||||
}
|
||||
|
||||
public boolean hasDefinitionHandler() {
|
||||
return definitionHandler!=null;
|
||||
}
|
||||
|
||||
public boolean hasReferencesHandler() {
|
||||
return this.referencesHandler!=null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -147,22 +147,4 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServerCapabilities getServerCapabilities() {
|
||||
ServerCapabilities c = new ServerCapabilities();
|
||||
|
||||
c.setTextDocumentSync(TextDocumentSyncKind.Incremental);
|
||||
c.setHoverProvider(true);
|
||||
|
||||
CompletionOptions completionProvider = new CompletionOptions();
|
||||
completionProvider.setResolveProvider(false);
|
||||
c.setCompletionProvider(completionProvider);
|
||||
|
||||
c.setDefinitionProvider(true);
|
||||
|
||||
c.setCodeActionProvider(true);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,9 +13,6 @@ package org.springframework.ide.vscode.manifest.yaml;
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import org.eclipse.lsp4j.CompletionOptions;
|
||||
import org.eclipse.lsp4j.ServerCapabilities;
|
||||
import org.eclipse.lsp4j.TextDocumentSyncKind;
|
||||
import org.springframework.ide.vscode.commons.cloudfoundry.client.ClientTimeouts;
|
||||
import org.springframework.ide.vscode.commons.cloudfoundry.client.CloudFoundryClientFactory;
|
||||
import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CFTargetCache;
|
||||
@@ -46,7 +43,6 @@ import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
public class ManifestYamlLanguageServer extends SimpleLanguageServer {
|
||||
|
||||
|
||||
private Yaml yaml = new Yaml();
|
||||
private YamlSchema schema;
|
||||
private CFTargetCache cfTargetCache;
|
||||
@@ -142,17 +138,4 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer {
|
||||
return new ManifestYamlCFDomainsProvider(getCfTargetCache());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServerCapabilities getServerCapabilities() {
|
||||
ServerCapabilities c = new ServerCapabilities();
|
||||
|
||||
c.setTextDocumentSync(TextDocumentSyncKind.Incremental);
|
||||
c.setHoverProvider(true);
|
||||
|
||||
CompletionOptions completionProvider = new CompletionOptions();
|
||||
completionProvider.setResolveProvider(false);
|
||||
c.setCompletionProvider(completionProvider);
|
||||
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,17 +10,12 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.manifest.yaml;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import org.springframework.ide.vscode.commons.util.Assert;
|
||||
import org.springframework.ide.vscode.commons.util.EnumValueParser;
|
||||
import org.springframework.ide.vscode.commons.util.ValueParser;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YValueHint;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSet.Builder;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user