This is an automated email from the ASF dual-hosted git repository.

sdedic pushed a commit to branch sdedic/feature/project-dependency-add_base
in repository https://gitbox.apache.org/repos/asf/netbeans.git

commit bbb3ea126d4c8ddba57d61e2b4637f5b40a74fc8
Author: Svata Dedic <[email protected]>
AuthorDate: Wed Dec 13 22:43:13 2023 +0100

    Publish configured GSON in request's Lookup
---
 .../modules/java/lsp/server/protocol/Server.java   | 25 +++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java
 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java
index 1674055e8f..17147a04ab 100644
--- 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java
+++ 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/Server.java
@@ -51,6 +51,7 @@ import java.util.WeakHashMap;
 import java.util.concurrent.CompletionException;
 import java.util.stream.Collectors;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
 import org.eclipse.lsp4j.CallHierarchyRegistrationOptions;
 import org.eclipse.lsp4j.CodeActionKind;
 import org.eclipse.lsp4j.CodeActionOptions;
@@ -89,6 +90,7 @@ import org.eclipse.lsp4j.jsonrpc.MessageConsumer;
 import org.eclipse.lsp4j.jsonrpc.MessageIssueException;
 import org.eclipse.lsp4j.jsonrpc.RemoteEndpoint;
 import org.eclipse.lsp4j.jsonrpc.ResponseErrorException;
+import org.eclipse.lsp4j.jsonrpc.json.MessageJsonHandler;
 import org.eclipse.lsp4j.jsonrpc.messages.Either;
 import org.eclipse.lsp4j.jsonrpc.messages.Message;
 import org.eclipse.lsp4j.jsonrpc.messages.NotificationMessage;
@@ -172,7 +174,7 @@ public final class Server {
     public static NbLspServer launchServer(Pair<InputStream, OutputStream> io, 
LspSession session) {
         LanguageServerImpl server = new LanguageServerImpl(session);
         ConsumeWithLookup msgProcessor = new 
ConsumeWithLookup(server.getSessionLookup());
-        Launcher<NbCodeLanguageClient> serverLauncher = createLauncher(server, 
io, msgProcessor::attachLookup);
+        Launcher<NbCodeLanguageClient> serverLauncher = createLauncher(server, 
io, msgProcessor::attachLookup, msgProcessor::addService);
         NbCodeLanguageClient remote = serverLauncher.getRemoteProxy();
         ((LanguageClientAware) server).connect(remote);
         msgProcessor.attachClient(server.client);
@@ -182,8 +184,17 @@ public final class Server {
     }
     
     private static Launcher<NbCodeLanguageClient> 
createLauncher(LanguageServerImpl server, Pair<InputStream, OutputStream> io,
-            Function<MessageConsumer, MessageConsumer> processor) {
-        return new LSPLauncher.Builder<NbCodeLanguageClient>()
+            Function<MessageConsumer, MessageConsumer> processor, 
Consumer<Object> addService) {
+        return new LSPLauncher.Builder<NbCodeLanguageClient>() {
+                @Override
+                protected MessageJsonHandler createJsonHandler() {
+                    MessageJsonHandler h = super.createJsonHandler(); 
+                    if (addService != null) {
+                        addService.accept(h.getGson());
+                    }
+                    return h;
+                }
+            }
             .setLocalService(server)
             .setRemoteInterface(NbCodeLanguageClient.class)
             .setInput(io.first())
@@ -232,10 +243,15 @@ public final class Server {
         private final Lookup sessionLookup;
         private NbCodeLanguageClient client;
         private OperationContext initialContext;
+        private List<Object> additionalServices = new ArrayList<>();
 
         public ConsumeWithLookup(Lookup sessionLookup) {
             this.sessionLookup = sessionLookup;
         }
+        
+        public void addService(Object o) {
+            this.additionalServices.add(o);
+        }
 
         synchronized void attachClient(NbCodeLanguageClient client) {
             this.client = client;
@@ -288,6 +304,9 @@ public final class Server {
                     if (ctx != null) {
                         ic.add(ctx);
                     }
+                    if (additionalServices != null) {
+                        additionalServices.forEach(ic::add);
+                    }
                     final InternalHandle ftoCancel = toCancel;
                     try {
                         DISPATCHERS.set(client);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to