sbool objectDirectlyReferencesObjectOfType(O a, Class c) { if (o == null) false; if (a instanceof O[]) for (O x : (O[]) a) if (isInstance(c, x)) true; for (Field f : nonStaticNonPrimitiveFieldObjects(o)) if (isInstance(f.get(a), c)) true; false; }