/** returns base, superclasses, then interfaces */ public static List<Class<?>> getAllAssignableTypes(Class<?> base) { return getAllAssignableTypes(base, new Predicate<Class<?>>() { @Override public boolean apply(Class<?> it) { return (it != Object.class) && (it != GroovyObject.class); } }); } /**
/** * @deprecated since 0.11.0; explicit groovy utilities/support will be deleted. */ @Deprecated public static List<Class<?>> getAllAssignableTypes(Class<?> base, Closure<Boolean> filter) { return getAllAssignableTypes(base, GroovyJavaMethods.<Class<?>>predicateFromClosure(filter)); } public static List<Class<?>> getAllAssignableTypes(Class<?> base, Predicate<Class<?>> filter) {
public static List<Field> getAllFields(Class<?> base, Predicate<Field> filter) { return getLocalFields(getAllAssignableTypes(base), filter); } /** returns all fields explicitly declared on the given classes */
@Test public void testGetAllFields() { log.info("types {}", FlagUtils.getAllAssignableTypes(Baz.class)); assertEquals(FlagUtils.getAllAssignableTypes(Baz.class), ImmutableList.of(Baz.class, Foo.class, Bar.class)); List<Field> fs = FlagUtils.getAllFields(Baz.class); for (Field f : fs) { log.info("field {} {}", f.getName(), f); } List<String> fsn = ImmutableList.copyOf(Iterables.transform(fs, new Function<Field, String>() { @Override public String apply(Field f) { return f.getName(); }})); assertTrue(fsn.indexOf("A") >= 0); assertTrue(fsn.indexOf("w") > fsn.indexOf("A")); assertTrue(fsn.indexOf("x") > fsn.indexOf("A") ); assertTrue(fsn.indexOf("yNotY") > fsn.indexOf("A")); assertTrue(fsn.indexOf("Z") > fsn.indexOf("yNotY") ); }