Fix conflict between sts.quickfix command registrations ...

... from different vscode extensions activated simultaneosly.
This commit is contained in:
Kris De Volder
2017-04-12 16:04:12 -07:00
parent 87a7026215
commit f2bc237b53
7 changed files with 20 additions and 3 deletions

View File

@@ -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();

View File

@@ -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;

View File

@@ -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)
);
}

View File

@@ -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);

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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();