code: public static List<? extends Class<?>> intersectRawTypes(Class<?> clazz1,
  			Class<?> clazz2) {
  		if (clazz2 == null) {
  			clazz2 = Object.class;
  		}
  		if (clazz1 == null) {
  			clazz1 = Object.class;
  		}
          if (clazz1.isPrimitive()) {
              clazz1 = Types.getWrapperClass(clazz1.getName());
          }
          if (clazz2.isPrimitive()) {
              clazz2 = Types.getWrapperClass(clazz2.getName());
          }
  
  		if (clazz1.equals(clazz2)) {
              return singletonList(clazz1);
          }
          if (Types.isAssignable(clazz2, clazz1)) {
              return singletonList(clazz1);
          }
          if (Types.isAssignable(clazz1, clazz2)) {
              return singletonList(clazz2);
          }
          final Set<Class<?>> common = commonClasses(clazz1, clazz2);
          final List<Class<?>> list = list(removeSubClasses(common));
          return list.isEmpty() ? LIST_OF_OBJECT_CLASS : list;
  
      }
docs: Looks for intersection of raw types of classes and all super classes and interfaces.
  @param clazz1 one of the classes to intersect
  @param clazz2 one of the classes to intersect
  @return intersection of raw types of classes and all super classes and interfaces