From 598d6207521ca332e3e18462afbda9b68ea1103b Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 7 Apr 2021 12:26:30 +0800 Subject: [PATCH 1/3] feat: Add metadata for unmanaged folder --- .../jdtls/ext/core/ProjectCommand.java | 2 +- .../jdtls/ext/core/model/PackageNode.java | 28 ++++++++++++------- src/views/projectNode.ts | 4 +++ test/suite/contextValue.test.ts | 16 ++++++++++- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/ProjectCommand.java b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/ProjectCommand.java index cc2a7b94..12c2899d 100644 --- a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/ProjectCommand.java +++ b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/ProjectCommand.java @@ -199,7 +199,7 @@ public static List getMainClasses(List arguments, IProgre } } } - IJavaSearchScope scope = SearchEngine.createJavaSearchScope(searchRoots.toArray(IJavaElement[]::new)); + IJavaSearchScope scope = SearchEngine.createJavaSearchScope(searchRoots.toArray(new IJavaElement[0])); SearchPattern pattern = SearchPattern.createPattern("main(String[]) void", IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE); SearchRequestor requestor = new SearchRequestor() { diff --git a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java index 5797d9ae..2c63a5a6 100644 --- a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java +++ b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java @@ -12,6 +12,8 @@ package com.microsoft.jdtls.ext.core.model; import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -43,13 +45,6 @@ */ public class PackageNode { - /** - * Nature Id for the IProject. - */ - private static final String NATURE_ID = "NatureId"; - - private static final String UNMANAGED_FOLDER_INNER_PATH = "UnmanagedFolderInnerPath"; - public static final String K_TYPE_KIND = "TypeKind"; /** @@ -67,15 +62,26 @@ public class PackageNode { */ public static final int K_ENUM = 3; + public static final String REFERENCED_LIBRARIES_PATH = "REFERENCED_LIBRARIES_PATH"; private static final String REFERENCED_LIBRARIES_CONTAINER_NAME = "Referenced Libraries"; private static final String IMMUTABLE_REFERENCED_LIBRARIES_CONTAINER_NAME = "Referenced Libraries (Read-only)"; - - public static final String REFERENCED_LIBRARIES_PATH = "REFERENCED_LIBRARIES_PATH"; public static final ContainerNode REFERENCED_LIBRARIES_CONTAINER = new ContainerNode(REFERENCED_LIBRARIES_CONTAINER_NAME, REFERENCED_LIBRARIES_PATH, NodeKind.CONTAINER, IClasspathEntry.CPE_CONTAINER); public static final ContainerNode IMMUTABLE_REFERENCED_LIBRARIES_CONTAINER = new ContainerNode(IMMUTABLE_REFERENCED_LIBRARIES_CONTAINER_NAME, REFERENCED_LIBRARIES_PATH, NodeKind.CONTAINER, IClasspathEntry.CPE_CONTAINER); + /** + * Nature Id for the IProject. + */ + private static final String NATURE_ID = "NatureId"; + + private static final String UNMANAGED_FOLDER_INNER_PATH = "UnmanagedFolderInnerPath"; + + /** + * Nature Id for the unmanaged folder + */ + private static final String UNMANAGED_FOLDER_NATURE_ID = "org.eclipse.jdt.ls.core.unmanagedFodler"; + /** * The name of the PackageNode. */ @@ -158,10 +164,12 @@ public static PackageNode createNodeForProject(IJavaElement javaElement) { PackageNode projectNode = new PackageNode(proj.getName(), proj.getFullPath().toPortableString(), NodeKind.PROJECT); projectNode.setUri(ProjectUtils.getProjectRealFolder(proj).toFile().toURI().toString()); try { - projectNode.setMetaDataValue(NATURE_ID, proj.getDescription().getNatureIds()); + List natureIds = new ArrayList<>(Arrays.asList(proj.getDescription().getNatureIds())); if (!ProjectUtils.isVisibleProject(proj)) { + natureIds.add(UNMANAGED_FOLDER_NATURE_ID); projectNode.setMetaDataValue(UNMANAGED_FOLDER_INNER_PATH, proj.getLocationURI().toString()); } + projectNode.setMetaDataValue(NATURE_ID, natureIds); } catch (CoreException e) { // do nothing } diff --git a/src/views/projectNode.ts b/src/views/projectNode.ts index 703b00f3..549dd20d 100644 --- a/src/views/projectNode.ts +++ b/src/views/projectNode.ts @@ -152,6 +152,8 @@ function getProjectType(natureId: string): string { return ReadableNature.Maven; case NatureId.Gradle: return ReadableNature.Gradle; + case NatureId.UnmanagedFolder: + return ReadableNature.UnmanagedFolder; default: return ""; } @@ -160,12 +162,14 @@ function getProjectType(natureId: string): string { enum NatureId { Maven = "org.eclipse.m2e.core.maven2Nature", Gradle = "org.eclipse.buildship.core.gradleprojectnature", + UnmanagedFolder = "org.eclipse.jdt.ls.core.unmanagedFodler", Java = "org.eclipse.jdt.core.javanature", } enum ReadableNature { Maven = "maven", Gradle = "gradle", + UnmanagedFolder = "unmanagedFolder", Java = "java", } diff --git a/test/suite/contextValue.test.ts b/test/suite/contextValue.test.ts index 4befcc60..1011888a 100644 --- a/test/suite/contextValue.test.ts +++ b/test/suite/contextValue.test.ts @@ -28,6 +28,11 @@ suite("Context Value Tests", () => { assert.ok(/java:project(?=.*?\b\+java\b)(?=.*?\b\+gradle\b)(?=.*?\b\+uri\b)/.test((await gradleProject.getTreeItem()).contextValue || "")); }); + test("test unmanaged folder node", async function() { + assert.ok(/java:project(?=.*?\b\+java\b)(?=.*?\b\+unmanagedFolder\b)(?=.*?\b\+uri\b)/ + .test((await unmanagedFolder.getTreeItem()).contextValue || "")); + }); + test("test JRE container node", async function() { assert.ok(/java:container(?=.*?\b\+jre\b)(?=.*?\b\+uri\b)/.test((await jreContainer.getTreeItem()).contextValue || "")); }); @@ -70,7 +75,7 @@ suite("Context Value Tests", () => { assert.ok(/java:package(?=.*?\b\+source\b)(?=.*?\b\+uri\b)/.test((await sourcePackage.getTreeItem()).contextValue || "")); }); - test("test source package node", async function() { + test("test source(test) package node", async function() { assert.ok(/java:package(?=.*?\b\+source\b)(?=.*?\b\+test\b)(?=.*?\b\+uri\b)/ .test((await testSourcePackage.getTreeItem()).contextValue || "")); }); @@ -129,6 +134,15 @@ const gradleProject: ProjectNode = new ProjectNode({ }, }, workspace); +const unmanagedFolder: ProjectNode = new ProjectNode({ + name: "unmanagedFolder", + uri: Uri.file(__dirname).toString(), + kind: NodeKind.Project, + metaData: { + NatureId: ["org.eclipse.jdt.core.javanature", "org.eclipse.jdt.ls.core.unmanagedFodler"], + }, +}, workspace); + const jreContainer: ContainerNode = new ContainerNode({ name: "jreContainer", uri: Uri.file(__dirname).toString(), From dc57b4f69c54e9f7e4a05eb38dc2a8fcab9d1c55 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 7 Apr 2021 12:44:21 +0800 Subject: [PATCH 2/3] Fix checkstyle errors --- .../src/com/microsoft/jdtls/ext/core/model/PackageNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java index 2c63a5a6..be391511 100644 --- a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java +++ b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java @@ -78,7 +78,7 @@ public class PackageNode { private static final String UNMANAGED_FOLDER_INNER_PATH = "UnmanagedFolderInnerPath"; /** - * Nature Id for the unmanaged folder + * Nature Id for the unmanaged folder. */ private static final String UNMANAGED_FOLDER_NATURE_ID = "org.eclipse.jdt.ls.core.unmanagedFodler"; From 44fe97cb4ecbcc9905d0f684cc86663d602c7c6c Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 7 Apr 2021 14:03:18 +0800 Subject: [PATCH 3/3] Fix typos --- .../src/com/microsoft/jdtls/ext/core/model/PackageNode.java | 2 +- src/views/projectNode.ts | 2 +- test/suite/contextValue.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java index be391511..9dbab874 100644 --- a/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java +++ b/jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java @@ -80,7 +80,7 @@ public class PackageNode { /** * Nature Id for the unmanaged folder. */ - private static final String UNMANAGED_FOLDER_NATURE_ID = "org.eclipse.jdt.ls.core.unmanagedFodler"; + private static final String UNMANAGED_FOLDER_NATURE_ID = "org.eclipse.jdt.ls.core.unmanagedFolder"; /** * The name of the PackageNode. diff --git a/src/views/projectNode.ts b/src/views/projectNode.ts index 549dd20d..52fd5b2c 100644 --- a/src/views/projectNode.ts +++ b/src/views/projectNode.ts @@ -162,7 +162,7 @@ function getProjectType(natureId: string): string { enum NatureId { Maven = "org.eclipse.m2e.core.maven2Nature", Gradle = "org.eclipse.buildship.core.gradleprojectnature", - UnmanagedFolder = "org.eclipse.jdt.ls.core.unmanagedFodler", + UnmanagedFolder = "org.eclipse.jdt.ls.core.unmanagedFolder", Java = "org.eclipse.jdt.core.javanature", } diff --git a/test/suite/contextValue.test.ts b/test/suite/contextValue.test.ts index 1011888a..9fa1e1d5 100644 --- a/test/suite/contextValue.test.ts +++ b/test/suite/contextValue.test.ts @@ -139,7 +139,7 @@ const unmanagedFolder: ProjectNode = new ProjectNode({ uri: Uri.file(__dirname).toString(), kind: NodeKind.Project, metaData: { - NatureId: ["org.eclipse.jdt.core.javanature", "org.eclipse.jdt.ls.core.unmanagedFodler"], + NatureId: ["org.eclipse.jdt.core.javanature", "org.eclipse.jdt.ls.core.unmanagedFolder"], }, }, workspace);