static A getOpt(O o, S field) { ret (A) getOpt_cached(o, field); } static A mapLike getOpt(S field, O o) { ret (A) getOpt_cached(o, field); } static Object getOpt_raw(Object o, String field) ctex { Field f = getOpt_findField(o.getClass(), field); if (f == null) null; f.setAccessible(true); ret f.get(o); } // access of static fields is not yet optimized static A getOpt(Class c, String field) ctex { if (c == null) null; Field f = getOpt_findStaticField(c, field); if (f == null) null; f.setAccessible(true); ret (A) f.get(null); } static Field getOpt_findStaticField(Class c, String field) { Class _c = c; do { for (Field f : _c.getDeclaredFields()) if (f.getName().equals(field) && (f.getModifiers() & java.lang.reflect.Modifier.STATIC) != 0) return f; _c = _c.getSuperclass(); } while (_c != null); ret null; }