System property to disable lazy completion items

This commit is contained in:
Kris De Volder
2017-07-20 09:27:03 -07:00
parent e53e08271c
commit 2ceaff0d07
7 changed files with 28 additions and 38 deletions

View File

@@ -58,7 +58,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
});
ICompletionEngine bootCompletionEngine = new BootJavaCompletionEngine(javaProjectFinder, indexProvider);
completionEngine = new VscodeCompletionEngineAdapter(this, bootCompletionEngine);
completionEngine = createCompletionEngineAdapter(this, bootCompletionEngine);
completionEngine.setMaxCompletions(100);
documents.onCompletion(completionEngine::getCompletions);
documents.onCompletionResolve(completionEngine::resolveCompletion);

View File

@@ -112,7 +112,7 @@ public class BootPropertiesLanguageServer extends SimpleLanguageServer {
});
ICompletionEngine propertiesCompletionEngine = getCompletionEngine();
completionEngine = new VscodeCompletionEngineAdapter(this, propertiesCompletionEngine);
completionEngine = createCompletionEngineAdapter(this, propertiesCompletionEngine);
completionEngine.setMaxCompletions(100);
documents.onCompletion(completionEngine::getCompletions);
documents.onCompletionResolve(completionEngine::resolveCompletion);

View File

@@ -13,7 +13,6 @@ package org.springframework.ide.vscode.bosh;
import org.springframework.ide.vscode.bosh.models.CloudConfigModel;
import org.springframework.ide.vscode.bosh.models.DynamicModelProvider;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter.LazyCompletionResolver;
import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider;
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngine;
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter;
@@ -36,7 +35,6 @@ import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvid
public class BoshLanguageServer extends SimpleLanguageServer {
private final LazyCompletionResolver completionResolver = new LazyCompletionResolver(); //Set to null to disable lazy resolving
private final VscodeCompletionEngineAdapter completionEngine;
public BoshLanguageServer(DynamicModelProvider<CloudConfigModel> cloudConfigProvider) {
@@ -50,8 +48,7 @@ public class BoshLanguageServer extends SimpleLanguageServer {
YamlStructureProvider structureProvider = YamlStructureProvider.DEFAULT;
YamlAssistContextProvider contextProvider = new SchemaBasedYamlAssistContextProvider(schema);
YamlCompletionEngine yamlCompletionEngine = new YamlCompletionEngine(structureProvider, contextProvider, YamlCompletionEngineOptions.DEFAULT);
completionEngine = new VscodeCompletionEngineAdapter(this, yamlCompletionEngine);
completionEngine.setLazyCompletionResolver(completionResolver);
completionEngine = createCompletionEngineAdapter(this, yamlCompletionEngine);
HoverInfoProvider infoProvider = new YamlHoverInfoProvider(asts.getAstProvider(true), structureProvider, contextProvider);
VscodeHoverEngine hoverEngine = new VscodeHoverEngineAdapter(this, infoProvider);
YamlQuickfixes quickfixes = new YamlQuickfixes(getQuickfixRegistry(), getTextDocumentService(), structureProvider);
@@ -68,6 +65,7 @@ public class BoshLanguageServer extends SimpleLanguageServer {
documents.onDefinition(new BoshDefintionFinder(this, schema, asts, astTypeCache));
}
private void validateOnDocumentChange(IReconcileEngine engine, TextDocument doc) {
if (LanguageId.BOSH_DEPLOYMENT.equals(doc.getLanguageId())) {
validateWith(doc.getId(), engine);
@@ -76,11 +74,6 @@ public class BoshLanguageServer extends SimpleLanguageServer {
}
}
@Override
public boolean hasLazyCompletionResolver() {
return completionResolver!=null;
}
public BoshLanguageServer setMaxCompletions(int maxCompletions) {
completionEngine.setMaxCompletions(maxCompletions);
return this;

View File

@@ -72,6 +72,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine {
if (id!=null) {
Consumer<CompletionItem> resolver = resolvers.get(id);
if (resolver!=null) {
Log.info("Resolving lazy completion item: "+unresolved.getLabel());
resolver.accept(unresolved);
unresolved.setData(null); //No longer needed after item is resolved.
} else {
@@ -91,12 +92,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine {
private SimpleLanguageServer server;
private ICompletionEngine engine;
private LazyCompletionResolver resolver = null;
public VscodeCompletionEngineAdapter(SimpleLanguageServer server, ICompletionEngine engine) {
this.server = server;
this.engine = engine;
}
private final LazyCompletionResolver resolver;
/**
* By setting a non-null {@link LazyCompletionResolver} you can enable lazy completion resolution.
@@ -105,7 +101,9 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine {
* The resolver is injected rather than created locally to allow sharing it between multiple
* engines.
*/
public void setLazyCompletionResolver(LazyCompletionResolver resolver) {
public VscodeCompletionEngineAdapter(SimpleLanguageServer server, ICompletionEngine engine, LazyCompletionResolver resolver) {
this.server = server;
this.engine = engine;
this.resolver = resolver;
}

View File

@@ -39,6 +39,9 @@ import org.eclipse.lsp4j.services.LanguageServer;
import org.springframework.ide.vscode.commons.languageserver.ProgressParams;
import org.springframework.ide.vscode.commons.languageserver.ProgressService;
import org.springframework.ide.vscode.commons.languageserver.STS4LanguageClient;
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter.LazyCompletionResolver;
import org.springframework.ide.vscode.commons.languageserver.quickfix.Quickfix;
import org.springframework.ide.vscode.commons.languageserver.quickfix.Quickfix.QuickfixData;
import org.springframework.ide.vscode.commons.languageserver.quickfix.QuickfixEdit;
@@ -72,6 +75,7 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl
public final String EXTENSION_ID;
private final String CODE_ACTION_COMMAND_ID;
protected final LazyCompletionResolver completionResolver = createCompletionResolver();
private Path workspaceRoot;
@@ -103,6 +107,17 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl
this.client = (STS4LanguageClient) _client;
}
protected VscodeCompletionEngineAdapter createCompletionEngineAdapter(SimpleLanguageServer server, ICompletionEngine engine) {
return new VscodeCompletionEngineAdapter(server, engine, completionResolver);
}
protected LazyCompletionResolver createCompletionResolver() {
if (!Boolean.getBoolean("lsp.lazy.completions.disable")) {
return new LazyCompletionResolver();
}
return null;
}
protected synchronized QuickfixRegistry getQuickfixRegistry() {
if (quickfixRegistry==null) {
quickfixRegistry = new QuickfixRegistry();
@@ -233,8 +248,8 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl
return c;
}
public boolean hasLazyCompletionResolver() {
return false;
public final boolean hasLazyCompletionResolver() {
return completionResolver!=null;
}
private boolean hasDocumentSymbolHandler() {

View File

@@ -16,7 +16,6 @@ import java.util.concurrent.CompletableFuture;
import org.eclipse.lsp4j.CompletionList;
import org.eclipse.lsp4j.DiagnosticSeverity;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter.LazyCompletionResolver;
import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider;
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter;
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
@@ -53,7 +52,6 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
private SchemaSpecificPieces forPipelines;
private SchemaSpecificPieces forTasks;
private final YamlQuickfixes yamlQuickfixes;
private final LazyCompletionResolver completionResolver = new LazyCompletionResolver(); //Set this to null to disable lazy completion resolving
private class SchemaSpecificPieces {
@@ -65,8 +63,7 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
SchemaSpecificPieces(YamlSchema schema, List<YType> definitionTypes) {
SchemaBasedYamlAssistContextProvider contextProvider = new SchemaBasedYamlAssistContextProvider(schema);
YamlCompletionEngine yamlCompletionEngine = new YamlCompletionEngine(structureProvider, contextProvider, COMPLETION_OPTIONS);
this.completionEngine = new VscodeCompletionEngineAdapter(ConcourseLanguageServer.this, yamlCompletionEngine);
this.completionEngine.setLazyCompletionResolver(completionResolver);
this.completionEngine = createCompletionEngineAdapter(ConcourseLanguageServer.this, yamlCompletionEngine);
HoverInfoProvider infoProvider = new YamlHoverInfoProvider(currentAsts, structureProvider, contextProvider);
this.hoverEngine = new VscodeHoverEngineAdapter(ConcourseLanguageServer.this, infoProvider);
@@ -84,11 +81,6 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
}
}
@Override
public boolean hasLazyCompletionResolver() {
return completionResolver!=null;
}
public ConcourseLanguageServer(YamlCompletionEngineOptions completionOptions) {
super("vscode-concourse");
this.COMPLETION_OPTIONS = completionOptions;

View File

@@ -31,7 +31,6 @@ import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.Clien
import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.NoTargetsException;
import org.springframework.ide.vscode.commons.cloudfoundry.client.v2.DefaultCloudFoundryClientFactoryV2;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter;
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter.LazyCompletionResolver;
import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider;
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngine;
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter;
@@ -65,7 +64,6 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer {
private CFTargetCache cfTargetCache;
private final CloudFoundryClientFactory cfClientFactory;
private final CfClientConfig cfClientConfig;
private final LazyCompletionResolver completionResolver = new LazyCompletionResolver(); //Set to null to disable lazy resolving
private final ImmutableSet<LanguageId> FALLBACK_YML_IDS = ImmutableSet.of(LanguageId.of("yml"), LanguageId.of("yaml"));
final private ClientParamsProvider defaultClientParamsProvider;
@@ -89,8 +87,7 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer {
YamlStructureProvider structureProvider = YamlStructureProvider.DEFAULT;
YamlAssistContextProvider contextProvider = new SchemaBasedYamlAssistContextProvider(schema);
YamlCompletionEngine yamlCompletionEngine = new YamlCompletionEngine(structureProvider, contextProvider, YamlCompletionEngineOptions.DEFAULT);
VscodeCompletionEngineAdapter completionEngine = new VscodeCompletionEngineAdapter(this, yamlCompletionEngine);
completionEngine.setLazyCompletionResolver(completionResolver);
VscodeCompletionEngineAdapter completionEngine = createCompletionEngineAdapter(this, yamlCompletionEngine);
HoverInfoProvider infoProvider = new YamlHoverInfoProvider(parser, structureProvider, contextProvider);
VscodeHoverEngine hoverEngine = new VscodeHoverEngineAdapter(this, infoProvider);
YamlQuickfixes quickfixes = new YamlQuickfixes(getQuickfixRegistry(), getTextDocumentService(), structureProvider);
@@ -222,11 +219,6 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer {
};
}
@Override
public boolean hasLazyCompletionResolver() {
return completionResolver!=null;
}
private CFTargetCache getCfTargetCache() {
if (cfTargetCache == null) {
// Init CF client params provider if it's initilized