code: public static List<? extends Class<?> > intersectRawTypes(List<Class<?> > classes1, List<Class<?>> classes2) {
          // most typical case
          if (classes1.size() == 1 && classes2.size() == 1) {
              return intersectRawTypes(classes1.get(0), classes2.get(0));
          } else {
              return list(removeSubClasses(intersection(classesAndInterfaces(classes1), classesAndInterfaces(classes2))));
          }
      }
docs: Returns the intersection of raw types of classes and all super classes and interfaces.
  @param classes1 first set of classes to intersect
  @param classes2 first set of classes to intersect
  @return intersection of raw types of classes and all super classes and interfaces