diff options
Diffstat (limited to 'nailgun_launcher/CBTUrlClassLoader.java')
-rw-r--r-- | nailgun_launcher/CBTUrlClassLoader.java | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/nailgun_launcher/CBTUrlClassLoader.java b/nailgun_launcher/CBTUrlClassLoader.java index 0ba8a61..9c41978 100644 --- a/nailgun_launcher/CBTUrlClassLoader.java +++ b/nailgun_launcher/CBTUrlClassLoader.java @@ -15,12 +15,31 @@ class CbtURLClassLoader extends java.net.URLClassLoader{ + "\n)" ); } + ClassLoaderCache2<Class> cache = new ClassLoaderCache2<Class>( + new ConcurrentHashMap<String, Object>(), + new ConcurrentHashMap<Object, Class>() + ); public Class loadClass(String name) throws ClassNotFoundException{ Class _class = super.loadClass(name); if(_class == null) throw new ClassNotFoundException(name); else return _class; + } + public Class loadClass(String name, Boolean resolve) throws ClassNotFoundException{ //System.out.println("loadClass("+name+") on \n"+this); - return super.loadClass(name); + if(!cache.contains(name)) + try{ + cache.put(super.loadClass(name, resolve), name); + } catch (ClassNotFoundException e){ + cache.put(Object.class, name); + } + Class _class = cache.get(name); + if(_class == Object.class){ + if( name == "java.lang.Object" ) + return Object.class; + else return null; + } else { + return _class; + } } void assertExist(URL[] urls){ for(URL url: urls){ |