Skip to content

Commit c94ac71

Browse files
Fix issue: Tree View will show duplicated project list for multiple root scenario (#127)
* Fix issue: Tree View will show duplicated project list for multiple root scenario Signed-off-by: Jinbo Wang <[email protected]> * address review comments Signed-off-by: Jinbo Wang <[email protected]>
1 parent 58050b0 commit c94ac71

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/ProjectCommand.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.ArrayList;
1515
import java.util.Arrays;
1616
import java.util.List;
17+
import java.util.Objects;
1718

1819
import org.eclipse.core.resources.IProject;
1920
import org.eclipse.core.resources.IWorkspaceRoot;
@@ -26,16 +27,17 @@
2627
import com.microsoft.jdtls.ext.core.model.PackageNode;
2728

2829
public final class ProjectCommand {
29-
public static final String DEFAULT_PROJECT_NAME = "jdt.ls-java-project";
3030

3131
public static List<PackageNode> execute(List<Object> arguments, IProgressMonitor monitor) {
3232
String workspaceUri = (String) arguments.get(0);
33+
IPath workspacePath = ResourceUtils.canonicalFilePathFromURI(workspaceUri);
34+
String invisibleProjectName = getWorkspaceInvisibleProjectName(workspacePath);
3335

3436
IProject[] projects = getWorkspaceRoot().getProjects();
3537
ArrayList<PackageNode> children = new ArrayList<>();
36-
List<IPath> paths = Arrays.asList(ResourceUtils.filePathFromURI(workspaceUri));
38+
List<IPath> paths = Arrays.asList(workspacePath);
3739
for (IProject project : projects) {
38-
if (project.exists() && !DEFAULT_PROJECT_NAME.equals(project.getName()) ) {
40+
if (project.exists() && (ResourceUtils.isContainedIn(project.getLocation(), paths) || Objects.equals(project.getName(), invisibleProjectName))) {
3941
PackageNode projectNode = new PackageNode(project.getName(), project.getFullPath().toPortableString(), NodeKind.PROJECT);
4042
projectNode.setUri(project.getLocationURI().toString());
4143
children.add(projectNode);
@@ -48,4 +50,10 @@ public static List<PackageNode> execute(List<Object> arguments, IProgressMonitor
4850
private static IWorkspaceRoot getWorkspaceRoot() {
4951
return ResourcesPlugin.getWorkspace().getRoot();
5052
}
53+
54+
// TODO Use ProjectUtils.getWorkspaceInvisibleProjectName directly when the language server is released.
55+
private static String getWorkspaceInvisibleProjectName(IPath workspacePath) {
56+
String fileName = workspacePath.toFile().getName();
57+
return fileName + "_" + Integer.toHexString(workspacePath.toPortableString().hashCode());
58+
}
5159
}

0 commit comments

Comments
 (0)