Skip to content

Commit a2a216f

Browse files
authored
Fix for dynamic registration of capabilities (#262)
1 parent e97ed52 commit a2a216f

4 files changed

Lines changed: 26 additions & 17 deletions

File tree

lib/extension.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,6 @@ export async function activate(context: ExtensionContext) {
2626
// Synchronize the setting section 'java' to the server
2727
// NOTE: this currently doesn't do anything
2828
configurationSection: 'java',
29-
// Notify the server about file changes to 'javaconfig.json' files contain in the workspace
30-
fileEvents: [
31-
workspace.createFileSystemWatcher('**/javaconfig.json'),
32-
workspace.createFileSystemWatcher('**/pom.xml'),
33-
workspace.createFileSystemWatcher('**/WORKSPACE'),
34-
workspace.createFileSystemWatcher('**/BUILD'),
35-
workspace.createFileSystemWatcher('**/*.java')
36-
]
3729
},
3830
outputChannelName: 'Java',
3931
revealOutputChannelOn: 4 // never

src/main/java/org/javacs/JavaLanguageServer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ private Set<Path> docPath() {
142142
}
143143
return paths;
144144
}
145+
145146
private Set<String> addExports() {
146147
if (!settings.has("addExports")) return Set.of();
147148
var array = settings.getAsJsonArray("addExports");
@@ -189,7 +190,7 @@ public InitializeResult initialize(InitializeParams params) {
189190
}
190191

191192
private static final String[] watchFiles = {
192-
"**/*.java", "**/pom.xml", "**/BUILD",
193+
"**/*.java", "**/pom.xml", "**/BUILD", "**/javaconfig.json", "**/WORKSPACE"
193194
};
194195

195196
@Override

src/main/java/org/javacs/lsp/LSP.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.nio.charset.Charset;
77
import java.nio.charset.StandardCharsets;
88
import java.util.Optional;
9+
import java.util.Random;
910
import java.util.UUID;
1011
import java.util.concurrent.ArrayBlockingQueue;
1112
import java.util.concurrent.TimeUnit;
@@ -150,11 +151,20 @@ public void showMessage(ShowMessageParams params) {
150151
@Override
151152
public void registerCapability(String method, JsonElement options) {
152153
var params = new RegistrationParams();
153-
params.id = UUID.randomUUID().toString();
154-
params.method = method;
155-
params.registerOptions = options;
156-
157-
notifyClient(send, "client/registerCapability", params);
154+
var registration = new RegistrationParams.Registration();
155+
registration.id = UUID.randomUUID().toString();
156+
registration.method = method;
157+
registration.registerOptions = options;
158+
params.registrations.add(registration);
159+
var jsonText = toJson(params);
160+
var requestMethod = "client/registerCapability";
161+
// The request should contain the id param. Otherwise, it will be considered a notification.
162+
var id = new Random().nextInt();
163+
var messageText =
164+
String.format(
165+
"{\"jsonrpc\":\"2.0\",\"id\":\"%d\",\"method\":\"%s\",\"params\":%s}",
166+
id, requestMethod, jsonText);
167+
writeClient(send, messageText);
158168
}
159169

160170
@Override
@@ -172,7 +182,7 @@ public static void connect(
172182
// Read messages and process cancellations on a separate thread
173183
class MessageReader implements Runnable {
174184
void peek(Message message) {
175-
if (message.method.equals("$/cancelRequest")) {
185+
if ("$/cancelRequest".equals(message.method)) {
176186
var params = gson.fromJson(message.params, CancelParams.class);
177187
var removed = pending.removeIf(r -> r.id != null && r.id.equals(params.id));
178188
if (removed) LOG.info(String.format("Cancelled request %d, which had not yet started", params.id));
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package org.javacs.lsp;
22

33
import com.google.gson.JsonElement;
4+
import java.util.ArrayList;
5+
import java.util.List;
46

57
public class RegistrationParams {
6-
public String id, method;
7-
public JsonElement registerOptions;
8+
List<Registration> registrations = new ArrayList<>();
9+
10+
public static class Registration {
11+
public String id, method;
12+
public JsonElement registerOptions;
13+
}
814
}

0 commit comments

Comments
 (0)