Fix conflict between sts.quickfix command registrations ...
... from different vscode extensions activated simultaneosly.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -30,11 +30,14 @@ public class Quickfix<T> {
|
||||
}
|
||||
}
|
||||
|
||||
private final String QUICKFIX_COMMAND_ID;
|
||||
|
||||
private final Range range;
|
||||
private final QuickfixData<T> data;
|
||||
|
||||
public Quickfix(Range range, QuickfixData<T> data) {
|
||||
public Quickfix(String EXTENSION_ID, Range range, QuickfixData<T> data) {
|
||||
super();
|
||||
this.QUICKFIX_COMMAND_ID = "sts.quickfix."+EXTENSION_ID;
|
||||
this.range = range;
|
||||
this.data = data;
|
||||
}
|
||||
@@ -46,7 +49,7 @@ public class Quickfix<T> {
|
||||
public Command getCodeAction() {
|
||||
return new Command(
|
||||
data.title,
|
||||
"sts.quickfix",
|
||||
QUICKFIX_COMMAND_ID,
|
||||
ImmutableList.of(data.type.getId(), data.params)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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<InitializeResult> initialize(InitializeParams params) {
|
||||
// LOG.info("Initializing");
|
||||
@@ -246,7 +252,7 @@ public abstract class SimpleLanguageServer implements LanguageServer, LanguageCl
|
||||
List<QuickfixData<?>> 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);
|
||||
|
||||
@@ -278,12 +278,16 @@ public class SimpleTextDocumentService implements TextDocumentService {
|
||||
|
||||
@Override
|
||||
public CompletableFuture<List<? extends Command>> 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<? extends Command>) l);
|
||||
} else {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user