static L<Method> allLiveMethods_skipOverridden(O o) { Class c = _getClass(o); bool isInstance = c != o; new L<Method> methods; Set<Pair<S, L<Class>>> seenSignatures = new HashSet; while (c != null) { for (Method m : c.getDeclaredMethods()) if (isInstance != isStaticMethod(m)) { Pair<S, L<Class>> sig = pair(m.getName(), methodArgumentTypes(m)); if (seenSignatures.add(sig)) methods.add(m); } c = c.getSuperclass(); } ret methods; }