code: private static boolean isAssignableFrom(ParameterizedType type1, Class<?> type2) {
          Class<?> rawType1 = Reflections.getRawType(type1);
  
          // raw types have to be assignable
          if (!isAssignableFrom(rawType1, type2)) {
              return false;
          }
          // this is a raw type with missing type arguments
          if (!Types.getCanonicalType(type2).equals(type2)) {
              return true;
          }
  
          return matches(type1, new HierarchyDiscovery(type2));
      }
docs: /*
  ParameterizedType