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