private Method[] getMethodsToProxyRecursive() {
    Set<MethodSetEntry> methodsToProxy = new HashSet<>();
    Set<MethodSetEntry> seenFinalMethods = new HashSet<>();
    // Traverse the class hierarchy to ensure that all concrete methods (which could be marked
    // as final) are visited before any abstract methods from interfaces.
    for (Class<?> c = baseClass; c != null; c = c.getSuperclass()) {
      getMethodsToProxy(methodsToProxy, seenFinalMethods, c);
    }
    // Now traverse the interface hierarchy, starting with the ones implemented by the class,
    // followed by any extra interfaces.
    for (Class<?> c = baseClass; c != null; c = c.getSuperclass()) {
      for (Class<?> i : c.getInterfaces()) {
        getMethodsToProxy(methodsToProxy, seenFinalMethods, i);
      }
    }
    for (Class<?> c : interfaces) {
      getMethodsToProxy(methodsToProxy, seenFinalMethods, c);
    }

    Method[] results = new Method[methodsToProxy.size()];
    int i = 0;
    for (MethodSetEntry entry : methodsToProxy) {
      results[i++] = entry.originalMethod;
    }

    return results;
  }
Gets all {@link Method} objects we can proxy in the hierarchy of the supplied class.
android/android_framework/dex-maker/src/main/java/com/android/dx/stock/ProxyBuilder.java