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) {