code: protected boolean addInterface(MethodBodyCreator override, Class<?> interfaceClass) {
          if (interfaces.contains(interfaceClass)) {
              return false;
          }
          interfaces.add(interfaceClass);
          classFile.addInterface(interfaceClass.getName());
          final Set<Class<?>> interfaces = new HashSet<Class<?>>();
          final Set<Class<?>> toProcess = new HashSet<Class<?>>();
          toProcess.add(interfaceClass);
  
          //walk the interface hierarchy and get all methods
          while(!toProcess.isEmpty()) {
              Iterator<Class<?>> it = toProcess.iterator();
              final Class<?> c = it.next();
              it.remove();
              interfaces.add(c);
              for(Class<?> i : c.getInterfaces()) {
                  if(!interfaces.contains(i)) {
                      toProcess.add(i);
                  }
              }
          }
          ClassMetadataSource classMd = reflectionMetadataSource.getClassMetadata(getSuperClass());
          for(final Class<?> c : interfaces) {
              ClassMetadataSource data = reflectionMetadataSource.getClassMetadata(c);
              for (Method method : data.getDeclaredMethods()) {
                  Method classMethod = null;
                  for(Method cm : classMd.getDeclaredMethods() ) {
                      if(method.getName().equals(cm.getName()) && method.getReturnType().equals(cm.getReturnType()) && Arrays.equals(method.getParameterTypes(), cm.getParameterTypes())) {
                          classMethod = cm;
                          break;
                      }
                  }
                  if ((classMethod == null || !Modifier.isFinal(classMethod.getModifiers())) && !Modifier.isStatic(method.getModifiers())) {
                      overrideMethod(method, MethodIdentifier.getIdentifierForMethod(method), override);
                  }
              }
          }
          return true;
      }
docs: Adds an interface to the generated subclass, using the given {@link MethodBodyCreator} to generate the method bodies
  
  @param override       the method body creator to use
  @param interfaceClass the interface to add
  @return true if the interface was not already overridden