|
24 | 24 | import java.util.concurrent.ExecutorService;
|
25 | 25 | import java.util.concurrent.Executors;
|
26 | 26 | import java.util.concurrent.Future;
|
| 27 | +import java.util.function.Consumer; |
27 | 28 | import java.util.function.Function;
|
28 | 29 |
|
29 | 30 | import org.eclipse.lsp4j.jsonrpc.Launcher;
|
|
38 | 39 | import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
|
39 | 40 | import org.springframework.ide.vscode.commons.protocol.STS4LanguageClient;
|
40 | 41 |
|
| 42 | +import com.google.gson.GsonBuilder; |
| 43 | + |
41 | 44 | /**
|
42 | 45 | * A CommandLineRunner that launches a language server. This meant to be used as a Spring bean
|
43 | 46 | * in a SpringBoot app.
|
@@ -98,11 +101,14 @@ public void run(String... args) throws Exception {
|
98 | 101 |
|
99 | 102 | private Function<MessageConsumer, MessageConsumer> messageConsumer;
|
100 | 103 |
|
101 |
| - public LanguageServerRunner(LanguageServerProperties properties, SimpleLanguageServer languageServer, Function<MessageConsumer, MessageConsumer> messageConsumer) { |
| 104 | + private Consumer<GsonBuilder> configureGson; |
| 105 | + |
| 106 | + public LanguageServerRunner(LanguageServerProperties properties, SimpleLanguageServer languageServer, Function<MessageConsumer, MessageConsumer> messageConsumer, Consumer<GsonBuilder> configureGson) { |
102 | 107 | super();
|
103 | 108 | this.properties = properties;
|
104 | 109 | this.languageServer = languageServer;
|
105 | 110 | this.messageConsumer = messageConsumer;
|
| 111 | + this.configureGson = configureGson; |
106 | 112 | }
|
107 | 113 |
|
108 | 114 | public void start() throws Exception {
|
@@ -207,7 +213,7 @@ private <T> Launcher<T> createSocketLauncher(
|
207 | 213 | AsynchronousSocketChannel socketChannel = serverSocket.accept().get();
|
208 | 214 | log.info("Client connected via socket");
|
209 | 215 | return Launcher.createIoLauncher(localService, remoteInterface, Channels.newInputStream(socketChannel),
|
210 |
| - Channels.newOutputStream(socketChannel), executorService, wrapper); |
| 216 | + Channels.newOutputStream(socketChannel), executorService, wrapper, configureGson); |
211 | 217 | }
|
212 | 218 |
|
213 | 219 | private static Connection connectToNode() throws IOException {
|
@@ -235,12 +241,13 @@ private static Connection connectToNode() throws IOException {
|
235 | 241 | private Future<Void> runAsync(Connection connection) throws Exception {
|
236 | 242 | LanguageServer server = this.languageServer;
|
237 | 243 | ExecutorService executor = createServerThreads();
|
238 |
| - Launcher<STS4LanguageClient> launcher = Launcher.createLauncher(server, |
| 244 | + Launcher<STS4LanguageClient> launcher = Launcher.createIoLauncher(server, |
239 | 245 | STS4LanguageClient.class,
|
240 | 246 | connection.in,
|
241 | 247 | connection.out,
|
242 | 248 | executor,
|
243 |
| - messageConsumer |
| 249 | + messageConsumer, |
| 250 | + configureGson |
244 | 251 | );
|
245 | 252 |
|
246 | 253 | if (server instanceof LanguageClientAware) {
|
|
0 commit comments