public static Set publicSupertypesForMethods(Class cl, Method[] methods) { Set testClasses = allAssignableFrom( cl ); Set out = new HashSet(); for (Iterator ii = testClasses.iterator(); ii.hasNext(); ) { Class check = (Class) ii.next(); if ( isPublic( check ) && hasAllMethodsAsSupertype( check, methods ) ) out.add(check); } return Collections.unmodifiableSet( out ); }