This is an automated email from the ASF dual-hosted git repository. sdedic 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 495e8b3 [NETBEANS-3387] classes loaded from scanned path should get CodeSource.location new 84e18b5 Merge pull request #1627 from sdedic/bugfix/annotation-processor-codesource 495e8b3 is described below commit 495e8b312e1ecd564d530e70fcde69712c93f241 Author: Svata Dedic <svatopluk.de...@oracle.com> AuthorDate: Thu Nov 14 12:17:32 2019 +0100 [NETBEANS-3387] classes loaded from scanned path should get CodeSource.location --- .../source/parsing/CachingArchiveClassLoader.java | 40 ++++++++++++++++++---- 1 file changed, 34 insertions(+), 6 deletions(-) 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 e11d592..22de204 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 @@ -40,9 +40,16 @@ import javax.tools.JavaFileObject; import org.netbeans.api.annotations.common.NonNull; import org.netbeans.api.annotations.common.NullAllowed; import org.netbeans.api.java.classpath.ClassPath; +import org.openide.filesystems.FileUtil; import org.openide.util.Exceptions; import org.openide.util.Pair; import org.openide.util.Parameters; +import java.nio.file.FileStore; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.security.ProtectionDomain; +import java.util.HashMap; +import java.util.Map; /** * @@ -55,6 +62,7 @@ public final class CachingArchiveClassLoader extends ClassLoader { //Todo: Performance Trie<File,ReentrantReadWriteLock> private static final ReentrantReadWriteLock LOCK = new ReentrantReadWriteLock(); + private final Map<URL, ProtectionDomain> codeDomains = new HashMap<>(); private final List<Pair<URL,Archive>> archives; private final Optional<Consumer<? super URL>> usedRoots; private byte[] buffer; @@ -68,6 +76,19 @@ public final class CachingArchiveClassLoader extends ClassLoader { this.archives = archives; this.usedRoots = Optional.<Consumer<? super URL>>ofNullable(usedRoots); } + + /** + * Creates a ProtectionDomain for the location. Caches instances since more classes + * is likely to be loaded. + * @param location location + * @return ProtectionDomain object. + */ + private ProtectionDomain createCodeDomain(URL location) { + return codeDomains.computeIfAbsent(location, + (l) -> new ProtectionDomain( + new CodeSource(l, (CodeSigner[])null), null) + ); + } @Override protected Class<?> findClass(final String name) throws ClassNotFoundException { @@ -78,8 +99,9 @@ public final class CachingArchiveClassLoader extends ClassLoader { c = readAction(new Callable<Class<?>>() { @Override public Class<?> call() throws Exception { - final FileObject file = findFileObject(sb.toString()); - if (file != null) { + final Pair<URL, FileObject> locFile = findFileObject(sb.toString()); + if (locFile != null) { + final FileObject file = locFile.second(); try { final int len = readJavaFileObject(file); int lastDot = name.lastIndexOf('.'); @@ -96,7 +118,8 @@ public final class CachingArchiveClassLoader extends ClassLoader { //-buffer //+com.sun.tools.hc.LambdaMetafactory.translateClassFile(buffer,0,len), 0, - len); + len, + createCodeDomain(locFile.first())); } catch (FileNotFoundException fnf) { LOG.log(Level.FINE, "Resource: {0} does not exist.", file.toUri()); //NOI18N } catch (IOException ioe) { @@ -121,7 +144,8 @@ public final class CachingArchiveClassLoader extends ClassLoader { file = readAction(new Callable<FileObject>() { @Override public FileObject call() throws Exception { - return findFileObject(name); + Pair<URL, FileObject> p = findFileObject(name); + return p == null ? null : p.second(); } }); } catch (Exception e) { @@ -190,7 +214,7 @@ public final class CachingArchiveClassLoader extends ClassLoader { return len; } - private FileObject findFileObject(final String resName) { + private Pair<URL, FileObject> findFileObject(final String resName) { assert LOCK.getReadLockCount() > 0; for (final Pair<URL,Archive> p : archives) { final Archive archive = p.second(); @@ -198,7 +222,11 @@ public final class CachingArchiveClassLoader extends ClassLoader { final FileObject file = archive.getFile(resName); if (file != null) { usedRoots.ifPresent((c) -> c.accept(p.first())); - return file; + URL u = FileUtil.getArchiveFile(p.first()); + if (u == null) { + u = p.first(); + } + return Pair.of(u, file); } } catch (IOException ex) { LOG.log( --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists