code: void implementInterfaceMethods(ClassSymbol c, ClassSymbol site) {
          for (List<Type> l = types.interfaces(c.type); l.nonEmpty(); l = l.tail) {
              ClassSymbol i = (ClassSymbol)l.head.tsym;
              for (Scope.Entry e = i.members().elems;
                   e != null;
                   e = e.sibling)
              {
                  if (e.sym.kind == MTH && (e.sym.flags() & STATIC) == 0)
                  {
                      MethodSymbol absMeth = (MethodSymbol)e.sym;
                      MethodSymbol implMeth = absMeth.binaryImplementation(site, types);
                      if (implMeth == null)
                          addAbstractMethod(site, absMeth);
                      else if ((implMeth.flags() & IPROXY) != 0)
                          adjustAbstractMethod(site, implMeth, absMeth);
                  }
              }
              implementInterfaceMethods(i, site);
          }
      }
docs: Add abstract methods for all methods defined in one of
  the interfaces of a given class,
  provided they are not already implemented in the class.
  
  @param c      The class whose interfaces are searched for methods
  for which Miranda methods should be added.
  @param site   The class in which a definition may be needed.