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

dbalek 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 982aab46d7 Option to switch off Java language support inside NBLS 
added. (#4377)
982aab46d7 is described below

commit 982aab46d7387d8ab96a424f447b6e6a05d315c1
Author: Dusan Balek <[email protected]>
AuthorDate: Fri Jul 15 14:10:24 2022 +0200

    Option to switch off Java language support inside NBLS added. (#4377)
---
 .../nbcode/integration.java/build.xml              |  25 +++
 .../nbcode/integration.java/manifest.mf            |   7 +
 .../integration.java/nbproject/build-impl.xml      |  45 ++++
 .../integration.java/nbproject/genfiles.properties |   8 +
 .../nbproject/project.properties                   |  14 +-
 .../nbcode/integration.java/nbproject/project.xml  |  32 +++
 .../nbproject/suite.properties}                    |  13 +-
 ...es.java.lsp.server.protocol.CodeActionsProvider |  32 +++
 ...dules.refactoring.spi.RefactoringPluginFactory} |  17 +-
 .../nbcode/integration/java/Bundle.properties}     |  15 +-
 .../modules/nbcode/integration/java/layer.xml      |  51 +++++
 .../netbeans/modules/nbcode/integration/layer.xml  |  10 +-
 .../nbcode/nbproject/project.properties            |   4 +-
 .../server/protocol/NbCodeClientCapabilities.java  |  17 ++
 .../modules/java/lsp/server/protocol/Server.java   |   8 +-
 .../server/protocol/TextDocumentServiceImpl.java   |   7 +-
 .../lsp/server/protocol/WorkspaceServiceImpl.java  | 247 +++++++++++----------
 java/java.lsp.server/vscode/package.json           | 143 ++++++------
 java/java.lsp.server/vscode/src/extension.ts       |  69 ++++--
 .../vscode/src/test/suite/extension.test.ts        |   2 +-
 20 files changed, 492 insertions(+), 274 deletions(-)

diff --git a/java/java.lsp.server/nbcode/integration.java/build.xml 
b/java/java.lsp.server/nbcode/integration.java/build.xml
new file mode 100644
index 0000000000..48655e373c
--- /dev/null
+++ b/java/java.lsp.server/nbcode/integration.java/build.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project name="org.netbeans.modules.nbcode.integration.vscode.java" 
default="netbeans" basedir=".">
+    <description>Builds, tests, and runs the project 
org.netbeans.modules.nbcode.integration.java.</description>
+    <import file="nbproject/build-impl.xml"/>
+</project>
diff --git a/java/java.lsp.server/nbcode/integration.java/manifest.mf 
b/java/java.lsp.server/nbcode/integration.java/manifest.mf
new file mode 100644
index 0000000000..c54c10abaf
--- /dev/null
+++ b/java/java.lsp.server/nbcode/integration.java/manifest.mf
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+AutoUpdate-Show-In-Client: true
+OpenIDE-Module: org.netbeans.modules.nbcode.integration.java
+OpenIDE-Module-Layer: org/netbeans/modules/nbcode/integration/java/layer.xml
+OpenIDE-Module-Localizing-Bundle: 
org/netbeans/modules/nbcode/integration/java/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+
diff --git 
a/java/java.lsp.server/nbcode/integration.java/nbproject/build-impl.xml 
b/java/java.lsp.server/nbcode/integration.java/nbproject/build-impl.xml
new file mode 100644
index 0000000000..aee96baa29
--- /dev/null
+++ b/java/java.lsp.server/nbcode/integration.java/nbproject/build-impl.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+-->
+<project name="org.netbeans.modules.nbcode.integration.java-impl" basedir="..">
+    <fail message="Please build using Ant 1.7.1 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.7.1"/>
+            </not>
+        </condition>
+    </fail>
+    <property file="nbproject/private/suite-private.properties"/>
+    <property file="nbproject/suite.properties"/>
+    <fail unless="suite.dir">You must set 'suite.dir' to point to your 
containing module suite</fail>
+    <property 
file="${suite.dir}/nbproject/private/platform-private.properties"/>
+    <property file="${suite.dir}/nbproject/platform.properties"/>
+    <macrodef name="property" 
uri="http://www.netbeans.org/ns/nb-module-project/2";>
+        <attribute name="name"/>
+        <attribute name="value"/>
+        <sequential>
+            <property name="@{name}" value="${@{value}}"/>
+        </sequential>
+    </macrodef>
+    <macrodef name="evalprops" 
uri="http://www.netbeans.org/ns/nb-module-project/2";>
+        <attribute name="property"/>
+        <attribute name="value"/>
+        <sequential>
+            <property name="@{property}" value="@{value}"/>
+        </sequential>
+    </macrodef>
+    <property file="${user.properties.file}"/>
+    <nbmproject2:property name="harness.dir" 
value="nbplatform.${nbplatform.active}.harness.dir" 
xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <nbmproject2:property name="nbplatform.active.dir" 
value="nbplatform.${nbplatform.active}.netbeans.dest.dir" 
xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <nbmproject2:evalprops property="cluster.path.evaluated" 
value="${cluster.path}" 
xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <fail message="Path to 'platform' cluster missing in $${cluster.path} 
property or using corrupt Netbeans Platform (missing harness).">
+        <condition>
+            <not>
+                <contains string="${cluster.path.evaluated}" 
substring="platform"/>
+            </not>
+        </condition>
+    </fail>
+    <import file="${harness.dir}/build.xml"/>
+</project>
diff --git 
a/java/java.lsp.server/nbcode/integration.java/nbproject/genfiles.properties 
b/java/java.lsp.server/nbcode/integration.java/nbproject/genfiles.properties
new file mode 100644
index 0000000000..5ed19573b8
--- /dev/null
+++ b/java/java.lsp.server/nbcode/integration.java/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=351dea9f
+build.xml.script.CRC32=78def90a
[email protected]
+# This file is used by a NetBeans-based IDE to track changes in generated 
files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never 
regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=0f964ba8
+nbproject/build-impl.xml.script.CRC32=a765edfb
+nbproject/[email protected]
diff --git a/java/java.lsp.server/nbcode/nbproject/project.properties 
b/java/java.lsp.server/nbcode/integration.java/nbproject/project.properties
similarity index 54%
copy from java/java.lsp.server/nbcode/nbproject/project.properties
copy to 
java/java.lsp.server/nbcode/integration.java/nbproject/project.properties
index 953ab452f0..5137752915 100644
--- a/java/java.lsp.server/nbcode/nbproject/project.properties
+++ b/java/java.lsp.server/nbcode/integration.java/nbproject/project.properties
@@ -15,15 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 
-app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif
-app.name=nbcode
-app.title=nbcode
-auxiliary.org-netbeans-modules-apisupport-installer.license-type=no
-auxiliary.org-netbeans-modules-apisupport-installer.os-linux=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-macosx=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-solaris=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-windows=false
-auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
-modules=\
-    ${project.org.netbeans.modules.nbcode.integration}
-project.org.netbeans.modules.nbcode.integration=integration
+javac.source=1.8
+javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java/java.lsp.server/nbcode/integration.java/nbproject/project.xml 
b/java/java.lsp.server/nbcode/integration.java/nbproject/project.xml
new file mode 100644
index 0000000000..79576822e3
--- /dev/null
+++ b/java/java.lsp.server/nbcode/integration.java/nbproject/project.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1";>
+    <type>org.netbeans.modules.apisupport.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3";>
+            
<code-name-base>org.netbeans.modules.nbcode.integration.java</code-name-base>
+            <suite-component/>
+            <module-dependencies/>
+            <public-packages/>
+        </data>
+    </configuration>
+</project>
diff --git a/java/java.lsp.server/nbcode/nbproject/project.properties 
b/java/java.lsp.server/nbcode/integration.java/nbproject/suite.properties
similarity index 54%
copy from java/java.lsp.server/nbcode/nbproject/project.properties
copy to java/java.lsp.server/nbcode/integration.java/nbproject/suite.properties
index 953ab452f0..7139182954 100644
--- a/java/java.lsp.server/nbcode/nbproject/project.properties
+++ b/java/java.lsp.server/nbcode/integration.java/nbproject/suite.properties
@@ -15,15 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif
-app.name=nbcode
-app.title=nbcode
-auxiliary.org-netbeans-modules-apisupport-installer.license-type=no
-auxiliary.org-netbeans-modules-apisupport-installer.os-linux=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-macosx=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-solaris=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-windows=false
-auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
-modules=\
-    ${project.org.netbeans.modules.nbcode.integration}
-project.org.netbeans.modules.nbcode.integration=integration
+suite.dir=${basedir}/..
diff --git 
a/java/java.lsp.server/nbcode/integration.java/src/META-INF/services/org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider
 
