This is an automated email from the ASF dual-hosted git repository.
jlahoda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 9762c40938 The ClassLoader used to load annotation processors does not
return directories from getResource/getResources methods, while normal
ClassLoaders do - fixing.
new a2e110a6e3 Merge pull request #6466 from
lahodaj/fix-classloader-getresource-directory
9762c40938 is described below
commit 9762c409389cecb5416da8d2b8951031456ea290
Author: Jan Lahoda <[email protected]>
AuthorDate: Fri Sep 15 09:40:58 2023 +0200
The ClassLoader used to load annotation processors does not return
directories from getResource/getResources methods, while normal ClassLoaders do
- fixing.
---
.../modules/java/source/parsing/Archive.java | 15 ++++++
.../java/source/parsing/CacheFolderArchive.java | 6 +++
.../java/source/parsing/CachingArchive.java | 16 ++++++
.../source/parsing/CachingArchiveClassLoader.java | 10 ++++
.../java/source/parsing/CachingPathArchive.java | 26 +++++++--
.../java/source/parsing/FileObjectArchive.java | 10 ++++
.../modules/java/source/parsing/FileObjects.java | 55 ++++++++++---------
.../modules/java/source/parsing/FolderArchive.java | 13 +++++
.../modules/java/source/parsing/PathArchive.java | 11 ++++
.../modules/java/source/parsing/ProxyArchive.java | 12 +++++
.../parsing/CachingArchiveClassLoaderTest.java | 61 ++++++++++++++++++++++
.../java/source/parsing/CachingArchiveTest.java | 21 ++++++++
.../source/parsing/CachingPathArchiveTest.java | 17 ++++++
.../java/source/parsing/FileObjectArchiveTest.java | 13 +++++
.../java/source/parsing/PathArchiveTest.java | 19 +++++++
15 files changed, 275 insertions(+), 30 deletions(-)
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/Archive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/Archive.java
index 47b4983222..ac8d9894ad 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/Archive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/Archive.java
@@ -20,6 +20,7 @@
package org.netbeans.modules.java.source.parsing;
import java.io.IOException;
+import java.net.URI;
import java.util.Collections;
import java.util.Set;
import javax.tools.JavaFileObject;
@@ -65,6 +66,15 @@ public interface Archive {
*/
public JavaFileObject getFile(final @NonNull String name) throws
IOException;
+ /**
+ * Returns a {@link URI} for a directory of the given name, or null if it
does
+ * not exist.
+ *
+ * @param dirName the name of the directory
+ * @return a URI if the given directory is in this archive, {@code null}
otherwise.
+ */
+ public URI getDirectory(final @NonNull String dirName) throws IOException;
+
/**
* Checks if the {@link Archive} is represents a multi release archive.
* @return true if the {@link Archive} is supports multiple releases.
@@ -91,6 +101,11 @@ public interface Archive {
return null;
}
+ @Override
+ public URI getDirectory(String name) throws IOException {
+ return null;
+ }
+
@Override
public boolean isMultiRelease() {
return false;
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CacheFolderArchive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CacheFolderArchive.java
index fed6986da9..792fa89532 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CacheFolderArchive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CacheFolderArchive.java
@@ -21,6 +21,7 @@ package org.netbeans.modules.java.source.parsing;
import java.io.File;
import java.io.IOException;
+import java.net.URI;
import java.util.Set;
import javax.tools.JavaFileObject;
@@ -62,6 +63,11 @@ class CacheFolderArchive implements Archive,
FileChangeListener {
return delegate.getFile(name);
}
+ @Override
+ public URI getDirectory(String dirName) throws IOException {
+ return delegate.getDirectory(dirName);
+ }
+
@Override
public void clear() {
delegate.clear();
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchive.java
index 8a9b29d56f..9be20747b8 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchive.java
@@ -24,6 +24,8 @@ import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
@@ -45,11 +47,13 @@ import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.annotations.common.NullAllowed;
import org.netbeans.api.java.classpath.ClassPath;
import
org.netbeans.modules.java.preprocessorbridge.spi.JavaFileFilterImplementation;
+import static
org.netbeans.modules.java.source.parsing.FileObjects.getZipPathURI;
import org.openide.filesystems.FileAttributeEvent;
import org.openide.filesystems.FileChangeListener;
import org.openide.filesystems.FileEvent;
import org.openide.filesystems.FileRenameEvent;
import org.openide.filesystems.FileUtil;
+import org.openide.util.BaseUtilities;
import org.openide.util.Exceptions;
import org.openide.util.NbBundle;
import org.openide.util.Parameters;
@@ -199,6 +203,18 @@ public class CachingArchive implements Archive,
FileChangeListener {
}
}
+ @Override
+ public URI getDirectory(String dirName) throws IOException {
+ Map<String, Folder> folders = doInit();
+
+ if (folders.containsKey(dirName)) {
+ URI zipURI = BaseUtilities.toURI(this.archiveFile);
+ return getZipPathURI(zipURI, dirName);
+ }
+
+ return null;
+ }
+
@Override
public String toString() {
return String.format(
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchiveClassLoader.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchiveClassLoader.java
index 22de204d9e..d58a70f81d 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchiveClassLoader.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingArchiveClassLoader.java
@@ -23,6 +23,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
+import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -177,6 +178,15 @@ public final class CachingArchiveClassLoader extends
ClassLoader {
usedRoots
.map((c) -> RES_PROCESSORS.equals(name) ?
null : c)
.ifPresent((c) -> c.accept(p.first()));
+ } else {
+ URI dirURI = archive.getDirectory(name);
+
+ if (dirURI != null) {
+ v.add(dirURI.toURL());
+ usedRoots
+ .map((c) ->
RES_PROCESSORS.equals(name) ? null : c)
+ .ifPresent((c) -> c.accept(p.first()));
+ }
}
}
return v.elements();
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingPathArchive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingPathArchive.java
index 8b5cec85ca..9daca61cb3 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingPathArchive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CachingPathArchive.java
@@ -41,6 +41,7 @@ import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.annotations.common.NullAllowed;
import org.netbeans.api.java.classpath.ClassPath;
import
org.netbeans.modules.java.preprocessorbridge.spi.JavaFileFilterImplementation;
+import static
org.netbeans.modules.java.source.parsing.FileObjects.convertPackage2Folder;
/**
*
@@ -118,6 +119,21 @@ public class CachingPathArchive extends
AbstractPathArchive {
return null;
}
+ @Override
+ @CheckForNull
+ public synchronized URI getDirectory(String dirName) throws IOException {
+ init();
+
+ if (!data.containsKey(dirName)) {
+ return null;
+ }
+
+ final char sep = root.getFileSystem().getSeparator().charAt(0);
+ Path resolved = root.resolve(convertPackage2Folder(dirName, sep));
+
+ return resolved.toUri();
+ }
+
@Override
public synchronized void clear() {
super.clear();
@@ -186,11 +202,11 @@ public class CachingPathArchive extends
AbstractPathArchive {
@Override
public FileVisitResult postVisitDirectory(Path dir,
IOException exc) throws IOException {
final State state = states.removeLast();
- if (state.currentFolder != EMPTY_FOLDER) {
- data.put(
- getResourceName(dir),
- Arrays.copyOfRange(state.currentFolder, 0,
state.currentOffset));
- }
+
+ data.put(
+ getResourceName(dir),
+ Arrays.copyOfRange(state.currentFolder, 0,
state.currentOffset));
+
return FileVisitResult.CONTINUE;
}
});
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjectArchive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjectArchive.java
index adf1f45e74..17c43ebbfa 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjectArchive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjectArchive.java
@@ -22,6 +22,7 @@ package org.netbeans.modules.java.source.parsing;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
@@ -118,6 +119,15 @@ public class FileObjectArchive implements Archive {
return file == null ? null : FileObjects.sourceFileObject(file, root,
null, false);
}
+ @Override
+ public URI getDirectory(String dirName) throws IOException {
+ FileObject dir = root.getFileObject(dirName);
+ if (dir != null && dir.isFolder()) {
+ return dir.toURI();
+ }
+ return null;
+ }
+
@Override
public boolean isMultiRelease() {
Boolean res = multiRelease;
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjects.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjects.java
index 30c1edaf44..daeb0ca37a 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjects.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FileObjects.java
@@ -949,6 +949,34 @@ public class FileObjects {
return null;
}
+ public static URI getZipPathURI(URI zipURI, String resourceName) {
+ try {
+ //Optimistic try and see
+ return new URI ("jar:"+zipURI.toString()+"!/"+resourceName);
//NOI18N
+ } catch (URISyntaxException e) {
+ //Need to encode the resName part (slower)
+ final StringBuilder sb = new StringBuilder ();
+ final String[] elements = resourceName.split("/");
//NOI18N
+ try {
+ for (int i = 0; i< elements.length; i++) {
+ String element = elements[i];
+ element = URLEncoder.encode(element, "UTF-8");
//NOI18N
+ element = element.replace("+", "%20");
//NOI18N
+ sb.append(element);
+ if (i< elements.length - 1) {
+ sb.append(NBFS_SEPARATOR_CHAR);
+ }
+ }
+ return new URI("jar:"+zipURI.toString()+"!/"+sb.toString());
//NOI18N
+ } catch (final UnsupportedEncodingException e2) {
+ throw new IllegalStateException(e2);
+ }
+ catch (final URISyntaxException e2) {
+ throw new IllegalStateException(e2);
+ }
+ }
+ }
+
// <editor-fold defaultstate="collapsed" desc="Private helper methods">
private static CharSequence getCharContent(InputStream ins, Charset
encoding, JavaFileFilterImplementation filter, long expectedLength, boolean
ignoreEncodingErrors) throws IOException {
char[] result;
@@ -1642,31 +1670,8 @@ public class FileObjects {
@Override
public final URI toUri () {
URI zdirURI = this.getArchiveURI();
- try {
- //Optimistic try and see
- return new URI ("jar:"+zdirURI.toString()+"!/"+resName);
//NOI18N
- } catch (URISyntaxException e) {
- //Need to encode the resName part (slower)
- final StringBuilder sb = new StringBuilder ();
- final String[] elements = resName.split("/");
//NOI18N
- try {
- for (int i = 0; i< elements.length; i++) {
- String element = elements[i];
- element = URLEncoder.encode(element, "UTF-8");
//NOI18N
- element = element.replace("+", "%20");
//NOI18N
- sb.append(element);
- if (i< elements.length - 1) {
- sb.append(NBFS_SEPARATOR_CHAR);
- }
- }
- return new
URI("jar:"+zdirURI.toString()+"!/"+sb.toString()); //NOI18N
- } catch (final UnsupportedEncodingException e2) {
- throw new IllegalStateException(e2);
- }
- catch (final URISyntaxException e2) {
- throw new IllegalStateException(e2);
- }
- }
+
+ return getZipPathURI(zdirURI, resName);
}
@Override
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FolderArchive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FolderArchive.java
index 3256273dd9..d35381b9c2 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FolderArchive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/FolderArchive.java
@@ -22,6 +22,7 @@ package org.netbeans.modules.java.source.parsing;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
+import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.Charset;
@@ -196,6 +197,18 @@ public class FolderArchive implements Archive {
return null;
}
+ @Override
+ public URI getDirectory(String dirName) throws IOException {
+ final String path = dirName.replace('/', File.separatorChar);
//NOI18N
+ File dir = new File (this.root, path);
+
+ if (dir.isDirectory()) {
+ return dir.toURI();
+ }
+
+ return null;
+ }
+
@Override
public String toString() {
return String.format(
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PathArchive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PathArchive.java
index a9f907ae17..d0b4bbdca1 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PathArchive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PathArchive.java
@@ -84,6 +84,17 @@ public final class PathArchive extends AbstractPathArchive {
null;
}
+ @Override
+ public URI getDirectory(String dirName) throws IOException {
+ if (separator != FileObjects.NBFS_SEPARATOR_CHAR) {
+ dirName = dirName.replace(FileObjects.NBFS_SEPARATOR_CHAR,
separator);
+ }
+ final Path target = root.resolve(dirName);
+ return Files.isDirectory(target) ?
+ target.toUri() :
+ null;
+ }
+
@Override
public JavaFileObject create(String relativeName,
JavaFileFilterImplementation filter) throws UnsupportedOperationException {
throw new UnsupportedOperationException("Write not supported");
//NOI18N
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/ProxyArchive.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/ProxyArchive.java
index 8033f36e11..1e54b2c661 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/ProxyArchive.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/ProxyArchive.java
@@ -20,6 +20,7 @@
package org.netbeans.modules.java.source.parsing;
import java.io.IOException;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -58,6 +59,17 @@ abstract class ProxyArchive implements Archive {
return null;
}
+ @Override
+ public URI getDirectory(String dirName) throws IOException {
+ for (Archive delegate : delegates) {
+ final URI dirURI = delegate.getDirectory(dirName);
+ if (dirURI != null) {
+ return dirURI;
+ }
+ }
+ return null;
+ }
+
@Override
public void clear() {
for (Archive delegate : delegates) {
diff --git
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingArchiveClassLoaderTest.java
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingArchiveClassLoaderTest.java
new file mode 100644
index 0000000000..ebc4fcd7a8
--- /dev/null
+++
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingArchiveClassLoaderTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.java.source.parsing;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
+import org.netbeans.api.java.classpath.ClassPath;
+import org.netbeans.junit.NbTestCase;
+import org.netbeans.spi.java.classpath.support.ClassPathSupport;
+
+public class CachingArchiveClassLoaderTest extends NbTestCase {
+
+ public CachingArchiveClassLoaderTest(String name) {
+ super(name);
+ }
+
+
+ public void testClassLoaderGetResourcesDir() throws IOException {
+ clearWorkDir();
+
+ File wd = getWorkDir();
+ File dir1 = new File(new File(wd, "dir1"), "a");
+ assertTrue(dir1.mkdirs());
+ File dir2 = new File(new File(wd, "dir2"), "a");
+ assertTrue(dir2.mkdirs());
+ new FileOutputStream(new File(dir2, "test.txt")).close();
+
+ ClassPath cp = ClassPathSupport.createClassPath(wd.getAbsolutePath());
+ ClassLoader loader = CachingArchiveClassLoader.forClassPath(cp, null,
null);
+
+ assertEquals(dir1.toURI().toURL(), loader.getResource("dir1/a"));
+ assertEquals(dir2.toURI().toURL(), loader.getResource("dir2/a"));
+
+ Enumeration<URL> resource = loader.getResources("dir1/a");
+ assertTrue(resource.hasMoreElements());
+ assertEquals(dir1.toURI().toURL(), resource.nextElement());
+ assertFalse(resource.hasMoreElements());
+ }
+
+}
diff --git
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingArchiveTest.java
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingArchiveTest.java
index a47f295c7e..a270a9a83c 100644
---
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingArchiveTest.java
+++
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingArchiveTest.java
@@ -19,8 +19,11 @@
package org.netbeans.modules.java.source.parsing;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
import java.util.Arrays;
import java.util.Enumeration;
+import java.util.jar.JarOutputStream;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -45,6 +48,7 @@ public class CachingArchiveTest extends NbTestCase {
TestSuite suite = new NbTestSuite ();
suite.addTest(new CachingArchiveTest("testPutName"));
suite.addTest(new CachingArchiveTest("testJoin"));
+ suite.addTest(new CachingArchiveTest("testGetDirectory"));
return suite;
}
@@ -131,4 +135,21 @@ public class CachingArchiveTest extends NbTestCase {
}
}
}
+
+ public void testGetDirectory() throws Exception {
+ clearWorkDir();
+
+ File archive = new File(getWorkDir(), "rt.jar");
+
+ try (OutputStream binOut = new FileOutputStream(archive);
+ JarOutputStream out = new JarOutputStream(binOut)) {
+ out.putNextEntry(new ZipEntry(("dir1/a/")));
+ out.putNextEntry(new ZipEntry(("dir2/a/test.txt")));
+ }
+
+ Archive a = new CachingArchive(archive, false);
+
+ assertEquals("jar:" + archive.toURI().toString() + "!/dir1/a",
a.getDirectory("dir1/a").toString());
+ assertEquals("jar:" + archive.toURI().toString() + "!/dir2/a",
a.getDirectory("dir2/a").toString());
+ }
}
diff --git
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingPathArchiveTest.java
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingPathArchiveTest.java
index 38f3018564..f2c250e906 100644
---
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingPathArchiveTest.java
+++
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/CachingPathArchiveTest.java
@@ -18,6 +18,8 @@
*/
package org.netbeans.modules.java.source.parsing;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.nio.file.FileVisitResult;
@@ -39,6 +41,8 @@ import javax.tools.JavaFileObject;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.java.source.TestUtilities;
import org.netbeans.junit.NbTestCase;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
import org.openide.util.BaseUtilities;
/**
@@ -75,6 +79,19 @@ public final class CachingPathArchiveTest extends NbTestCase
{
}
}
+ public void testGetDirectory() throws IOException {
+ clearWorkDir();
+ File wd = getWorkDir();
+ File dir1 = new File(new File(wd, "dir1"), "a");
+ assertTrue(dir1.mkdirs());
+ File dir2 = new File(new File(wd, "dir2"), "a");
+ assertTrue(dir2.mkdirs());
+ new FileOutputStream(new File(dir2, "test.txt")).close();
+ Archive a = new CachingPathArchive(wd.toPath(), wd.toURI());
+ assertEquals(dir1.toURI(), a.getDirectory("dir1/a"));
+ assertEquals(dir2.toURI(), a.getDirectory("dir2/a"));
+ }
+
private static void verifyURIs(Path module) throws IOException {
final URI javaHome = BaseUtilities.toURI(TestUtilities.getJava9Home());
final URI rootURI = URI.create("nbjrt:"+javaHome+"!"+module+"/");
diff --git
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/FileObjectArchiveTest.java
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/FileObjectArchiveTest.java
index 21085d61c2..478d6ae1b5 100644
---
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/FileObjectArchiveTest.java
+++
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/FileObjectArchiveTest.java
@@ -19,6 +19,7 @@
package org.netbeans.modules.java.source.parsing;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.EnumSet;
@@ -28,6 +29,7 @@ import java.util.stream.StreamSupport;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.StandardLocation;
+import static junit.framework.TestCase.assertTrue;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.junit.NbTestCase;
import org.openide.filesystems.FileUtil;
@@ -90,6 +92,17 @@ public class FileObjectArchiveTest extends NbTestCase {
assertEquals(Arrays.asList("non-package.org.me.X",
"non-package.org.me.Y"), toInferedName(res)); //NOI18N
}
+ public void testGetDirectory() throws IOException {
+ File dir1 = new File(new File(root, "dir1"), "a");
+ assertTrue(dir1.mkdirs());
+ File dir2 = new File(new File(root, "dir2"), "a");
+ assertTrue(dir2.mkdirs());
+ new FileOutputStream(new File(dir2, "test.txt")).close();
+ final Archive a = new FileObjectArchive(FileUtil.toFileObject(root));
+ assertEquals(dir1.toURI(), a.getDirectory("dir1/a"));
+ assertEquals(dir2.toURI(), a.getDirectory("dir2/a"));
+ }
+
private static List<String> toInferedName(
final Iterable<? extends JavaFileObject> jfos) {
return StreamSupport.stream(jfos.spliterator(), false)
diff --git
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PathArchiveTest.java
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PathArchiveTest.java
index 1c68089457..df8d296687 100644
---
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PathArchiveTest.java
+++
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PathArchiveTest.java
@@ -18,6 +18,8 @@
*/
package org.netbeans.modules.java.source.parsing;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
@@ -35,6 +37,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.tools.JavaFileObject;
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.java.source.TestUtilities;
import org.netbeans.junit.NbTestCase;
@@ -61,6 +65,21 @@ public final class PathArchiveTest extends NbTestCase {
}
}
+ public void testGetDirectory() throws IOException {
+ clearWorkDir();
+
+ File root = getWorkDir();
+ File dir1 = new File(new File(root, "dir1"), "a");
+ assertTrue(dir1.mkdirs());
+ File dir2 = new File(new File(root, "dir2"), "a");
+ assertTrue(dir2.mkdirs());
+ new FileOutputStream(new File(dir2, "test.txt")).close();
+ Path rootPath = root.toPath();
+ final Archive a = new PathArchive(rootPath, rootPath.toUri());
+ assertEquals(dir1.toURI(), a.getDirectory("dir1/a"));
+ assertEquals(dir2.toURI(), a.getDirectory("dir2/a"));
+ }
+
private static void verifyModule(Path module) throws IOException {
final PathArchive pa = new PathArchive(module, null);
final Map<String,Set<String>> pkgs = getPackages(module);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists