Merge pull request #4595 from sdedic/lsp/projectInfo

Project info exported through LSP
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectFactory.java b/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectFactory.java
index 628e3f8..6663416 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectFactory.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectFactory.java
@@ -43,7 +43,12 @@
 
     @Override
     public ProjectManager.Result isProject2(FileObject dir) {
-        return isProject(dir) ? new ProjectManager.Result(NbGradleProject.getIcon()) : null;
+        if (!isProject(dir)) {
+            return null;
+        }
+        // project display name can be only safely determined if the project is loaded
+        return isProject(dir) ? new ProjectManager.Result(
+                null, NbGradleProject.GRADLE_PROJECT_TYPE, NbGradleProject.getIcon()) : null;
     }
 
     @Override
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleFiles.java b/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleFiles.java
index 5652510..eca56b7 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleFiles.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/spi/GradleFiles.java
@@ -220,7 +220,7 @@
     }
 
     public boolean isRootProject() {
-        return (buildScript != null) && rootDir.equals(projectDir);
+        return isProject() && rootDir.equals(projectDir);
     }
 
     public boolean isSubProject() {
diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/NbGradleProjectFactoryTest.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/NbGradleProjectFactoryTest.java
index 4041f77..c2ea1e5 100644
--- a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/NbGradleProjectFactoryTest.java
+++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/NbGradleProjectFactoryTest.java
@@ -21,6 +21,7 @@
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Random;
+import org.netbeans.modules.gradle.api.NbGradleProject;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 import org.openide.filesystems.LocalFileSystem;
@@ -129,9 +130,31 @@
         }
         FileObject app = FileUtil.createFolder(parentPrj, "app");
         FileObject gradle = FileUtil.createData(app, "build.gradle");
-
+        assertProjectsRecognized(parentPrj, app);
+    }
+    
+    private void assertProjectsRecognized(FileObject parentPrj, FileObject app) {
         assertTrue("Parent Gradle recognized", NbGradleProjectFactory.isProjectCheck(parentPrj, false));
         assertTrue("Child Gradle recognized", NbGradleProjectFactory.isProjectCheck(app, false));
+        NbGradleProjectFactory factoryInstance = new NbGradleProjectFactory();
+        assertEquals("Gradle project type of main project", NbGradleProject.GRADLE_PROJECT_TYPE, factoryInstance.isProject2(parentPrj).getProjectType());
+        assertEquals("Gradle project type of subproject", NbGradleProject.GRADLE_PROJECT_TYPE, factoryInstance.isProject2(app).getProjectType());
+    }
+    
+    /**
+     * Checks that project with just settings.gradle and no build.gradle is recognized as a project.
+     */
+    public void testNoBuildFileProject() throws Exception {
+        FileObject parentPrj = root;
+        FileObject settings = FileUtil.createData(parentPrj, "settings.gradle");
+        try (OutputStream os = settings.getOutputStream()) {
+            os.write(("\n"
+                    + "rootProject.name = 'example'\n"
+                    + "include('app')\n"
+            ).getBytes(StandardCharsets.UTF_8));
+        }
+        FileObject app = FileUtil.createFolder(parentPrj, "app");
+        assertProjectsRecognized(parentPrj, app);
     }
 
 }
diff --git a/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java b/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java
index 468d86c..2f570f0 100644
--- a/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java
+++ b/ide/editor/src/org/netbeans/modules/editor/NbEditorDocument.java
@@ -130,7 +130,6 @@
                 return null;
             }
         });
-        putProperty("Issue-222763-debug", new Exception()); // Issue #222763 debugging - to be removed soon
     }
 
     public @Override int getShiftWidth() {
diff --git a/java/java.lsp.server/vscode/src/extension.ts b/java/java.lsp.server/vscode/src/extension.ts
index 4198f42..be5fe62 100644
--- a/java/java.lsp.server/vscode/src/extension.ts
+++ b/java/java.lsp.server/vscode/src/extension.ts
@@ -301,15 +301,19 @@
             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", false, true);
-                    }
-                });
+                if (vscode.extensions.getExtension('oracle-labs-graalvm.gcn')) {
+                    conf.update("netbeans.javaSupport.enabled", false, true);
+                } else {
+                    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", false, true);
+                        }
+                    });
+                }
             }
         }
     }
diff --git a/java/maven/src/org/netbeans/modules/maven/NbMavenProjectFactory.java b/java/maven/src/org/netbeans/modules/maven/NbMavenProjectFactory.java
index 3346cae..69f1f94 100644
--- a/java/maven/src/org/netbeans/modules/maven/NbMavenProjectFactory.java
+++ b/java/maven/src/org/netbeans/modules/maven/NbMavenProjectFactory.java
@@ -24,6 +24,7 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.netbeans.api.project.Project;
 import org.netbeans.api.project.ProjectManager;
+import org.netbeans.modules.maven.api.NbMavenProject;
 import org.netbeans.spi.project.ProjectFactory;
 import org.netbeans.spi.project.ProjectFactory2;
 import org.netbeans.spi.project.ProjectState;
@@ -77,7 +78,9 @@
 
     public @Override ProjectManager.Result isProject2(FileObject projectDirectory) {
         if (isProject(projectDirectory)) {
-            return new ProjectManager.Result(ImageUtilities.loadImageIcon("org/netbeans/modules/maven/resources/Maven2Icon.gif", true)); //NOI18N
+            return new ProjectManager.Result(
+                    null, NbMavenProject.TYPE, 
+                    ImageUtilities.loadImageIcon("org/netbeans/modules/maven/resources/Maven2Icon.gif", true)); //NOI18N
         }
         return null;
     }