From 4d52be5cf29caa02f90d341e91ee25ca0d69f836 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 7 Jul 2016 20:47:53 +0200 Subject: [PATCH] PMDASMClassloader: minor refactoring --- .../java/typeresolution/PMDASMClassLoader.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/PMDASMClassLoader.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/PMDASMClassLoader.java index 02681fc85d..62b4bee117 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/PMDASMClassLoader.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/PMDASMClassLoader.java @@ -6,11 +6,10 @@ package net.sourceforge.pmd.lang.java.typeresolution; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import org.objectweb.asm.ClassReader; @@ -29,6 +28,9 @@ import net.sourceforge.pmd.lang.java.typeresolution.visitors.PMDASMVisitor; * the negative cases only. The cache is shared between loadClass and getImportedClasses, * as they are using the same (parent) class loader, e.g. if the class foo.Bar cannot be loaded, * then the resource foo/Bar.class will not exist, too. + * + * Note: since git show 46ad3a4700b7a233a177fa77d08110127a85604c the cache is using + * a concurrent hash map to avoid synchronizing on the class loader instance. */ public final class PMDASMClassLoader extends ClassLoader { @@ -36,7 +38,7 @@ public final class PMDASMClassLoader extends ClassLoader { private static ClassLoader cachedClassLoader; /** Caches the names of the classes that we can't load or that don't exist. */ - private final ConcurrentHashMap m_dontBotherSet = new ConcurrentHashMap<>(); + private final ConcurrentMap dontBother = new ConcurrentHashMap<>(); static { registerAsParallelCapable(); @@ -62,16 +64,16 @@ public final class PMDASMClassLoader extends ClassLoader { @Override public Class loadClass(String name) throws ClassNotFoundException { - if(m_dontBotherSet.containsKey(name)) + if(dontBother.containsKey(name)) throw new ClassNotFoundException(name); try { return super.loadClass(name); } catch (ClassNotFoundException e) { - m_dontBotherSet.put(name, Boolean.TRUE); + dontBother.put(name, Boolean.TRUE); throw e; } catch (NoClassDefFoundError e) { - m_dontBotherSet.put(name, Boolean.TRUE); + dontBother.put(name, Boolean.TRUE); // rethrow as ClassNotFoundException, as the remaining part just // deals with that // see also: https://sourceforge.net/p/pmd/bugs/1319/ @@ -80,7 +82,7 @@ public final class PMDASMClassLoader extends ClassLoader { } public synchronized Map getImportedClasses(String name) throws ClassNotFoundException { - if (m_dontBotherSet.contains(name)) { + if (dontBother.containsValue(name)) { throw new ClassNotFoundException(name); } try { @@ -102,7 +104,7 @@ public final class PMDASMClassLoader extends ClassLoader { } return asmVisitor.getPackages(); } catch (IOException e) { - m_dontBotherSet.put(name, Boolean.TRUE); + dontBother.put(name, Boolean.TRUE); throw new ClassNotFoundException(name, e); } }