Skip to content

Commit

Permalink
Different approach to inject the jsonHandler in the MessageTracer, to…
Browse files Browse the repository at this point in the history
… not break API
  • Loading branch information
henryju committed Nov 9, 2023
1 parent 016ccdc commit 8d89633
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ protected MessageJsonHandler createJsonHandler() {
@Override
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
MessageConsumer outgoingMessageStream = new StreamMessageConsumer(output, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
RemoteEndpoint remoteEndpoint;
if (exceptionHandler == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ public static class Builder<T> {
protected boolean validateMessages;
protected Consumer<GsonBuilder> configureGson;
protected ClassLoader classLoader;
protected PrintWriter messageTracer;
protected MessageTracer messageTracer;

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

public Builder<T> traceMessages(PrintWriter tracer) {
if (tracer != null) {
this.messageTracer = tracer;
this.messageTracer = new MessageTracer(tracer);
}
return this;
}
Expand All @@ -317,12 +317,17 @@ public Launcher<T> create() {

// Create the JSON handler, remote endpoint and remote proxy
MessageJsonHandler jsonHandler = createJsonHandler();

if (messageTracer != null) {
messageTracer.setJsonHandler(jsonHandler);
}

RemoteEndpoint remoteEndpoint = createRemoteEndpoint(jsonHandler);
T remoteProxy = createProxy(remoteEndpoint);

// Create the message processor
StreamMessageProducer reader = new StreamMessageProducer(input, jsonHandler, remoteEndpoint);
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint, jsonHandler);
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint);
ConcurrentMessageProcessor msgProcessor = createMessageProcessor(reader, messageConsumer, remoteProxy);
ExecutorService execService = executorService != null ? executorService : Executors.newCachedThreadPool();
return createLauncher(execService, remoteProxy, remoteEndpoint, msgProcessor);
Expand All @@ -344,7 +349,7 @@ protected MessageJsonHandler createJsonHandler() {
*/
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
MessageConsumer outgoingMessageStream = new StreamMessageConsumer(output, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
RemoteEndpoint remoteEndpoint;
if (exceptionHandler == null)
Expand Down Expand Up @@ -380,10 +385,10 @@ protected Launcher<T> createLauncher(ExecutorService execService, T remoteProxy,
return new StandardLauncher<T>(execService, remoteProxy, remoteEndpoint, msgProcessor);
}

protected MessageConsumer wrapMessageConsumer(MessageConsumer consumer, MessageJsonHandler jsonHandler) {
protected MessageConsumer wrapMessageConsumer(MessageConsumer consumer) {
MessageConsumer result = consumer;
if (messageTracer != null) {
result = new MessageTracer(messageTracer, jsonHandler).apply(consumer);
result = messageTracer.apply(consumer);
}
if (validateMessages) {
result = new ReflectiveMessageValidator(result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,16 @@
*/
public class MessageTracer implements Function<MessageConsumer, MessageConsumer> {
private final PrintWriter printWriter;
private final MessageJsonHandler jsonHandler;
private MessageJsonHandler jsonHandler;
private final Map<String, RequestMetadata> sentRequests = new HashMap<>();
private final Map<String, RequestMetadata> receivedRequests = new HashMap<>();

MessageTracer(PrintWriter printWriter, MessageJsonHandler jsonHandler) {
MessageTracer(PrintWriter printWriter) {
this.printWriter = Objects.requireNonNull(printWriter);
this.jsonHandler = Objects.requireNonNull(jsonHandler);
}

public void setJsonHandler(MessageJsonHandler jsonHandler) {
this.jsonHandler = jsonHandler;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import java.util.Collection;

import jakarta.websocket.Session;

import org.eclipse.lsp4j.jsonrpc.Endpoint;
import org.eclipse.lsp4j.jsonrpc.Launcher;
import org.eclipse.lsp4j.jsonrpc.MessageConsumer;
Expand Down Expand Up @@ -57,7 +56,7 @@ public Launcher<T> create() {
@Override
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
MessageConsumer outgoingMessageStream = new WebSocketMessageConsumer(session, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
RemoteEndpoint remoteEndpoint;
if (exceptionHandler == null)
Expand All @@ -69,7 +68,7 @@ protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
}

protected void addMessageHandlers(MessageJsonHandler jsonHandler, RemoteEndpoint remoteEndpoint) {
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint, jsonHandler);
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint);
session.addMessageHandler(new WebSocketMessageHandler(messageConsumer, jsonHandler, remoteEndpoint));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
package org.eclipse.lsp4j.websocket;

import java.util.Collection;

import javax.websocket.Session;

import org.eclipse.lsp4j.jsonrpc.Endpoint;
Expand Down Expand Up @@ -57,7 +56,7 @@ public Launcher<T> create() {
@Override
protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
MessageConsumer outgoingMessageStream = new WebSocketMessageConsumer(session, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream, jsonHandler);
outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream);
Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices);
RemoteEndpoint remoteEndpoint;
if (exceptionHandler == null)
Expand All @@ -69,7 +68,7 @@ protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) {
}

protected void addMessageHandlers(MessageJsonHandler jsonHandler, RemoteEndpoint remoteEndpoint) {
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint, jsonHandler);
MessageConsumer messageConsumer = wrapMessageConsumer(remoteEndpoint);
session.addMessageHandler(new WebSocketMessageHandler(messageConsumer, jsonHandler, remoteEndpoint));
}

Expand Down

0 comments on commit 8d89633

Please sign in to comment.