Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
add a default excludes list of packages so we can hide implementation…
… details (like JAXB generated reflection classes)
  • Loading branch information
jstrachan committed Sep 30, 2013
1 parent 87d313e commit 5099dd8
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
Expand Up @@ -55,6 +55,7 @@ public class ClassScanner {
private WeakHashMap<String, CacheValue> cache = new WeakHashMap<String, CacheValue>();
private WeakHashMap<Package, CacheValue> packageCache = new WeakHashMap<Package, CacheValue>();
private Map<String,ClassLoaderProvider> classLoaderProviderMap = new HashMap<String, ClassLoaderProvider>();
private Set<String> ignorePackages = new HashSet<String>(Arrays.asList("sun.reflect.misc"));

public static ClassScanner newInstance() {
return new ClassScanner(Thread.currentThread().getContextClassLoader(), ClassScanner.class.getClassLoader());
Expand Down Expand Up @@ -88,7 +89,7 @@ public void setClassLoaderProvider(String id, ClassLoaderProvider classLoaderPro
* @return all the class names found on the current classpath using the given text search filter
*/
public SortedSet<String> findClassNames(String search, Integer limit) {
Map<Package, ClassLoader[]> packageMap = Packages.getPackageMap(getClassLoaders());
Map<Package, ClassLoader[]> packageMap = Packages.getPackageMap(getClassLoaders(), ignorePackages);
return findClassNamesInPackages(search, limit, packageMap);
}

Expand Down Expand Up @@ -193,6 +194,14 @@ public Class<?> findClass(String className) throws ClassNotFoundException {
return Class.forName(className);
}

public Set<String> getIgnorePackages() {
return ignorePackages;
}

public void setIgnorePackages(Set<String> ignorePackages) {
this.ignorePackages = ignorePackages;
}

// Implementation methods
//-------------------------------------------------------------------------
protected void addPackageResources(Package aPackage, Map<String, ClassResource> urlSet, ClassLoader[] classLoaders) {
Expand Down
Expand Up @@ -57,21 +57,21 @@ public static Map<Package,ClassLoader[]> getPackageSet(List<ClassLoader> classLo
}
*/

public static Map<Package, ClassLoader[]> getPackageMap(List<ClassLoader> classLoaders) {
public static Map<Package, ClassLoader[]> getPackageMap(List<ClassLoader> classLoaders, Set<String> ignorePackages) {
Map<Package, ClassLoader[]> answer = new HashMap<Package, ClassLoader[]>();

ClassLoader[] globalClassLoaders = {Thread.currentThread().getContextClassLoader(),
ClassScanner.class.getClassLoader()};

Set<Package> packages = new HashSet<Package>();
add(answer, Package.getPackages(), globalClassLoaders);
add(answer, Package.getPackages(), globalClassLoaders, ignorePackages);

ClassLoader[] classLoaderArray = new ClassLoader[classLoaders.size()];
classLoaders.toArray(classLoaderArray);

for (ClassLoader classLoader : classLoaders) {
Package[] loaderPackages = findPackagesForClassLoader(classLoader);
add(answer, loaderPackages, classLoaderArray);
add(answer, loaderPackages, classLoaderArray, ignorePackages);
}
SortedSet<String> names = new TreeSet<String>();
for (Package aPackage : packages) {
Expand All @@ -83,10 +83,13 @@ public static Map<Package, ClassLoader[]> getPackageMap(List<ClassLoader> classL
return answer;
}

protected static void add(Map<Package, ClassLoader[]> answer, Package[] packages, ClassLoader[] classLoaders) {
protected static void add(Map<Package, ClassLoader[]> answer, Package[] packages, ClassLoader[] classLoaders, Set<String> ignorePackages) {
if (packages != null) {
for (Package aPackage : packages) {
answer.put(aPackage, classLoaders);
String name = aPackage.getName();
if (!ignorePackages.contains(name)) {
answer.put(aPackage, classLoaders);
}
}
}
}
Expand Down

0 comments on commit 5099dd8

Please sign in to comment.