You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by vi...@apache.org on 2022/03/05 11:00:32 UTC
[netbeans] branch master updated: ide/lsp.client + MultiMimeLanguageServerProvider (#3655)
This is an automated email from the ASF dual-hosted git repository.
vieiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new d781b1c ide/lsp.client + MultiMimeLanguageServerProvider (#3655)
d781b1c is described below
commit d781b1ca719f0a868777005aca3a6e00edbf7d58
Author: Antonio Vieiro <vi...@apache.org>
AuthorDate: Sat Mar 5 12:00:07 2022 +0100
ide/lsp.client + MultiMimeLanguageServerProvider (#3655)
* ide/lsp.client + MultiMimeLanguageServerProvider
* Copy MultiMimeLanguageServerProvider.getMimeTypes
* Contemplate already restarted servers
---
ide/lsp.client/apichanges.xml | 12 ++++++++
ide/lsp.client/nbproject/project.properties | 2 +-
.../netbeans/modules/lsp/client/LSPBindings.java | 20 ++++++++++++
.../spi/MultiMimeLanguageServerProvider.java | 36 ++++++++++++++++++++++
4 files changed, 69 insertions(+), 1 deletion(-)
diff --git a/ide/lsp.client/apichanges.xml b/ide/lsp.client/apichanges.xml
index 3128885..dc04136 100644
--- a/ide/lsp.client/apichanges.xml
+++ b/ide/lsp.client/apichanges.xml
@@ -25,6 +25,18 @@
<apidef name="lsp_client">LSP Client API</apidef>
</apidefs>
<changes>
+ <change id="MultiMimeLanguageServerProvider">
+ <api name="lsp_client" />
+ <summary>Adding MultiMimeLanguageServerProvider</summary>
+ <version major="0" minor="1.9" />
+ <date day="22" month="2" year="2022" />
+ <author login="vieiro" />
+ <compatibility addition="yes" binary="compatible" source="compatible" />
+ <description>
+ org.netbeans.modules.lsp.client.spi.MultiMimeLanguageServerProvider
+ </description>
+ <class name="MultiMimeLanguageServerProvider" package="org.netbeans.modules.lsp.client.spi"/>
+ </change>
<change id="ServerRestarter">
<api name="lsp_client" />
<summary>Adding ServerRestarter</summary>
diff --git a/ide/lsp.client/nbproject/project.properties b/ide/lsp.client/nbproject/project.properties
index 2b6502e..1c729a6 100644
--- a/ide/lsp.client/nbproject/project.properties
+++ b/ide/lsp.client/nbproject/project.properties
@@ -24,4 +24,4 @@ release.external/org.eclipse.lsp4j.jsonrpc-0.12.0.jar=modules/ext/org.eclipse.ls
release.external/org.eclipse.xtend.lib-2.19.0.jar=modules/ext/org.eclipse.xtend.lib-2.19.0.jar
release.external/org.eclipse.xtend.lib.macro-2.19.0.jar=modules/ext/org.eclipse.xtend.lib.macro-2.19.0.jar
release.external/org.eclipse.xtext.xbase.lib-2.19.0.jar=modules/ext/org.eclipse.xtext.xbase.lib-2.19.0.jar
-spec.version.base=1.15.0
+spec.version.base=1.16.0
diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java
index b2e7e06..88fac4c 100644
--- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java
+++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java
@@ -82,6 +82,7 @@ import org.netbeans.modules.lsp.client.options.MimeTypeInfo;
import org.netbeans.modules.lsp.client.spi.ServerRestarter;
import org.netbeans.modules.lsp.client.spi.LanguageServerProvider;
import org.netbeans.modules.lsp.client.spi.LanguageServerProvider.LanguageServerDescription;
+import org.netbeans.modules.lsp.client.spi.MultiMimeLanguageServerProvider;
import org.openide.awt.NotificationDisplayer;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
@@ -209,6 +210,12 @@ public class LSPBindings {
if (bindings != null) {
description.bindings = new WeakReference<>(bindings);
description.lastStartTimeStamp = System.currentTimeMillis();
+ // If ServerDescription acknowledges another mimetypes, add these
+ // to project2MimeType2Server too.
+ Map<String, ServerDescription> mimeType2Server = project2MimeType2Server.get(uri);
+ for(String mt: description.mimeTypes) {
+ mimeType2Server.put(mt, description);
+ }
WORKER.post(() -> cs.fireChange());
}
}
@@ -247,6 +254,12 @@ public class LSPBindings {
ServerRestarter restarter = () -> {
synchronized (LSPBindings.class) {
ServerDescription description = project2MimeType2Server.getOrDefault(baseUri, Collections.emptyMap()).remove(mt);
+ // Remove any other mimetypes as well.
+ if (description != null) {
+ for(String anotherMT: description.mimeTypes) {
+ project2MimeType2Server.get(baseUri).remove(anotherMT);
+ }
+ }
Reference<LSPBindings> bRef = description != null ? description.bindings : null;
LSPBindings b = bRef != null ? bRef.get() : null;
@@ -269,6 +282,12 @@ public class LSPBindings {
for (LanguageServerProvider provider : MimeLookup.getLookup(mt).lookupAll(LanguageServerProvider.class)) {
final Lookup lkp = prj != null ? Lookups.fixed(prj, mimeTypeInfo, restarter) : Lookups.fixed(mimeTypeInfo, restarter);
+ inDescription.mimeTypes = Collections.singleton(mt);
+ // If this is a MultiMimeLanguageServerProvider, then retrieve all
+ // mime types handled by this server.
+ if (provider instanceof MultiMimeLanguageServerProvider) {
+ inDescription.mimeTypes = new HashSet<>(((MultiMimeLanguageServerProvider)provider).getMimeTypes());
+ }
LanguageServerDescription desc = provider.startServer(lkp);
if (desc != null) {
@@ -574,5 +593,6 @@ public class LSPBindings {
public long lastStartTimeStamp;
public int failedCount;
public Reference<LSPBindings> bindings;
+ public Set<String> mimeTypes;
}
}
diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/spi/MultiMimeLanguageServerProvider.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/spi/MultiMimeLanguageServerProvider.java
new file mode 100644
index 0000000..67e70e9
--- /dev/null
+++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/spi/MultiMimeLanguageServerProvider.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.lsp.client.spi;
+
+import java.util.Set;
+
+/**
+ * Possibly start a language server. Should be installed in the Mime Lookup for
+ * all the given mime types that are handled by the given server.
+ * @author antonio
+ */
+public interface MultiMimeLanguageServerProvider extends LanguageServerProvider {
+
+ /**
+ * Returns the set of mime types handled by this server.
+ * @return The set of mime types handled by this server.
+ */
+ Set<String> getMimeTypes();
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists