|
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