b/java/java.lsp.server/nbcode/integration.java/src/META-INF/services/org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider
new file mode 100644
index 0000000000..6ebd485efa
--- /dev/null
+++ 
b/java/java.lsp.server/nbcode/integration.java/src/META-INF/services/org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider
@@ -0,0 +1,32 @@
+# 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.
+
+#-org.netbeans.modules.java.lsp.server.protocol.ConstructorGenerator
+#-org.netbeans.modules.java.lsp.server.protocol.LoggerGenerator
+#-org.netbeans.modules.java.lsp.server.protocol.GetterSetterGenerator
+#-org.netbeans.modules.java.lsp.server.protocol.EqualsHashCodeGenerator
+#-org.netbeans.modules.java.lsp.server.protocol.ToStringGenerator
+#-org.netbeans.modules.java.lsp.server.protocol.DelegateMethodGenerator
+#-org.netbeans.modules.java.lsp.server.protocol.ImplementOverrideMethodGenerator
+#-org.netbeans.modules.java.lsp.server.protocol.SurroundWithHint
+#-org.netbeans.modules.java.lsp.server.protocol.OrganizeImportsCodeAction
+#-org.netbeans.modules.java.lsp.server.refactoring.MoveRefactoring
+#-org.netbeans.modules.java.lsp.server.refactoring.ExtractSuperclassOrInterfaceRefactoring
+#-org.netbeans.modules.java.lsp.server.refactoring.PullUpRefactoring
+#-org.netbeans.modules.java.lsp.server.refactoring.PushDownRefactoring
+#-org.netbeans.modules.java.lsp.server.refactoring.ChangeMethodParametersRefactoring
+#-org.netbeans.modules.java.lsp.server.protocol.QuickOpen
diff --git a/java/java.lsp.server/nbcode/nbproject/project.properties 
b/java/java.lsp.server/nbcode/integration.java/src/META-INF/services/org.netbeans.modules.refactoring.spi.RefactoringPluginFactory
similarity index 54%
copy from java/java.lsp.server/nbcode/nbproject/project.properties
copy to 
java/java.lsp.server/nbcode/integration.java/src/META-INF/services/org.netbeans.modules.refactoring.spi.RefactoringPluginFactory
index 953ab452f0..c10a765a47 100644
--- a/java/java.lsp.server/nbcode/nbproject/project.properties
+++ 
b/java/java.lsp.server/nbcode/integration.java/src/META-INF/services/org.netbeans.modules.refactoring.spi.RefactoringPluginFactory
@@ -15,15 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 
-app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif
-app.name=nbcode
-app.title=nbcode
-auxiliary.org-netbeans-modules-apisupport-installer.license-type=no
-auxiliary.org-netbeans-modules-apisupport-installer.os-linux=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-macosx=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-solaris=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-windows=false
-auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
-modules=\
-    ${project.org.netbeans.modules.nbcode.integration}
-project.org.netbeans.modules.nbcode.integration=integration
+#-org.netbeans.modules.refactoring.java.plugins.InstantRefactoringPerformer$AllRefactoringsPluginFactory
+#-org.netbeans.modules.refactoring.java.plugins.JavaRefactoringsFactory
+#-org.netbeans.modules.refactoring.java.plugins.PackageRename
+#-org.netbeans.modules.refactoring.java.plugins.RefactoringPluginFactoryImpl
+#-org.netbeans.modules.refactoring.java.plugins.RenameTestClassPluginFactory
diff --git a/java/java.lsp.server/nbcode/nbproject/project.properties 
b/java/java.lsp.server/nbcode/integration.java/src/org/netbeans/modules/nbcode/integration/java/Bundle.properties
similarity index 54%
copy from java/java.lsp.server/nbcode/nbproject/project.properties
copy to 
java/java.lsp.server/nbcode/integration.java/src/org/netbeans/modules/nbcode/integration/java/Bundle.properties
index 953ab452f0..d52c731d5d 100644
--- a/java/java.lsp.server/nbcode/nbproject/project.properties
+++ 
b/java/java.lsp.server/nbcode/integration.java/src/org/netbeans/modules/nbcode/integration/java/Bundle.properties
@@ -15,15 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif
-app.name=nbcode
-app.title=nbcode
-auxiliary.org-netbeans-modules-apisupport-installer.license-type=no
-auxiliary.org-netbeans-modules-apisupport-installer.os-linux=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-macosx=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-solaris=false
-auxiliary.org-netbeans-modules-apisupport-installer.os-windows=false
-auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
-modules=\
-    ${project.org.netbeans.modules.nbcode.integration}
-project.org.netbeans.modules.nbcode.integration=integration
+OpenIDE-Module-Long-Description=\
+    Integration module with other VSCode's Java Support extensions.
+OpenIDE-Module-Name=VSCode Java Integration
diff --git 
a/java/java.lsp.server/nbcode/integration.java/src/org/netbeans/modules/nbcode/integration/java/layer.xml
 
b/java/java.lsp.server/nbcode/integration.java/src/org/netbeans/modules/nbcode/integration/java/layer.xml
new file mode 100644
index 0000000000..f845715686
--- /dev/null
+++ 
b/java/java.lsp.server/nbcode/integration.java/src/org/netbeans/modules/nbcode/integration/java/layer.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" 
"http://www.netbeans.org/dtds/filesystem-1_2.dtd";>
+<filesystem>
+    <folder name="Editors">
+        <file 
name="org-netbeans-modules-gsf-testrunner-ui-TestMethodFinderImpl$Factory.instance_hidden"/>
+        <folder name="text">
+            <folder name="x-java">
+                <folder name="CompletionCollectors">
+                    <file 
name="org-netbeans-lib-editor-codetemplates-CodeTemplateCompletionProvider$Collector.instance_hidden"/>
+                    <file 
name="org-netbeans-modules-editor-java-JavaCompletionCollector.instance_hidden"/>
+                    <file 
name="org-netbeans-modules-java-editor-javadoc-JavadocCompletionCollector.instance_hidden"/>
+                    <file 
name="org-netbeans-modules-javadoc-hints-GenerateJavadocCollector.instance_hidden"/>
+                </folder>
+                <folder name="HoverProviders">
+                    <file 
name="org-netbeans-modules-editor-java-JavaHoverProvider.instance_hidden"/>
+                </folder>
+                <folder name="HyperlinkLocationProviders">
+                    <file 
name="org-netbeans-modules-java-editor-hyperlink-JavaHyperlinkProvider$LocationProvider.instance_hidden"/>
+                </folder>
+                <folder name="HyperlinkTypeDefLocationProviders">
+                    <file 
name="org-netbeans-modules-java-editor-hyperlink-JavaHyperlinkProvider$TypeDefLocationProvider.instance_hidden"/>
+                </folder>
+                <file name="Reformatter.instance_hidden"/>
+                <file name="Reindenter.instance_hidden"/>
+                <file 
name="org-netbeans-modules-editor-java-JavaStructureProvider.instance_hidden"/>
+                <file 
name="org-netbeans-modules-java-hints-infrastructure-JavaErrorProvider.instance_hidden"/>
+                <file 
name="org-netbeans-modules-refactoring-java-callhierarchy-LspCallHierarchyProvider.instance_hidden"/>
+            </folder>
+        </folder>
+    </folder>
+</filesystem>
diff --git 
a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml
 
