if (requiredSources == null) requiredSources = new KeyedHashSet(10, false);
	private PackageSource findRequiredSource(String pkgName) {		if (requiredBundles == null)			return null;		if (requiredSources != null) {			PackageSource result = (PackageSource) requiredSources.getByKey(pkgName);			if (result != null)				return result.isNullSource() ? null : result;		}		KeyedHashSet visited = new KeyedHashSet(false);		visited.add(bundle); // always add ourselves so we do not recurse back to ourselves		ArrayList result = new ArrayList(3);		for (int i = 0; i < requiredBundles.length; i++) {			BundleLoader requiredLoader = requiredBundles[i].getBundleLoader();			requiredLoader.addExportedProvidersFor(proxy.getSymbolicName(), pkgName, result, visited);		}		if (requiredSources == null)			requiredSources = new KeyedHashSet(10, false);		// found some so cache the result for next time and return		if (result.size() == 0) {			// did not find it in our required bundles lets record the failure			// so we do not have to do the search again for this package.			requiredSources.add(NullPackageSource.getNullPackageSource(pkgName));			return null;		} else if (result.size() == 1) {			// if there is just one source, remember just the single source 			PackageSource source = (PackageSource) result.get(0);			requiredSources.add(source);			return source;		} else {			// if there was more than one source, build a multisource and cache that.			PackageSource[] srcs = (PackageSource[]) result.toArray(new PackageSource[result.size()]);			PackageSource source = createMultiSource(pkgName, srcs);			requiredSources.add(source);			return source;		}	}