static class JavaXClassLoaderWithParents extends JavaXClassLoaderWithParent { // keys: full class names or package names // (inner classes are automatically included) NavigableMap parentMap = syncTreeMap(); *(S progID, L files, ClassLoader virtualParent) { super(progID, files, virtualParent); } *(S progID, L files) { super(progID, files, null); } protected Class findClass(S name) throws ClassNotFoundException { ClassLoader parent = findParentForClass(name); if (parent != null) ret parent.loadClass(name); else ret super.findClass(name); } ClassLoader findParentForClass(S name) { ClassLoader cl = parentMap.get(name); if (cl != null) ret cl; S s = parentMap.floorKey(name); if (startsWithOneOf(name, s + "$", s + ".")) ret parentMap.get(s); null; } void addParent(S name, ClassLoader loader) { parentMap.put(name, loader); } }