Skip to content

Commit 05b5e4c

Browse files
fix: only consider top-level projects [IDE-803] (#236)
fix: only consider top-level projects
1 parent b6d0514 commit 05b5e4c

3 files changed

Lines changed: 53 additions & 10 deletions

File tree

plugin/src/main/java/io/snyk/eclipse/plugin/utils/ResourceUtils.java

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,15 @@
44
import java.io.InputStream;
55
import java.net.URL;
66
import java.nio.file.Path;
7+
import java.util.ArrayList;
8+
import java.util.Arrays;
79
import java.util.Base64;
10+
import java.util.Collections;
11+
import java.util.Comparator;
12+
import java.util.List;
13+
import java.util.Set;
14+
import java.util.TreeSet;
15+
import java.util.stream.Collectors;
816

917
import org.eclipse.core.resources.IProject;
1018
import org.eclipse.core.resources.IResource;
@@ -14,6 +22,15 @@
1422

1523
public class ResourceUtils {
1624

25+
private static final Comparator<IProject> projectByPathComparator = new Comparator<IProject>() {
26+
@Override
27+
public int compare(IProject o1, IProject o2) {
28+
Path fullPath = ResourceUtils.getFullPath(o1);
29+
Path fullPath2 = ResourceUtils.getFullPath(o2);
30+
return fullPath.compareTo(fullPath2);
31+
}
32+
};
33+
1734
public ResourceUtils() {
1835
}
1936

@@ -45,18 +62,48 @@ private static byte[] getImageDataFromUrl(URL imageUrl) {
4562
}
4663
}
4764

48-
public static Path getFullPath(IResource resource) {
65+
public static Path getFullPath(IResource resource) {
4966
return resource.getLocation().toPath().toAbsolutePath();
5067
}
5168

5269
public static IProject getProjectByPath(Path path) {
53-
var projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
70+
var projects = getAccessibleTopLevelProjects();
71+
5472
for (IProject iProject : projects) {
5573
Path projectPath = ResourceUtils.getFullPath(iProject);
56-
if (iProject.isAccessible() && path.normalize().startsWith(projectPath)) {
74+
if (path.normalize().startsWith(projectPath)) {
5775
return iProject;
5876
}
5977
}
6078
return null;
6179
}
80+
81+
public static List<IProject> getAccessibleTopLevelProjects() {
82+
var projects = Arrays.stream(ResourcesPlugin.getWorkspace().getRoot().getProjects())
83+
.filter((project) -> {
84+
return project.isAccessible()
85+
&& !project.isDerived()
86+
&& !project.isHidden();
87+
})
88+
.sorted(projectByPathComparator)
89+
.collect(Collectors.toList());
90+
91+
Set<IProject> topLevel = new TreeSet<>(projectByPathComparator);
92+
boolean add = true;
93+
for (IProject iProject : projects) {
94+
var projectPath = ResourceUtils.getFullPath(iProject);
95+
for (IProject tp : topLevel) {
96+
var topLevelPath = ResourceUtils.getFullPath(tp);
97+
if (projectPath.startsWith(topLevelPath)) {
98+
add = false;
99+
break;
100+
}
101+
}
102+
if (add) {
103+
topLevel.add(iProject);
104+
}
105+
}
106+
107+
return new ArrayList<>(topLevel);
108+
}
62109
}

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/RootNode.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package io.snyk.eclipse.plugin.views.snyktoolview;
22

33
import java.nio.file.Path;
4-
import java.util.Arrays;
54
import java.util.List;
6-
import java.util.stream.Collectors;
75

86
import org.eclipse.core.resources.IProject;
9-
import org.eclipse.core.resources.ResourcesPlugin;
107

118
import io.snyk.eclipse.plugin.utils.ResourceUtils;
129

@@ -18,10 +15,7 @@ public RootNode() {
1815

1916
public void reset() {
2017
super.reset();
21-
22-
var workspace = ResourcesPlugin.getWorkspace();
23-
IProject[] allProjects = workspace.getRoot().getProjects();
24-
List<IProject> openProjects = Arrays.stream(allProjects).filter(IProject::isOpen).collect(Collectors.toList());
18+
List<IProject> openProjects = ResourceUtils.getAccessibleTopLevelProjects();
2519

2620
for (IProject project : openProjects) {
2721
Path path = ResourceUtils.getFullPath(project);

plugin/src/main/java/io/snyk/languageserver/protocolextension/SdkHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.nio.charset.StandardCharsets;
88
import java.nio.file.Path;
99
import java.nio.file.Paths;
10+
import javax.xml.XMLConstants;
1011
import java.util.ArrayList;
1112
import java.util.List;
1213
import java.util.Map;
@@ -84,6 +85,7 @@ private String getPyDevInterpreterName(String projectPath) throws IOException {
8485
}
8586
try {
8687
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
88+
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
8789
DocumentBuilder builder = factory.newDocumentBuilder();
8890
Document document = builder.parse(pydevProjectFile);
8991

0 commit comments

Comments
 (0)