Skip to content

Commit 05b6708

Browse files
committed
Another approach
1 parent 45e8695 commit 05b6708

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed

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

+8-3
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,12 @@ public static class Builder<T> {
235235
protected boolean validateMessages;
236236
protected Consumer<GsonBuilder> configureGson;
237237
protected ClassLoader classLoader;
238+
/**
239+
* @deprecated use {@link #tracer} instead
240+
*/
241+
@Deprecated
238242
protected MessageTracer messageTracer;
243+
protected PrintWriter tracer;
239244

240245
public Builder<T> setLocalService(Object localService) {
241246
this.localServices = Collections.singletonList(localService);
@@ -294,7 +299,7 @@ public Builder<T> validateMessages(boolean validate) {
294299

295300
public Builder<T> traceMessages(PrintWriter tracer) {
296301
if (tracer != null) {
297-
this.messageTracer = new MessageTracer(tracer);
302+
this.tracer = tracer;
298303
}
299304
return this;
300305
}
@@ -318,8 +323,8 @@ public Launcher<T> create() {
318323
// Create the JSON handler, remote endpoint and remote proxy
319324
MessageJsonHandler jsonHandler = createJsonHandler();
320325

321-
if (messageTracer != null) {
322-
messageTracer.setJsonHandler(jsonHandler);
326+
if (tracer != null) {
327+
messageTracer = new MessageTracer(tracer, jsonHandler);
323328
}
324329

325330
RemoteEndpoint remoteEndpoint = createRemoteEndpoint(jsonHandler);

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

+3-6
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,13 @@
2727
*/
2828
public class MessageTracer implements Function<MessageConsumer, MessageConsumer> {
2929
private final PrintWriter printWriter;
30-
private MessageJsonHandler jsonHandler;
30+
private final 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) {
34+
MessageTracer(PrintWriter printWriter, MessageJsonHandler jsonHandler) {
3535
this.printWriter = Objects.requireNonNull(printWriter);
36-
}
37-
38-
public void setJsonHandler(MessageJsonHandler jsonHandler) {
39-
this.jsonHandler = jsonHandler;
36+
this.jsonHandler = Objects.requireNonNull(jsonHandler);
4037
}
4138

4239
@Override

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

+50
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.time.Clock;
1616
import java.time.Instant;
1717
import java.time.format.DateTimeFormatter;
18+
import java.util.Collections;
1819
import java.util.Locale;
1920
import java.util.Map;
2021
import java.util.Objects;
@@ -49,6 +50,7 @@ public class TracingMessageConsumer implements MessageConsumer {
4950
* @param sentRequests A map that keeps track of pending sent request data.
5051
* @param receivedRequests A map that keeps track of pending received request data.
5152
* @param printWriter Where to write the log to.
53+
* @param jsonHandler The handler to be used to serialize messages.
5254
* @param clock The clock that is used to calculate timestamps and durations.
5355
*/
5456
public TracingMessageConsumer(
@@ -67,6 +69,54 @@ public TracingMessageConsumer(
6769
* @param receivedRequests A map that keeps track of pending received request data.
6870
* @param printWriter Where to write the log to.
6971
* @param clock The clock that is used to calculate timestamps and durations.
72+
* @deprecated use {@link TracingMessageConsumer#TracingMessageConsumer(MessageConsumer, Map, Map, PrintWriter, MessageJsonHandler, Clock)}
73+
*/
74+
@Deprecated
75+
public TracingMessageConsumer(
76+
MessageConsumer messageConsumer,
77+
Map<String, RequestMetadata> sentRequests,
78+
Map<String, RequestMetadata> receivedRequests,
79+
PrintWriter printWriter,
80+
Clock clock) {
81+
this(messageConsumer, sentRequests, receivedRequests, printWriter, defaultHandlerWithoutUserAdapters(), clock, null);
82+
}
83+
84+
/**
85+
* For backward compatibility, we are using a default handler that does not contain any user adapters.
86+
*/
87+
private static MessageJsonHandler defaultHandlerWithoutUserAdapters() {
88+
return new MessageJsonHandler(Collections.emptyMap(), gsonBuilder -> {
89+
gsonBuilder.setPrettyPrinting();
90+
});
91+
}
92+
93+
/**
94+
* @param messageConsumer The {@link MessageConsumer} to wrap.
95+
* @param sentRequests A map that keeps track of pending sent request data.
96+
* @param receivedRequests A map that keeps track of pending received request data.
97+
* @param printWriter Where to write the log to.
98+
* @param clock The clock that is used to calculate timestamps and durations.
99+
* @param locale THe Locale to format the timestamps and durations, or <code>null</code> to use default locale.
100+
* @deprecated use {@link TracingMessageConsumer#TracingMessageConsumer(MessageConsumer, Map, Map, PrintWriter, MessageJsonHandler, Clock, Locale)}
101+
*/
102+
@Deprecated
103+
public TracingMessageConsumer(
104+
MessageConsumer messageConsumer,
105+
Map<String, RequestMetadata> sentRequests,
106+
Map<String, RequestMetadata> receivedRequests,
107+
PrintWriter printWriter,
108+
Clock clock,
109+
Locale locale) {
110+
this(messageConsumer, sentRequests, receivedRequests, printWriter, defaultHandlerWithoutUserAdapters(), clock, locale);
111+
}
112+
113+
/**
114+
* @param messageConsumer The {@link MessageConsumer} to wrap.
115+
* @param sentRequests A map that keeps track of pending sent request data.
116+
* @param receivedRequests A map that keeps track of pending received request data.
117+
* @param printWriter Where to write the log to.
118+
* @param jsonHandler The handler to be used to serialize messages.
119+
* @param clock The clock that is used to calculate timestamps and durations.
70120
* @param locale THe Locale to format the timestamps and durations, or <code>null</code> to use default locale.
71121
*/
72122
public TracingMessageConsumer(

0 commit comments

Comments
 (0)