b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml
index e8cbe2d07d..75a90d7e2b 100644
--- 
a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml
+++ 
b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml
@@ -50,6 +50,10 @@
                 <attr 
name="action:org.netbeans.modules.cloud.oracle.actions.AddRepository" 
stringvalue="Tools"/>
             </file>
         </folder>
+        <folder name="AutoupdateType">
+            <file name="82pluginportal-update-provider.instance_hidden"/>
+            <file name="pluginportal-update-provider.instance_hidden"/>
+        </folder>
     </folder>
     <folder name="Explorers">
         <folder name="database.connections">
@@ -65,12 +69,6 @@
     <folder name="Debugger">
         <file 
name="org-netbeans-modules-debugger-jpda-ui-CurrentThreadAnnotationListener.instance_hidden"/>
     </folder>
-    <folder name="Services">
-        <folder name="AutoupdateType">
-            <file name="82pluginportal-update-provider.instance_hidden"/>
-            <file name="pluginportal-update-provider.instance_hidden"/>
-        </folder>
-    </folder>
     <folder name="Templates">
         <folder name="Classes">
             <attr name="new.sourceGroup" stringvalue="java"/>
diff --git a/java/java.lsp.server/nbcode/nbproject/project.properties 
b/java/java.lsp.server/nbcode/nbproject/project.properties
index 953ab452f0..e0c2eb4def 100644
--- a/java/java.lsp.server/nbcode/nbproject/project.properties
+++ b/java/java.lsp.server/nbcode/nbproject/project.properties
@@ -25,5 +25,7 @@ 
auxiliary.org-netbeans-modules-apisupport-installer.os-solaris=false
 auxiliary.org-netbeans-modules-apisupport-installer.os-windows=false
 
auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
 modules=\
-    ${project.org.netbeans.modules.nbcode.integration}
+    ${project.org.netbeans.modules.nbcode.integration}:\
+    ${project.org.netbeans.modules.nbcode.integration.java}
 project.org.netbeans.modules.nbcode.integration=integration
+project.org.netbeans.modules.nbcode.integration.java=integration.java
diff --git 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/NbCodeClientCapabilities.java
 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/NbCodeClientCapabilities.java
