Index: ProxyClassLoader.java =================================================================== RCS file: /cvs/core/bootstrap/src/org/netbeans/ProxyClassLoader.java,v retrieving revision 1.12 diff -u -r1.12 ProxyClassLoader.java --- ProxyClassLoader.java 14 Sep 2004 15:08:24 -0000 1.12 +++ ProxyClassLoader.java 16 Sep 2004 10:45:34 -0000 @@ -382,15 +382,27 @@ * ClassLoader */ protected synchronized Package[] getPackages() { + return getPackages(new Vector()); + } + + /** + * Returns all of the Packages defined by this class loader and its parents. + * Do not recurse to parents in addedParents list. It speeds up execution + * time significantly. + * @return the array of Package objects defined by this + * ClassLoader + */ + private synchronized Package[] getPackages(Vector addedParents) { zombieCheck(null); Map all = new HashMap(); // Map // XXX call shouldDelegateResource on each? addPackages(all, super.getPackages()); for (int i = 0; i < parents.length; i++) { ClassLoader par = parents[i]; - if (par instanceof ProxyClassLoader) { + if (par instanceof ProxyClassLoader && !addedParents.contains(par)) { + addedParents.add(par); // XXX should ideally use shouldDelegateResource here... - addPackages(all, ((ProxyClassLoader)par).getPackages()); + addPackages(all, ((ProxyClassLoader)par).getPackages(addedParents)); } } synchronized (packages) { @@ -403,7 +415,7 @@ } } } - return (Package[])all.values().toArray(new Package[all.size()]); + return (Package[])packages.values().toArray(new Package[packages.size()]); } public Package getPackageAccessibly(String name) {