Skip to content

Commit df463f8

Browse files
committed
Different approach to inject the jsonHandler in the MessageTracer, to not break API
1 parent bfd5a9c commit df463f8

File tree

5 files changed

+22
-16
lines changed

5 files changed

+22
-16
lines changed

org.eclipse.lsp4j.jsonrpc.debug/src/main/java/org/eclipse/lsp4j/jsonrpc/debug/DebugLauncher.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ protected MessageJsonHandler createJsonHandler() {
210210
@Override
211211
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
212212
MessageConsumer outgoingMessageStream = new StreamMessageConsumer(output, jsonHandler);
213-
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
213+
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
214214
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
215215
RemoteEndpoint remoteEndpoint;
216216
if (exceptionHandler == null)

org.eclipse.lsp4j.jsonrpc/src/main/java/org/eclipse/lsp4j/jsonrpc/Launcher.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ public static class Builder<T> {
235235
protected boolean validateMessages;
236236
protected Consumer<GsonBuilder> configureGson;
237237
protected ClassLoader classLoader;
238-
protected PrintWriter messageTracer;
238+
protected MessageTracer messageTracer;
239239

240240
public Builder<T> setLocalService(Object localService) {
241241
this.localServices = Collections.singletonList(localService);
@@ -294,7 +294,7 @@ public Builder<T> validateMessages(boolean validate) {
294294

295295
public Builder<T> traceMessages(PrintWriter tracer) {
296296
if (tracer != null) {
297-
this.messageTracer = tracer;
297+
this.messageTracer = new MessageTracer(tracer);
298298
}
299299
return this;
300300
}
@@ -317,12 +317,17 @@ public Launcher<T> create() {
317317

318318
// Create the JSON handler, remote endpoint and remote proxy
319319
MessageJsonHandler jsonHandler = createJsonHandler();
320+
321+
if (messageTracer != null) {
322+
messageTracer.setJsonHandler(jsonHandler);
323+
}
324+
320325
RemoteEndpoint remoteEndpoint = createRemoteEndpoint(jsonHandler);
321326
T remoteProxy = createProxy(remoteEndpoint);
322327

323328
// Create the message processor
324329
StreamMessageProducer reader = new StreamMessageProducer(input, jsonHandler, remoteEndpoint);
325-
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint, jsonHandler);
330+
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint);
326331
ConcurrentMessageProcessor msgProcessor = createMessageProcessor(reader, messageConsumer, remoteProxy);
327332
ExecutorService execService = executorService != null ? executorService : Executors.newCachedThreadPool();
328333
return createLauncher(execService, remoteProxy, remoteEndpoint, msgProcessor);
@@ -344,7 +349,7 @@ protected MessageJsonHandler createJsonHandler() {
344349
*/
345350
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
346351
MessageConsumer outgoingMessageStream = new StreamMessageConsumer(output, jsonHandler);
347-
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
352+
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
348353
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
349354
RemoteEndpoint remoteEndpoint;
350355
if (exceptionHandler == null)
@@ -380,10 +385,10 @@ protected Launcher<T> createLauncher(ExecutorService execService, T remoteProxy,
380385
return new StandardLauncher<T>(execService, remoteProxy, remoteEndpoint, msgProcessor);
381386
}
382387

383-
protected MessageConsumer wrapMessageConsumer(MessageConsumer consumer, MessageJsonHandler jsonHandler) {
388+
protected MessageConsumer wrapMessageConsumer(MessageConsumer consumer) {
384389
MessageConsumer result = consumer;
385390
if (messageTracer != null) {
386-
result = new MessageTracer(messageTracer, jsonHandler).apply(consumer);
391+
result = messageTracer.apply(consumer);
387392
}
388393
if (validateMessages) {
389394
result = new ReflectiveMessageValidator(result);

org.eclipse.lsp4j.jsonrpc/src/main/java/org/eclipse/lsp4j/jsonrpc/MessageTracer.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,16 @@
2727
*/
2828
public class MessageTracer implements Function<MessageConsumer, MessageConsumer> {
2929
private final PrintWriter printWriter;
30-
private final MessageJsonHandler jsonHandler;
30+
private MessageJsonHandler jsonHandler;
3131
private final Map<String, RequestMetadata> sentRequests = new HashMap<>();
3232
private final Map<String, RequestMetadata> receivedRequests = new HashMap<>();
3333

34-
MessageTracer(PrintWriter printWriter, MessageJsonHandler jsonHandler) {
34+
MessageTracer(PrintWriter printWriter) {
3535
this.printWriter = Objects.requireNonNull(printWriter);
36-
this.jsonHandler = Objects.requireNonNull(jsonHandler);
36+
}
37+
38+
public void setJsonHandler(MessageJsonHandler jsonHandler) {
39+
this.jsonHandler = jsonHandler;
3740
}
3841

3942
@Override

org.eclipse.lsp4j.websocket.jakarta/src/main/java/org/eclipse/lsp4j/websocket/jakarta/WebSocketLauncherBuilder.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import java.util.Collection;
1515

1616
import jakarta.websocket.Session;
17-
1817
import org.eclipse.lsp4j.jsonrpc.Endpoint;
1918
import org.eclipse.lsp4j.jsonrpc.Launcher;
2019
import org.eclipse.lsp4j.jsonrpc.MessageConsumer;
@@ -57,7 +56,7 @@ public Launcher<T> create() {
5756
@Override
5857
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
5958
MessageConsumer outgoingMessageStream = new WebSocketMessageConsumer(session, jsonHandler);
60-
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
59+
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
6160
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
6261
RemoteEndpoint remoteEndpoint;
6362
if (exceptionHandler == null)
@@ -69,7 +68,7 @@ protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
6968
}
7069

7170
protected void addMessageHandlers(MessageJsonHandler jsonHandler, RemoteEndpoint remoteEndpoint) {
72-
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint, jsonHandler);
71+
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint);
7372
session.addMessageHandler(new WebSocketMessageHandler(messageConsumer, jsonHandler, remoteEndpoint));
7473
}
7574

org.eclipse.lsp4j.websocket/src/main/java/org/eclipse/lsp4j/websocket/WebSocketLauncherBuilder.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
package org.eclipse.lsp4j.websocket;
1313

1414
import java.util.Collection;
15-
1615
import javax.websocket.Session;
1716

1817
import org.eclipse.lsp4j.jsonrpc.Endpoint;
@@ -57,7 +56,7 @@ public Launcher<T> create() {
5756
@Override
5857
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
5958
MessageConsumer outgoingMessageStream = new WebSocketMessageConsumer(session, jsonHandler);
60-
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
59+
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
6160
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
6261
RemoteEndpoint remoteEndpoint;
6362
if (exceptionHandler == null)
@@ -69,7 +68,7 @@ protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
6968
}
7069

7170
protected void addMessageHandlers(MessageJsonHandler jsonHandler, RemoteEndpoint remoteEndpoint) {
72-
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint, jsonHandler);
71+
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint);
7372
session.addMessageHandler(new WebSocketMessageHandler(messageConsumer, jsonHandler, remoteEndpoint));
7473
}
7574

0 commit comments

Comments
 (0)