Skip to content

Commit 0661983

Browse files
committed
Adding patch for NETBEANS-8289
1 parent 1aab901 commit 0661983

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed

build.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
patches/8255.diff
5656
patches/8260.diff
5757
patches/8280.diff
58+
patches/8289.diff
5859
patches/mvn-sh.diff
5960
patches/project-marker-jdk.diff
6061
patches/generate-dependencies.diff

patches/8289.diff

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
diff --git a/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java b/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java
2+
index ff0d0ea144..aef5606fb4 100644
3+
--- a/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java
4+
+++ b/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java
5+
@@ -30,6 +30,7 @@ import java.util.Collections;
6+
import java.util.EnumSet;
7+
import java.util.HashSet;
8+
import java.util.List;
9+
+import java.util.Locale;
10+
import java.util.Map;
11+
import java.util.Objects;
12+
import java.util.Set;
13+
@@ -87,6 +88,7 @@ public class MultiSourceRootProvider implements ClassPathProvider {
14+
private static final Set<String> MODULAR_DIRECTORY_OPTIONS = new HashSet<>(Arrays.asList(
15+
"--module-path", "-p"
16+
));
17+
+ private static final Set<String> CLASSPATH_OPTIONS = Set.of("--class-path", "-cp", "-classpath");
18+
19+
//TODO: the cache will probably be never cleared, as the ClassPath/value refers to the key(?)
20+
private Map<FileObject, ClassPath> file2SourceCP = new WeakHashMap<>();
21+
@@ -341,6 +343,19 @@ public class MultiSourceRootProvider implements ClassPathProvider {
22+
23+
if (optionKeys.contains(currentOption)) {
24+
for (String piece : parsed.get(i + 1).split(File.pathSeparator)) {
25+
+ boolean hasStar = false;
26+
+ boolean isClassPath = CLASSPATH_OPTIONS.contains(currentOption);
27+
+
28+
+ if (isClassPath && piece.endsWith("*") && piece.length() > 1) {
29+
+ char sep = piece.charAt(piece.length() - 2);
30+
+
31+
+ if (sep == File.separatorChar ||
32+
+ sep == '/') {
33+
+ hasStar = true;
34+
+ piece = piece.substring(0, piece.length() - 2);
35+
+ }
36+
+ }
37+
+
38+
File pieceFile = new File(piece);
39+
40+
if (!pieceFile.isAbsolute()) {
41+
@@ -367,6 +382,23 @@ public class MultiSourceRootProvider implements ClassPathProvider {
42+
} else {
43+
expandedPaths = Collections.emptyList();
44+
}
45+
+ } else if (hasStar && isClassPath) {
46+
+ if (!toRemoveFSListeners.remove(f.getAbsolutePath()) &&
47+
+ addedFSListeners.add(f.getAbsolutePath())) {
48+
+ FileUtil.addFileChangeListener(this, f);
49+
+ }
50+
+
51+
+ File[] children = f.listFiles();
52+
+
53+
+ if (children != null) {
54+
+ expandedPaths = Arrays.stream(children)
55+
+ .filter(c -> c.getName()
56+
+ .toLowerCase(Locale.ROOT)
57+
+ .endsWith(".jar"))
58+
+ .toList();
59+
+ } else {
60+
+ expandedPaths = Collections.emptyList();
61+
+ }
62+
} else {
63+
expandedPaths = Arrays.asList(f);
64+
}
65+
diff --git a/java/java.file.launcher/test/unit/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProviderTest.java b/java/java.file.launcher/test/unit/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProviderTest.java
66+
index c89798daad..0e98a5958f 100644
67+
--- a/java/java.file.launcher/test/unit/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProviderTest.java
68+
+++ b/java/java.file.launcher/test/unit/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProviderTest.java
69+
@@ -310,6 +310,48 @@ public class MultiSourceRootProviderTest extends NbTestCase {
70+
assertSame(cp, provider.findClassPath(FileUtil.toFileObject(packDir), ClassPath.SOURCE));
71+
}
72+
73+
+ public void testExpandClassPath() throws Exception {
74+
+ FileObject wd = FileUtil.toFileObject(getWorkDir());
75+
+ FileObject test = FileUtil.createData(wd, "src/pack/Test1.java");
76+
+ FileObject libsDir = FileUtil.createFolder(wd, "libs");
77+
+ FileObject lib1Jar = FileUtil.createData(libsDir, "lib1.jar");
78+
+ FileObject lib2Jar = FileUtil.createData(libsDir, "lib2.jar");
79+
+ FileObject lib3Dir = FileUtil.createFolder(libsDir, "lib3");
80+
+ FileObject lib4Zip = FileUtil.createData(libsDir, "lib4.zip");
81+
+
82+
+ TestUtilities.copyStringToFile(test, "package pack;");
83+
+
84+
+ testResult.setOptions("--class-path " + FileUtil.getRelativePath(wd, libsDir) + "/*");
85+
+ testResult.setWorkDirectory(FileUtil.toFileObject(getWorkDir()).toURI());
86+
+
87+
+ MultiSourceRootProvider provider = new MultiSourceRootProvider();
88+
+ ClassPath compileCP = provider.findClassPath(test, ClassPath.COMPILE);
89+
+
90+
+ assertEquals(new HashSet<>(Arrays.asList(FileUtil.getArchiveRoot(lib1Jar),
91+
+ FileUtil.getArchiveRoot(lib2Jar))),
92+
+ new HashSet<>(Arrays.asList(compileCP.getRoots())));
93+
+
94+
+ lib4Zip.delete();
95+
+
96+
+ assertEquals(new HashSet<>(Arrays.asList(FileUtil.getArchiveRoot(lib1Jar),
97+
+ FileUtil.getArchiveRoot(lib2Jar))),
98+
+ new HashSet<>(Arrays.asList(compileCP.getRoots())));
99+
+
100+
+ FileObject lib5Jar = FileUtil.createData(libsDir, "lib5.jar");
101+
+
102+
+ assertEquals(new HashSet<>(Arrays.asList(FileUtil.getArchiveRoot(lib1Jar),
103+
+ FileUtil.getArchiveRoot(lib2Jar),
104+
+ FileUtil.getArchiveRoot(lib5Jar))),
105+
+ new HashSet<>(Arrays.asList(compileCP.getRoots())));
106+
+
107+
+ lib1Jar.delete();
108+
+
109+
+ assertEquals(new HashSet<>(Arrays.asList(FileUtil.getArchiveRoot(lib2Jar),
110+
+ FileUtil.getArchiveRoot(lib5Jar))),
111+
+ new HashSet<>(Arrays.asList(compileCP.getRoots())));
112+
+
113+
+ }
114+
+
115+
@Override
116+
protected void setUp() throws Exception {
117+
super.setUp();

0 commit comments

Comments
 (0)