Skip to content

Commit 68016df

Browse files
committed
fix: Use a single Gson instance which knows about the Either type
1 parent c182df7 commit 68016df

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*******************************************************************************/
1919
package org.eclipse.lsp4e;
2020

21-
import static org.eclipse.lsp4e.internal.NullSafetyHelper.*;
21+
import static org.eclipse.lsp4e.internal.NullSafetyHelper.castNonNull;
2222

2323
import java.io.BufferedReader;
2424
import java.io.File;
@@ -119,6 +119,7 @@
119119
import org.eclipse.lsp4j.jsonrpc.Launcher;
120120
import org.eclipse.lsp4j.jsonrpc.MessageConsumer;
121121
import org.eclipse.lsp4j.jsonrpc.ResponseErrorException;
122+
import org.eclipse.lsp4j.jsonrpc.json.adapters.EitherTypeAdapter;
122123
import org.eclipse.lsp4j.jsonrpc.messages.Either;
123124
import org.eclipse.lsp4j.jsonrpc.messages.Message;
124125
import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode;
@@ -130,6 +131,7 @@
130131
import com.google.common.base.Functions;
131132
import com.google.common.util.concurrent.ThreadFactoryBuilder;
132133
import com.google.gson.Gson;
134+
import com.google.gson.GsonBuilder;
133135
import com.google.gson.JsonObject;
134136

135137
public class LanguageServerWrapper {
@@ -251,6 +253,10 @@ synchronized void close() {
251253
}
252254
}
253255

256+
private static final Gson GSON = new GsonBuilder()
257+
.registerTypeAdapterFactory(new EitherTypeAdapter.Factory())
258+
.create();
259+
254260
public final LanguageServerDefinition serverDefinition;
255261
public final @Nullable IProject initialProject;
256262
protected Map<URI, DocumentContentSynchronizer> connectedDocuments;
@@ -1173,7 +1179,7 @@ public void registerCapability(RegistrationParams params) {
11731179
break;
11741180
case "workspace/executeCommand": //$NON-NLS-1$
11751181
try {
1176-
ExecuteCommandOptions executeCommandOptions = castNonNull(new Gson().fromJson((JsonObject) reg.getRegisterOptions(),
1182+
ExecuteCommandOptions executeCommandOptions = castNonNull(GSON.fromJson((JsonObject) reg.getRegisterOptions(),
11771183
ExecuteCommandOptions.class));
11781184
List<String> newCommands = executeCommandOptions.getCommands();
11791185
if (!newCommands.isEmpty()) {
@@ -1212,7 +1218,7 @@ public void registerCapability(RegistrationParams params) {
12121218
case "textDocument/completion": { //$NON-NLS-1$
12131219
CompletionOptions previous = serverCapabilities.getCompletionProvider();
12141220
try {
1215-
final var completionOpts = new Gson().fromJson((JsonObject) reg.getRegisterOptions(),
1221+
final var completionOpts = GSON.fromJson((JsonObject) reg.getRegisterOptions(),
12161222
CompletionOptions.class);
12171223
serverCapabilities.setCompletionProvider(completionOpts);
12181224
addRegistration(reg, () -> serverCapabilities.setCompletionProvider(previous));
@@ -1255,8 +1261,9 @@ public void registerCapability(RegistrationParams params) {
12551261
return null;
12561262
if (registerOptions instanceof DidChangeWatchedFilesRegistrationOptions direct)
12571263
return direct;
1258-
if (registerOptions instanceof JsonObject jsonObject)
1259-
return new Gson().fromJson(jsonObject, DidChangeWatchedFilesRegistrationOptions.class);
1264+
if (registerOptions instanceof JsonObject jsonObject) {
1265+
return GSON.fromJson(jsonObject, DidChangeWatchedFilesRegistrationOptions.class);
1266+
}
12601267
return null;
12611268
}
12621269

0 commit comments

Comments
 (0)