code: public static 
      Set<MethodEntry> getMethodsToImplement(Class<?> iface,
                                             Map<String, Class<?>> types,
                                             Class<?> parent) {
          // TODO: this does not take in account type params defined at the
          // method level yet..ie: <C extends Something> C getC() { ... }
          
          Set<MethodEntry> methods = new HashSet<MethodEntry>();
          addMethods(methods, iface, types, parent);
          return methods;
      }
docs: Get the set of methods that require implementation based on the given
  interface.  If the types are specified, then they will be passed through
  and methods overridden per the generic types.  This may result in bridged
  methods.  If parent is specified, then only non-implemented methods will
  be returned.
  
  @param iface  The associated interface
  @param types  The set of named type variables
  @param parent  The optional parent
  
  @return  The set of methods to implement