docs: private static boolean typesEquivalent(WildcardType typeToMatch, WildcardType type, ResolutionContext ctx) {
          if (typeToMatch.getUpperBounds().length != type.getUpperBounds().length) {
              return false;
          }
  
          if (typeToMatch.getLowerBounds().length != type.getLowerBounds().length) {
              return false;
          }
  
          for (int i = 0; i < typeToMatch.getUpperBounds().length; i++) {
              if (!typesEquivalent(typeToMatch.getUpperBounds()[i], ctx.resolve(type.getUpperBounds()[i]), ctx)) {
                  return false;
              }
          }
  
          for (int i = 0; i < typeToMatch.getLowerBounds().length; i++) {
              if (!typesEquivalent(typeToMatch.getLowerBounds()[i], ctx.resolve(type.getLowerBounds()[i]), ctx)) {
                  return false;
              }
          }
  
          return true;
      }