@Override
    public Iterable<JavaFileObject> list(Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) throws IOException {
        if (recurse) throw new UnsupportedOperationException("recurse is not currently supported");

        boolean passes = false;
        if (location.isOutputLocation() ||
                StandardLocation.SOURCE_PATH.equals(location)) passes = true;

        for (Pattern pattern: bootDelegation) {
            if (pattern.matcher(packageName).matches()) passes = true; 
        }
        
        if (!passes && 
                (systemPackages.contains(packageName) ||
                        exportsToJars.containsKey(packageName))) {
            passes = true;
        }
        
        if (passes) {
            // we have an exported jar
            return delegate.list(location, packageName, kinds, recurse);
        } else {
            logger.error(String.format("%s is not exported by any OSGi jar", packageName));
            return Collections.emptyList();
        }
    }