From f2bc237b531069a330a34b269bc5355ce4474458 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Wed, 12 Apr 2017 16:04:12 -0700 Subject: [PATCH] Fix conflict between sts.quickfix command registrations ... ... from different vscode extensions activated simultaneosly. --- .../ide/vscode/boot/java/BootJavaLanguageServer.java | 1 + .../ide/vscode/boot/BootPropertiesLanguageServer.java | 1 + .../vscode/commons/languageserver/quickfix/Quickfix.java | 7 +++++-- .../commons/languageserver/util/SimpleLanguageServer.java | 8 +++++++- .../languageserver/util/SimpleTextDocumentService.java | 4 ++++ .../ide/vscode/concourse/ConcourseLanguageServer.java | 1 + .../vscode/manifest/yaml/ManifestYamlLanguageServer.java | 1 + 7 files changed, 20 insertions(+), 3 deletions(-) diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java index b07e1e981..bab4d87c3 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java @@ -48,6 +48,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer { private final VscodeCompletionEngineAdapter completionEngine; public BootJavaLanguageServer(JavaProjectFinder javaProjectFinder, SpringPropertyIndexProvider indexProvider) { + super("vscode-boot-java"); SimpleTextDocumentService documents = getTextDocumentService(); IReconcileEngine reconcileEngine = new BootJavaReconcileEngine(); diff --git a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java index 2561eebfe..458d93946 100644 --- a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java +++ b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java @@ -84,6 +84,7 @@ public class BootPropertiesLanguageServer extends SimpleLanguageServer { private YamlAssistContextProvider yamlAssistContextProvider; public BootPropertiesLanguageServer(SpringPropertyIndexProvider indexProvider, TypeUtilProvider typeUtilProvider, JavaProjectFinder javaProjectFinder) { + super("vscode-boot-properties"); this.indexProvider = indexProvider; this.typeUtilProvider = typeUtilProvider; this.javaProjectFinder = javaProjectFinder; diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java index 21ff3971f..f2d65e50b 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java @@ -30,11 +30,14 @@ public class Quickfix { } } + private final String QUICKFIX_COMMAND_ID; + private final Range range; private final QuickfixData data; - public Quickfix(Range range, QuickfixData data) { + public Quickfix(String EXTENSION_ID, Range range, QuickfixData data) { super(); + this.QUICKFIX_COMMAND_ID = "sts.quickfix."+EXTENSION_ID; this.range = range; this.data = data; } @@ -46,7 +49,7 @@ public class Quickfix { public Command getCodeAction() { return new Command( data.title, - "sts.quickfix", + QUICKFIX_COMMAND_ID, ImmutableList.of(data.type.getId(), data.params) ); } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index 58aa2af0d..d95db5b21 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -64,6 +64,8 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl private static final Scheduler RECONCILER_SCHEDULER = Schedulers.newSingle("Reconciler"); + private final String EXTENSION_ID; + private Path workspaceRoot; private SimpleTextDocumentService tds; @@ -95,6 +97,10 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl return quickfixRegistry; } + public SimpleLanguageServer(String extensionId) { + this.EXTENSION_ID = extensionId; + } + @Override public CompletableFuture initialize(InitializeParams params) { // LOG.info("Initializing"); @@ -246,7 +252,7 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl List> fixes = problem.getQuickfixes(); if (CollectionUtil.hasElements(fixes)) { for (QuickfixData fix : fixes) { - quickfixes.add(new Quickfix<>(rng, fix)); + quickfixes.add(new Quickfix<>(EXTENSION_ID, rng, fix)); } } diagnostics.add(d); diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index 6084c7153..f51acf3ed 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -278,12 +278,16 @@ public class SimpleTextDocumentService implements TextDocumentService { @Override public CompletableFuture> codeAction(CodeActionParams params) { + System.out.println("codeAction "+params+" ..."); TrackedDocument doc = documents.get(params.getTextDocument().getUri()); if (doc!=null) { return Flux.fromIterable(doc.getQuickfixes()) .filter((fix) -> fix.appliesTo(params.getRange(), params.getContext())) .map(Quickfix::getCodeAction) .collectList() + .doOnNext((fixes) -> { + System.out.println("codeAction "+params+" => "+fixes); + }) .toFuture() .thenApply(l -> (List) l); } else { diff --git a/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java b/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java index 1208c5f55..cdab51a79 100644 --- a/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java +++ b/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java @@ -73,6 +73,7 @@ public class ConcourseLanguageServer extends SimpleLanguageServer { } public ConcourseLanguageServer() { + super("vscode-concourse"); PipelineYmlSchema pipelineSchema = new PipelineYmlSchema(models); this.yamlQuickfixes = new YamlQuickfixes(getQuickfixRegistry(), documents, structureProvider); diff --git a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java index df11cb914..649b14c72 100644 --- a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java +++ b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java @@ -54,6 +54,7 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer { } public ManifestYamlLanguageServer(CloudFoundryClientFactory cfClientFactory, ClientParamsProvider cfParamsProvider) { + super("vscode-manifest-yaml"); this.cfClientFactory = cfClientFactory; this.cfParamsProvider=cfParamsProvider; SimpleTextDocumentService documents = getTextDocumentService();