index 05a5d0c0b9..1e869eec38 100644
--- 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/NbCodeClientCapabilities.java
+++ 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/NbCodeClientCapabilities.java
@@ -65,6 +65,11 @@ public final class NbCodeClientCapabilities {
      */
     private Boolean showHtmlPageSupport;
 
+    /**
+     * Asks for java support.
+     */
+    private Boolean wantsJavaSupport = Boolean.TRUE;
+
     /**
      * Asks for groovy support. Temporary option, will be removed.
      */
@@ -110,6 +115,18 @@ public final class NbCodeClientCapabilities {
         this.showHtmlPageSupport = showHtmlPageSupport;
     }
 
+    public Boolean getWantsJavaSupport() {
+        return wantsJavaSupport;
+    }
+
+    public void setWantsJavaSupport(Boolean enableJava) {
+        this.wantsJavaSupport = enableJava == null ? Boolean.TRUE : enableJava;
+    }
+
+    public boolean wantsJavaSupport() {
+        return wantsJavaSupport.booleanValue();
+    }
+
     public Boolean getWantsGroovySupport() {
         return wantsGroovySupport;
     }
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 8c7143cf58..2a6da513e9 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
@@ -732,8 +732,8 @@ public final class Server {
                 chOpts.setWorkDoneProgress(true);
                 capabilities.setCallHierarchyProvider(chOpts);
                 Set<String> commands = new 
LinkedHashSet<>(Arrays.asList(GRAALVM_PAUSE_SCRIPT,
-                        JAVA_BUILD_WORKSPACE,
-                        JAVA_CLEAN_WORKSPACE,
+                        NBLS_BUILD_WORKSPACE,
+                        NBLS_CLEAN_WORKSPACE,
                         JAVA_RUN_PROJECT_ACTION,
                         JAVA_FIND_DEBUG_ATTACH_CONFIGURATIONS,
                         JAVA_FIND_DEBUG_PROCESS_TO_ATTACH,
@@ -900,8 +900,8 @@ public final class Server {
         }
     }
 
-    public static final String JAVA_BUILD_WORKSPACE =  "java.build.workspace";
-    public static final String JAVA_CLEAN_WORKSPACE =  "java.clean.workspace";
+    public static final String NBLS_BUILD_WORKSPACE =  "nbls.build.workspace";
+    public static final String NBLS_CLEAN_WORKSPACE =  "nbls.clean.workspace";
     public static final String JAVA_NEW_FROM_TEMPLATE =  
"java.new.from.template";
     public static final String JAVA_NEW_PROJECT =  "java.new.project";
     public static final String JAVA_GET_PROJECT_SOURCE_ROOTS = 
"java.get.project.source.roots";
diff --git 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
index 232e940fe9..1f45d80149 100644
--- 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
+++ 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
@@ -1083,6 +1083,9 @@ public class TextDocumentServiceImpl implements 
TextDocumentService, LanguageCli
                         "# {0} - method name", "# {1} - configuration name", 
"LBL_DebugWith=Debug {0} with {1}"})
     @Override
     public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams 
params) {
+        if (!client.getNbCodeCapabilities().wantsJavaSupport()) {
+            return CompletableFuture.completedFuture(Collections.emptyList());
+        }
         // shortcut: if the projects are not yet initialized, return empty:
         if (server.openedProjects().getNow(null) == null) {
             return CompletableFuture.completedFuture(Collections.emptyList());
@@ -1977,7 +1980,9 @@ public class TextDocumentServiceImpl implements 
TextDocumentService, LanguageCli
 
     @CheckForNull
     public JavaSource getJavaSource(String fileUri) {
-        
+        if (!client.getNbCodeCapabilities().wantsJavaSupport()) {
+            return null;
+        }
         Document doc = server.getOpenedDocuments().getDocument(fileUri);
         if (doc == null) {
             FileObject file = fromURI(fileUri);
diff --git 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
index 17c458001d..352906751a 100644
--- 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
+++ 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
@@ -162,7 +162,7 @@ public final class WorkspaceServiceImpl implements 
WorkspaceService, LanguageCli
                 return LspTemplateUI.createFromTemplate("Templates", client, 
params);
             case Server.JAVA_NEW_PROJECT:
                 return LspTemplateUI.createProject("Templates/Project", 
client, params);
-            case Server.JAVA_BUILD_WORKSPACE: {
+            case Server.NBLS_BUILD_WORKSPACE: {
                 final CommandProgress progressOfCompilation = new 
CommandProgress();
                 final Lookup ctx = Lookups.singleton(progressOfCompilation);
                 for (Project prj : 
server.openedProjects().getNow(OpenProjects.getDefault().getOpenProjects())) {
@@ -240,7 +240,7 @@ public final class WorkspaceServiceImpl implements 
WorkspaceService, LanguageCli
                     return progressOfCompilation.getFinishFuture().thenApply(b 
-> (b == Boolean.TRUE) && cfgNotFound);
                 });
             }
-            case Server.JAVA_CLEAN_WORKSPACE: {
+            case Server.NBLS_CLEAN_WORKSPACE: {
                 final CommandProgress progressOfCompilation = new 
CommandProgress();
                 final Lookup ctx = Lookups.singleton(progressOfCompilation);
                 for (Project prj : 
server.openedProjects().getNow(OpenProjects.getDefault().getOpenProjects())) {
@@ -709,157 +709,158 @@ public final class WorkspaceServiceImpl implements 
WorkspaceService, LanguageCli
         };
         WORKER.post(() -> {
             try {
-                SearchType searchType = getSearchType(queryFin, exactFin, 
false, null, null);
                 List<WorkspaceSymbol> symbols = new ArrayList<>();
-                
-                // CSL Part
-                Collection<? extends IndexSearcher> providers = 
Lookup.getDefault().lookupAll(IndexSearcher.class);
-                Set<? extends IndexSearcher.Descriptor> descriptors;
-                if (!providers.isEmpty()) {
-                    for (IndexSearcher provider : providers) {
-                        descriptors = provider.getSymbols(null, queryFin, 
Utils.searchType2QueryKind(searchType), null);
-                        for (IndexSearcher.Descriptor desc : descriptors) {
-                            FileObject fo = desc.getFileObject();
-                            org.netbeans.modules.csl.api.ElementHandle element 
= desc.getElement();
-                            if (fo != null) {
-                                Position startPos = Utils.createPosition(fo, 
desc.getOffset());
-                                Position endPos = Utils.createPosition(fo, 
desc.getOffset() + desc.getSimpleName().length());
-                                WorkspaceSymbol symbol = new WorkspaceSymbol(
-                                        desc.getSimpleName(),
-                                        
Utils.cslElementKind2SymbolKind(element.getKind()),
-                                        Either.forLeft(new 
Location(Utils.toUri(fo), new Range(startPos, endPos))),
-                                        desc.getContextName());
-                                symbols.add(symbol);
+                if (client.getNbCodeCapabilities().wantsJavaSupport()) {
+                    SearchType searchType = getSearchType(queryFin, exactFin, 
false, null, null);
+
+                    // CSL Part
+                    Collection<? extends IndexSearcher> providers = 
Lookup.getDefault().lookupAll(IndexSearcher.class);
+                    Set<? extends IndexSearcher.Descriptor> descriptors;
+                    if (!providers.isEmpty()) {
+                        for (IndexSearcher provider : providers) {
+                            descriptors = provider.getSymbols(null, queryFin, 
Utils.searchType2QueryKind(searchType), null);
+                            for (IndexSearcher.Descriptor desc : descriptors) {
+                                FileObject fo = desc.getFileObject();
+                                org.netbeans.modules.csl.api.ElementHandle 
element = desc.getElement();
+                                if (fo != null) {
+                                    Position startPos = 
Utils.createPosition(fo, desc.getOffset());
+                                    Position endPos = Utils.createPosition(fo, 
desc.getOffset() + desc.getSimpleName().length());
+                                    WorkspaceSymbol symbol = new 
WorkspaceSymbol(
+                                            desc.getSimpleName(),
+                                            
Utils.cslElementKind2SymbolKind(element.getKind()),
+                                            Either.forLeft(new 
Location(Utils.toUri(fo), new Range(startPos, endPos))),
+                                            desc.getContextName());
+                                    symbols.add(symbol);
+                                }
                             }
                         }
                     }
-                }
-                
-                // java part
-                // TODO rewrite the java part into a SymbolProvider
-                JavaSymbolProvider.ResultHandler symbolHandler = new 
JavaSymbolProvider.ResultHandler() {
-                    @Override
-                    public void setHighlightText(String text) {
-                    }
 
-                    private Map<ElementHandle<TypeElement>, List<String>> 
type2Idents;
+                    // Java part
+                    JavaSymbolProvider.ResultHandler symbolHandler = new 
JavaSymbolProvider.ResultHandler() {
+                        @Override
+                        public void setHighlightText(String text) {
+                        }
 
-                    @Override
-                    public void runRoot(FileObject root, ClassIndexImpl ci, 
Exec exec) throws IOException, InterruptedException {
-                        ClasspathInfo cpInfo = ClasspathInfo.create(root);
-                        try {
-                            type2Idents = new HashMap<>();
-                            exec.run();
-                            Map<FileObject, Map<ElementHandle<TypeElement>, 
List<String>>> sources = new HashMap<>();
-                            for (Entry<ElementHandle<TypeElement>, 
List<String>> e : type2Idents.entrySet()) {
-                                FileObject sourceFile = 
SourceUtils.getFile(e.getKey(), cpInfo);
-                                sources.computeIfAbsent(sourceFile, s -> new 
HashMap<>())
-                                       .put(e.getKey(), e.getValue());
-                            }
-                            if (!sources.isEmpty()) {
-                                JavaSource.create(cpInfo, sources.keySet())
-                                        .runUserActionTask(cc -> {
-                                            if 
(Phase.ELEMENTS_RESOLVED.compareTo(cc.toPhase(Phase.ELEMENTS_RESOLVED))> 0) {
-                                                return ;
-                                            }
-                                            for 
(Entry<ElementHandle<TypeElement>, List<String>> e : 
sources.get(cc.getFileObject()).entrySet()) {
-                                                TypeElement te = 
e.getKey().resolve(cc);
+                        private Map<ElementHandle<TypeElement>, List<String>> 
type2Idents;
 
-                                                if (te == null) {
-                                                    //cannot resolve
-                                                    continue;
+                        @Override
+                        public void runRoot(FileObject root, ClassIndexImpl 
ci, Exec exec) throws IOException, InterruptedException {
+                            ClasspathInfo cpInfo = ClasspathInfo.create(root);
+                            try {
+                                type2Idents = new HashMap<>();
+                                exec.run();
+                                Map<FileObject, 
Map<ElementHandle<TypeElement>, List<String>>> sources = new HashMap<>();
+                                for (Entry<ElementHandle<TypeElement>, 
List<String>> e : type2Idents.entrySet()) {
+                                    FileObject sourceFile = 
SourceUtils.getFile(e.getKey(), cpInfo);
+                                    sources.computeIfAbsent(sourceFile, s -> 
new HashMap<>())
+                                           .put(e.getKey(), e.getValue());
+                                }
+                                if (!sources.isEmpty()) {
+                                    JavaSource.create(cpInfo, sources.keySet())
+                                            .runUserActionTask(cc -> {
+                                                if 
(Phase.ELEMENTS_RESOLVED.compareTo(cc.toPhase(Phase.ELEMENTS_RESOLVED))> 0) {
+                                                    return ;
                                                 }
+                                                for 
(Entry<ElementHandle<TypeElement>, List<String>> e : 
sources.get(cc.getFileObject()).entrySet()) {
+                                                    TypeElement te = 
e.getKey().resolve(cc);
 
-                                                for (String ident : 
e.getValue()) {
-                                                    if 
(ident.equals(getSimpleName(te, null, false))) {
-                                                        TreePath path = 
cc.getTrees().getPath(te);
-
-                                                        if (path != null) {
-                                                            final String 
symbolName = te.getSimpleName().toString();
-                                                            final ElementKind 
kind = te.getKind();
-                                                            if 
(!kind.isClass() && !kind.isInterface()) {
-                                                                
WorkspaceSymbol symbol = new WorkspaceSymbol(symbolName, 
Utils.elementKind2SymbolKind(kind), Either.forLeft(tree2Location(cc, path)), 
te.getQualifiedName().toString());
-                                                                
symbols.add(symbol);
-                                                            }
-                                                        }
+                                                    if (te == null) {
+                                                        //cannot resolve
+                                                        continue;
                                                     }
-                                                    for (Element ne : 
te.getEnclosedElements()) {
-                                                        if 
(ident.equals(getSimpleName(ne, te, false))) {
-                                                            TreePath path = 
cc.getTrees().getPath(ne);
+
+                                                    for (String ident : 
e.getValue()) {
+                                                        if 
(ident.equals(getSimpleName(te, null, false))) {
+                                                            TreePath path = 
cc.getTrees().getPath(te);
 
                                                             if (path != null) {
-                                                                final 
Pair<String,String> name = JavaSymbolProvider.getDisplayName(ne, te);
-                                                                final String 
symbolName = name.first() + (name.second() != null ? name.second() : "");
-                                                                final 
ElementKind kind = ne.getKind();
+                                                                final String 
symbolName = te.getSimpleName().toString();
+                                                                final 
ElementKind kind = te.getKind();
                                                                 if 
(!kind.isClass() && !kind.isInterface()) {
                                                                     
WorkspaceSymbol symbol = new WorkspaceSymbol(symbolName, 
Utils.elementKind2SymbolKind(kind), Either.forLeft(tree2Location(cc, path)), 
te.getQualifiedName().toString());
                                                                     
symbols.add(symbol);
                                                                 }
                                                             }
                                                         }
+                                                        for (Element ne : 
te.getEnclosedElements()) {
+                                                            if 
(ident.equals(getSimpleName(ne, te, false))) {
+                                                                TreePath path 
= cc.getTrees().getPath(ne);
+
+                                                                if (path != 
null) {
+                                                                    final 
Pair<String,String> name = JavaSymbolProvider.getDisplayName(ne, te);
+                                                                    final 
String symbolName = name.first() + (name.second() != null ? name.second() : "");
+                                                                    final 
ElementKind kind = ne.getKind();
+                                                                    if 
(!kind.isClass() && !kind.isInterface()) {
+                                                                        
WorkspaceSymbol symbol = new WorkspaceSymbol(symbolName, 
Utils.elementKind2SymbolKind(kind), Either.forLeft(tree2Location(cc, path)), 
te.getQualifiedName().toString());
+                                                                        
symbols.add(symbol);
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
                                                     }
                                                 }
-                                            }
-                                        }, true);
+                                            }, true);
+                                }
+                                //TODO: handle exceptions
+                            } finally {
+                                type2Idents = null;
                             }
-                            //TODO: handle exceptions
-                        } finally {
-                            type2Idents = null;
                         }
-                    }
 
-                    @Override
-                    public void handleResult(ElementHandle<TypeElement> owner, 
String ident, boolean caseSensitive) {
-                        type2Idents.computeIfAbsent(owner, s -> new 
ArrayList<>()).add(ident);
-                    }
-                };
-                JavaSymbolProvider.doComputeSymbols(searchType, queryFin, 
symbolHandler, true, cancel);
-                List<Pair<ElementHandle<TypeElement>, FileObject>> pairs = new 
ArrayList<>();
-                
JavaTypeProvider.ResultHandler<Pair<ElementHandle<TypeElement>, FileObject>> 
typeHandler = new 
JavaTypeProvider.ResultHandler<Pair<ElementHandle<TypeElement>, FileObject>>() {
-                    private FileObject root;
+                        @Override
+                        public void handleResult(ElementHandle<TypeElement> 
owner, String ident, boolean caseSensitive) {
+                            type2Idents.computeIfAbsent(owner, s -> new 
ArrayList<>()).add(ident);
+                        }
+                    };
+                    JavaSymbolProvider.doComputeSymbols(searchType, queryFin, 
symbolHandler, true, cancel);
+                    List<Pair<ElementHandle<TypeElement>, FileObject>> pairs = 
new ArrayList<>();
+                    
JavaTypeProvider.ResultHandler<Pair<ElementHandle<TypeElement>, FileObject>> 
typeHandler = new 
JavaTypeProvider.ResultHandler<Pair<ElementHandle<TypeElement>, FileObject>>() {
+                        private FileObject root;
 
-                    @Override
-                    public void setMessage(String msg) {
-                    }
+                        @Override
+                        public void setMessage(String msg) {
+                        }
 
-                    @Override
-                    public void setHighlightText(String text) {
-                    }
+                        @Override
+                        public void setHighlightText(String text) {
+                        }
 
-                    @Override
-                    public void pendingResult() {
-                    }
+                        @Override
+                        public void pendingResult() {
+                        }
 
-                    @Override
-                    public void runRoot(FileObject root, 
JavaTypeProvider.ResultHandler.Exec exec) throws IOException, 
InterruptedException {
-                        this.root = root;
-                        try {
-                            exec.run();
-                        } finally {
-                            this.root = null;
+                        @Override
+                        public void runRoot(FileObject root, 
JavaTypeProvider.ResultHandler.Exec exec) throws IOException, 
InterruptedException {
+                            this.root = root;
+                            try {
+                                exec.run();
+                            } finally {
+                                this.root = null;
+                            }
                         }
-                    }
 
-                    @Override
-                    public Pair<ElementHandle<TypeElement>, FileObject> 
create(JavaTypeProvider.CacheItem cacheItem, ElementHandle<TypeElement> handle, 
String simpleName, String relativePath) {
-                        return Pair.of(handle, this.root);
-                    }
+                        @Override
+                        public Pair<ElementHandle<TypeElement>, FileObject> 
create(JavaTypeProvider.CacheItem cacheItem, ElementHandle<TypeElement> handle, 
String simpleName, String relativePath) {
+                            return Pair.of(handle, this.root);
+                        }
 
-                    @Override
-                    public void addResult(List<? extends 
Pair<ElementHandle<TypeElement>, FileObject>> types) {
-                        pairs.addAll(types);
+                        @Override
+                        public void addResult(List<? extends 
Pair<ElementHandle<TypeElement>, FileObject>> types) {
+                            pairs.addAll(types);
+                        }
+                    };
+                    JavaTypeProvider.doComputeTypes(searchType, queryFin, 
typeHandler, cancel);
+                    for (Pair<ElementHandle<TypeElement>, FileObject> pair : 
pairs) {
+                        ElementHandle<TypeElement> handle = pair.first();
+                        String fqn = handle.getQualifiedName();
+                        int idx = fqn.lastIndexOf('.');
+                        String simpleName = idx < 0 ? fqn : fqn.substring(idx 
+ 1);
+                        String contextName = idx < 0 ? null : fqn.substring(0, 
idx);
+                        String uri = 
URLEncoder.encode(pair.second().toURI().toString() + '?' + 
handle.getKind().name() + '#' + handle.getBinaryName(), 
StandardCharsets.UTF_8.toString());
+                        WorkspaceSymbol symbol = new 
WorkspaceSymbol(simpleName, Utils.elementKind2SymbolKind(handle.getKind()), 
Either.forRight(new WorkspaceSymbolLocation(SOURCE_FOR + uri)), contextName);
+                        symbols.add(symbol);
                     }
-                };
-                JavaTypeProvider.doComputeTypes(searchType, queryFin, 
typeHandler, cancel);
-                for (Pair<ElementHandle<TypeElement>, FileObject> pair : 
pairs) {
-                    ElementHandle<TypeElement> handle = pair.first();
-                    String fqn = handle.getQualifiedName();
-                    int idx = fqn.lastIndexOf('.');
-                    String simpleName = idx < 0 ? fqn : fqn.substring(idx + 1);
-                    String contextName = idx < 0 ? null : fqn.substring(0, 
idx);
-                    String uri = 
URLEncoder.encode(pair.second().toURI().toString() + '?' + 
handle.getKind().name() + '#' + handle.getBinaryName(), 
StandardCharsets.UTF_8.toString());
-                    WorkspaceSymbol symbol = new WorkspaceSymbol(simpleName, 
Utils.elementKind2SymbolKind(handle.getKind()), Either.forRight(new 
WorkspaceSymbolLocation(SOURCE_FOR + uri)), contextName);
-                    symbols.add(symbol);
                 }
                 result.complete(Either.forRight(symbols));
             } catch (Throwable t) {
@@ -941,7 +942,7 @@ public final class WorkspaceServiceImpl implements 
WorkspaceService, LanguageCli
     }
 
     void updateJavaFormatPreferences(FileObject fo, JsonObject configuration) {
-        if (configuration != null) {
+        if (configuration != null && 
client.getNbCodeCapabilities().wantsJavaSupport()) {
             NbPreferences.Provider provider = 
Lookup.getDefault().lookup(NbPreferences.Provider.class);
             Preferences prefs = provider != null ? 
provider.preferencesRoot().node("de/funfried/netbeans/plugins/externalcodeformatter")
 : null;
             JsonPrimitive formatterPrimitive = 
configuration.getAsJsonPrimitive("codeFormatter");
diff --git a/java/java.lsp.server/vscode/package.json 
b/java/java.lsp.server/vscode/package.json
index 8065fe1a1a..6eb49353a9 100644
--- a/java/java.lsp.server/vscode/package.json
+++ b/java/java.lsp.server/vscode/package.json
@@ -65,7 +65,7 @@
                                {
                                        "id": "foundProjects",
                                        "name": "Projects",
-                                       "when": "nbJavaLSReady"
+                                       "when": "nbJavaLSReady && 
config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "id": "database.connections",
@@ -85,12 +85,12 @@
                                }
                        ]
                },
-                "viewsWelcome": [
+               "viewsWelcome": [
                        {
                                "view": "database.connections",
                                "contents": "No Database Connections 
found.\n[Add a new connection](command:db.add.connection)"
                        }
-                ],
+               ],
                "configuration": {
                        "title": "Java",
                        "properties": {
@@ -136,6 +136,11 @@
                                        "default": false,
                                        "description": "Enable Run/Debug test 
in editor"
                                },
+                               "netbeans.javaSupport.enabled": {
+                                       "type": "boolean",
+                                       "default": true,
+                                       "description": "Enables Java support in 
Language Server"
+                               },
                                "netbeans.groovySupport.enabled": {
                                        "type": "boolean",
                                        "default": true,
@@ -231,6 +236,7 @@
                                "type": "java8+",
                                "label": "Java 8+",
                                "runtime": "node",
+                               "when": "config.netbeans.javaSupport.enabled",
                                "languages": [
                                        "java",
                                        "groovy"
@@ -435,12 +441,12 @@
                ],
                "commands": [
                        {
-                               "command": "java.workspace.compile",
+                               "command": "nbls.workspace.compile",
                                "title": "Compile Workspace",
                                "category": "Java"
                        },
                        {
-                               "command": "java.clean.workspace",
+                               "command": "nbls.workspace.clean",
                                "title": "Clean Workspace",
                                "category": "Java"
                        },
@@ -479,7 +485,7 @@
                                "command": "db.add.connection",
                                "title": "Add Database Connection",
                                "category": "Database",
-                                "icon": "$(add)"
+                               "icon": "$(add)"
                        },
                        {
                                "command": 
"nbls:Database:netbeans.db.explorer.action.Connect",
@@ -496,22 +502,22 @@
                        {
                                "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.CreateBuildRun",
                                "title": "Run",
-                                "icon": "$(run)"
+                               "icon": "$(run)"
                        },
                        {
                                "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddRepository",
                                "title": "Add Repository",
-                                "icon": "$(github-alt)"
+                               "icon": "$(github-alt)"
                        },
                        {
                                "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddToProject",
                                "title": "Add To Project",
-                                "icon": "$(star-empty)"
+                               "icon": "$(star-empty)"
                        },
                        {
                                "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.CloudRefresh",
                                "title": "Refresh",
-                                "icon": "$(refresh)"
+                               "icon": "$(refresh)"
                        },
                        {
                                "command": 
"nbls:Edit:org.openide.actions.DeleteAction",
@@ -594,28 +600,28 @@
                ],
                "keybindings": [
                        {
-                               "command": "java.workspace.compile",
+                               "command": "nbls.workspace.compile",
                                "key": "shift+alt+b",
-                               "when": "nbJavaLSReady"
+                               "when": "nbJavaLSReady && 
config.netbeans.javaSupport.enabled"
                        },
                        {
                                "command": "java.goto.super.implementation",
                                "key": "alt+U",
                                "mac": "alt+cmd+U",
-                               "when": "editorHasCodeActionsProvider && 
editorTextFocus"
+                               "when": "editorHasCodeActionsProvider && 
editorTextFocus && config.netbeans.javaSupport.enabled"
                        },
                        {
                                "command": "editor.action.sourceAction",
                                "key": "alt+insert",
                                "mac": "ctrl+alt+enter",
-                               "when": "editorHasCodeActionsProvider && 
editorTextFocus && !editorReadonly"
+                               "when": "editorHasCodeActionsProvider && 
editorTextFocus && !editorReadonly && config.netbeans.javaSupport.enabled"
                        }
                ],
                "menus": {
                        "editor/context": [
                                {
                                        "command": 
"java.goto.super.implementation",
-                                       "when": "nbJavaLSReady && editorLangId 
== java && editorTextFocus",
+                                       "when": "nbJavaLSReady && editorLangId 
== java && editorTextFocus && config.netbeans.javaSupport.enabled",
                                        "group": "navigation@100"
                                }
                        ],
@@ -632,15 +638,16 @@
                                        "when": "nbJavaLSReady"
                                },
                                {
-                                       "command": "java.workspace.newproject"
+                                       "command": "java.workspace.newproject",
+                                       "when": 
"config.netbeans.javaSupport.enabled"
                                },
                                {
-                                       "command": "java.workspace.compile",
-                                       "when": "nbJavaLSReady"
+                                       "command": "nbls.workspace.compile",
+                                       "when": "nbJavaLSReady && 
config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": 
"java.goto.super.implementation",
-                                       "when": "nbJavaLSReady && editorLangId 
== java"
+                                       "when": "nbJavaLSReady && editorLangId 
== java && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": "graalvm.pause.script",
@@ -706,39 +713,39 @@
                        "view/title": [
                                {
                                        "command": "java.workspace.newproject",
-                                       "when": "nbJavaLSReady && view == 
foundProjects",
+                                       "when": "nbJavaLSReady && view == 
foundProjects && config.netbeans.javaSupport.enabled",
                                        "group": "navigation"
                                },
                                {
-                                       "command": "java.workspace.compile",
-                                       "when": "nbJavaLSReady && view == 
foundProjects"
+                                       "command": "nbls.workspace.compile",
+                                       "when": "nbJavaLSReady && view == 
foundProjects && config.netbeans.javaSupport.enabled"
                                },
                                {
-                                       "command": "java.clean.workspace",
-                                       "when": "nbJavaLSReady && view == 
foundProjects"
+                                       "command": "nbls.workspace.clean",
+                                       "when": "nbJavaLSReady && view == 
foundProjects && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": "testing.runAll",
-                                       "when": "nbJavaLSReady && view == 
foundProjects"
+                                       "when": "nbJavaLSReady && view == 
foundProjects && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": "workbench.action.debug.run",
-                                       "when": "nbJavaLSReady && view == 
foundProjects"
+                                       "when": "nbJavaLSReady && view == 
foundProjects && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": 
"workbench.action.debug.start",
-                                       "when": "nbJavaLSReady && view == 
foundProjects"
+                                       "when": "nbJavaLSReady && view == 
foundProjects && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": "db.add.connection",
-                                        "when": "view == database.connections",
-                                        "group": "navigation@3"
+                                       "when": "view == database.connections",
+                                       "group": "navigation@3"
                                }
                        ],
                        "view/item/context": [
                                {
                                        "command": "foundProjects.deleteEntry",
-                                       "when": "view == foundProjects && 
viewItem == node"
+                                       "when": "view == foundProjects && 
viewItem == node && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": 
"nbls:Database:netbeans.db.explorer.action.Connect",
@@ -763,25 +770,25 @@
                                },
                                {
                                        "command": "java.project.run",
-                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && viewItem =~ /^(?!.*is:projectRoot)/",
+                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && viewItem =~ /^(?!.*is:projectRoot)/ && 
config.netbeans.javaSupport.enabled",
                                        "group": "inline@10"
                                },
                                {
                                        "command": "java.project.debug",
-                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && viewItem =~ /^(?!.*is:projectRoot)/",
+                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && viewItem =~ /^(?!.*is:projectRoot)/ && 
config.netbeans.javaSupport.enabled",
                                        "group": "inline@11"
                                },
                                {
                                        "command": "java.project.test",
-                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && viewItem =~ /^(?!.*is:projectRoot)/"
+                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && viewItem =~ /^(?!.*is:projectRoot)/ && 
config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": "java.project.compile",
-                                       "when": "view == foundProjects && 
viewItem =~ /is:project/"
+                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": "java.project.clean",
-                                       "when": "view == foundProjects && 
viewItem =~ /is:project/"
+                                       "when": "view == foundProjects && 
viewItem =~ /is:project/ && config.netbeans.javaSupport.enabled"
                                },
                                {
                                        "command": 
"java.local.db.set.preferred.connection",
@@ -802,26 +809,26 @@
                                {
                                        "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddRepository",
                                        "when": "viewItem =~ 
/class:oracle.devops.DevopsProjectItem/",
-                                        "group": "inline@12"
+                                       "group": "inline@12"
                                },
                                {
                                        "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.CreateBuildRun",
                                        "when": "viewItem =~ 
/class:oracle.devops.BuildPipelineItem/",
-                                        "group": "inline@12"
+                                       "group": "inline@12"
                                },
                                {
                                        "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddToProject",
                                        "when": "viewItem =~ /class:oracle/",
-                                        "group": "inline@14"
+                                       "group": "inline@14"
                                },
                                {
                                        "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.CloudRefresh",
                                        "when": "viewItem =~ /class:oracle/",
-                                        "group": "inline@13"
+                                       "group": "inline@13"
                                },
                                {
                                        "command": 
"java.workspace.configureRunSettings",
-                                       "when": "view == run-config && viewItem 
== configureRunSettings",
+                                       "when": "view == run-config && viewItem 
== configureRunSettings && config.netbeans.javaSupport.enabled",
                                        "group": "inline@1"
                                }
                        ]
@@ -949,33 +956,33 @@
                                "uriExpression": 
"nbres:/org/netbeans/modules/cloud/oracle/resources/deploy_artifact.svg",
                                "codeicon": "file-binary"
                        },
-                        {
-                                "uriExpression": 
"nbres:/org/netbeans/modules/cloud/oracle/resources/green_dot.svg",
-                                "codeicon": "pass",
-                                "color": "charts.green"
-                        },
-                        {
-                                "uriExpression": 
"nbres:/org/netbeans/modules/cloud/oracle/resources/red_dot.svg",
-                                "codeicon": "error",
-                                "color": "charts.red"
-                        },
-                        {
-                                "uriExpression": 
"nbres:/org/netbeans/modules/db/resources/connection_nbcode.svg",
-                                "codeicon": "database"
-                        },
-                        {
-                                "uriExpression": 
"nbres:/org/netbeans/modules/db/resources/connectionDisconnected_nbcode.svg",
-                                "codeicon": "debug-disconnect"
-                        },
-                        {
-                                "uriExpression": 
"nbres:/org/netbeans/modules/db/resources/folder_nbcode.svg",
-                                "codeicon": ""
-                        },
-                        {
-                                "uriExpression": 
"nbres:/org/netbeans/modules/cloud/oracle/resources/yellow_dot.svg",
-                                "codeicon": "circle-large-outline",
-                                "color": "charts.yellow"
-                        }
+                       {
+                               "uriExpression": 
"nbres:/org/netbeans/modules/cloud/oracle/resources/green_dot.svg",
+                               "codeicon": "pass",
+                               "color": "charts.green"
+                       },
+                       {
+                               "uriExpression": 
"nbres:/org/netbeans/modules/cloud/oracle/resources/red_dot.svg",
+                               "codeicon": "error",
+                               "color": "charts.red"
+                       },
+                       {
+                               "uriExpression": 
"nbres:/org/netbeans/modules/db/resources/connection_nbcode.svg",
+                               "codeicon": "database"
+                       },
+                       {
+                               "uriExpression": 
"nbres:/org/netbeans/modules/db/resources/connectionDisconnected_nbcode.svg",
+                               "codeicon": "debug-disconnect"
+                       },
+                       {
+                               "uriExpression": 
"nbres:/org/netbeans/modules/db/resources/folder_nbcode.svg",
+                               "codeicon": ""
+                       },
+                       {
+                               "uriExpression": 
"nbres:/org/netbeans/modules/cloud/oracle/resources/yellow_dot.svg",
+                               "codeicon": "circle-large-outline",
+                               "color": "charts.yellow"
+                       }
                ],
                "jsonValidation": [
                        {
@@ -1016,4 +1023,4 @@
                "publisherId": "4dbc1d1a-d64b-46f8-8756-1c234855f645",
                "isPreReleaseVersion": false
        }
-}
\ No newline at end of file
+}
diff --git a/java/java.lsp.server/vscode/src/extension.ts 
b/java/java.lsp.server/vscode/src/extension.ts
index 5f6733eb8f..37a707950c 100644
--- a/java/java.lsp.server/vscode/src/extension.ts
+++ b/java/java.lsp.server/vscode/src/extension.ts
@@ -153,7 +153,8 @@ export function awaitClient() : Promise<NbLanguageClient> {
 
 function findJDK(onChange: (path : string | null) => void): void {
     let nowDark : boolean = isDarkColorTheme();
-function find(): string | null {
+    let nowJavaEnabled : boolean = isJavaSupportEnabled();
+    function find(): string | null {
         let nbJdk = workspace.getConfiguration('netbeans').get('jdkhome');
         if (nbJdk) {
             return nbJdk as string;
@@ -196,8 +197,10 @@ function find(): string | null {
             timeout = undefined;
             let newJdk = find();
             let newD = isDarkColorTheme();
-            if (newJdk !== currentJdk || newD != nowDark) {
+            let newJavaEnabled = isJavaSupportEnabled();
+            if (newJdk !== currentJdk || newD != nowDark || newJavaEnabled != 
nowJavaEnabled) {
                 nowDark = newD;
+                nowJavaEnabled = newJavaEnabled;
                 currentJdk = newJdk;
                 onChange(currentJdk);
             }
@@ -292,24 +295,31 @@ function wrapCommandWithProgress(lsCommand : string, 
title : string, log? : vsco
 export function activate(context: ExtensionContext): VSNetBeansAPI {
     let log = vscode.window.createOutputChannel("Apache NetBeans Language 
Server");
 
-    let conf = workspace.getConfiguration();
-    if (conf.get("netbeans.conflict.check")) {
-        const id = 'redhat.java';
-        let e = vscode.extensions.getExtension(id);
-        function disablingFailed(reason: any) {
-            handleLog(log, 'Disabling some services failed ' + reason);
-        }
-        if (e && workspace.name) {
-            vscode.window.showInformationMessage(`Another Java support 
extension is already installed. It is recommended to use only one Java support 
per workspace.`, `Manually disable`).then(() => {
-                
vscode.commands.executeCommand('workbench.extensions.action.showInstalledExtensions');
-            });
+    function checkConflict(): void {
+        let conf = workspace.getConfiguration();
+        if (conf.get("netbeans.conflict.check") && 
conf.get("netbeans.javaSupport.enabled")) {
+            const id = 'redhat.java';
+            let e = vscode.extensions.getExtension(id);
+            if (e && workspace.name) {
+                const DISABLE_EXTENSION = `Manually disable extension`;
+                const DISABLE_JAVA = `Disable Java in Apache NetBeans Language 
Server`;
+                vscode.window.showInformationMessage(`Another Java support 
extension is already installed. It is recommended to use only one Java support 
per workspace.`, DISABLE_EXTENSION, DISABLE_JAVA).then((selected) => {
+                    if (DISABLE_EXTENSION === selected) {
+                        
vscode.commands.executeCommand('workbench.extensions.action.showInstalledExtensions');
+                    } else if (DISABLE_JAVA === selected) {
+                        conf.update("netbeans.javaSupport.enabled", true, 
false);
+                    }
+                });
+            }
         }
     }
+    checkConflict();
 
     // find acceptable JDK and launch the Java part
     findJDK((specifiedJDK) => {
         let currentClusters = findClusters(context.extensionPath).sort();
         context.subscriptions.push(vscode.extensions.onDidChange(() => {
+            checkConflict();
             const newClusters = findClusters(context.extensionPath).sort();
             if (newClusters.length !== currentClusters.length || 
newClusters.find((value, index) => value !== currentClusters[index])) {
                 currentClusters = newClusters;
@@ -396,11 +406,11 @@ export function activate(context: ExtensionContext): 
VSNetBeansAPI {
             throw `Client ${c} doesn't support new project`;
         }
     }));
-    
context.subscriptions.push(commands.registerCommand('java.workspace.compile', 
() => 
-        wrapCommandWithProgress('java.build.workspace', 'Compiling 
workspace...', log, true)
+    
context.subscriptions.push(commands.registerCommand('nbls.workspace.compile', 
() =>
+        wrapCommandWithProgress('nbls.build.workspace', 'Compiling 
workspace...', log, true)
     ));
-    
context.subscriptions.push(commands.registerCommand('java.workspace.clean', () 
=> 
-        wrapCommandWithProgress('java.build.workspace', 'Cleaning 
workspace...', log, true)
+    
context.subscriptions.push(commands.registerCommand('nbls.workspace.clean', () 
=>
+        wrapCommandWithProgress('nbls.clean.workspace', 'Cleaning 
workspace...', log, true)
     ));
     
context.subscriptions.push(commands.registerCommand('java.project.compile', 
(args) => {
         wrapProjectActionWithProgress('build', undefined, 'Compiling...', log, 
true, args);
@@ -632,6 +642,10 @@ function isDarkColorTheme() : boolean {
     return false;
 }
 
+function isJavaSupportEnabled() : boolean {
+    return workspace.getConfiguration('netbeans')?.get('javaSupport.enabled') 
as boolean;
+}
+
 function doActivateWithJDK(specifiedJDK: string | null, context: 
ExtensionContext, log : vscode.OutputChannel, notifyKill: boolean,
     setClient : [(c : NbLanguageClient) => void, (err : any) => void]
 ): void {
@@ -693,6 +707,11 @@ function doActivateWithJDK(specifiedJDK: string | null, 
context: ExtensionContex
         if (isDarkColorTheme()) {
             extras.push('--laf', 'com.formdev.flatlaf.FlatDarkLaf');
         }
+        if (isJavaSupportEnabled()) {
+            extras.push('--direct-disable', 
'org.netbeans.modules.nbcode.integration.java');
+        } else {
+            extras.push('--enable', 
'org.netbeans.modules.nbcode.integration.java');
+        }
         let p = launcher.launch(info, ...extras);
         handleLog(log, "LSP server launching: " + p.pid);
         handleLog(log, "LSP server user directory: " + userdir);
@@ -777,7 +796,8 @@ function doActivateWithJDK(specifiedJDK: string | null, 
context: ExtensionContex
                 { language: 'xml', pattern: '**/pom.xml' },
                 { pattern: '**/build.gradle'}
         ];
-        const enableGroovy : boolean = 
conf.get("netbeans.groovySupport.enabled") || true;
+        const enableJava = isJavaSupportEnabled();
+        const enableGroovy : boolean = 
conf.get("netbeans.groovySupport.enabled") as boolean;
         if (enableGroovy) {
             documentSelectors.push({ language: 'groovy'});
         }
@@ -802,6 +822,7 @@ function doActivateWithJDK(specifiedJDK: string | null, 
context: ExtensionContex
                     'statusBarMessageSupport' : true,
                     'testResultsSupport' : true,
                     'showHtmlPageSupport' : true,
+                    'wantsJavaSupport' : enableJava,
                     'wantsGroovySupport' : enableGroovy
                 }
             },
@@ -829,7 +850,9 @@ function doActivateWithJDK(specifiedJDK: string | null, 
context: ExtensionContex
         );
         handleLog(log, 'Language Client: Starting');
         c.start().then(() => {
-            testAdapter = new NbTestAdapter();
+            if (isJavaSupportEnabled()) {
+                testAdapter = new NbTestAdapter();
+            }
             c.onNotification(StatusMessageRequest.type, showStatusBarMessage);
             c.onRequest(HtmlPageRequest.type, showHtmlPage);
             c.onNotification(LogMessageNotification.type, (param) => 
handleLog(log, param.message));
@@ -933,9 +956,11 @@ function doActivateWithJDK(specifiedJDK: string | null, 
context: ExtensionContex
             setClient[0](c);
             commands.executeCommand('setContext', 'nbJavaLSReady', true);
         
-            // create project explorer:
-            //c.findTreeViewService().createView('foundProjects', 'Projects', 
{ canSelectMany : false });
-            createProjectView(context, c);
+            if (enableJava) {
+                // create project explorer:
+                //c.findTreeViewService().createView('foundProjects', 
'Projects', { canSelectMany : false });
+                createProjectView(context, c);
+            }
 
             createDatabaseView(c);
             c.findTreeViewService().createView('cloud.resources', undefined, { 
canSelectMany : false });
diff --git a/java/java.lsp.server/vscode/src/test/suite/extension.test.ts 
b/java/java.lsp.server/vscode/src/test/suite/extension.test.ts
index dd815c0fc4..ef0dad3f42 100644
--- a/java/java.lsp.server/vscode/src/test/suite/extension.test.ts
+++ b/java/java.lsp.server/vscode/src/test/suite/extension.test.ts
@@ -94,7 +94,7 @@ suite('Extension Test Suite', () => {
 
         try {
             console.log("Test: invoking compile");
-            let res = await 
vscode.commands.executeCommand("java.workspace.compile");
+            let res = await 
vscode.commands.executeCommand("nbls.workspace.compile");
             console.log(`Test: compile finished with ${res}`);
         } catch (error) {
             dumpJava();


---------------------------------------------------------------------
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