@Nullable
  private static List<Supplier<ReflectiveType>> getLazyMethodSignatureForGenericMethodType(
    @NotNull PsiMethodCallExpression methodTypeExpression
  ) {
    final PsiExpression[] arguments = methodTypeExpression.getArgumentList().getExpressions();
    final Pair.NonNull<Integer, Boolean> signature = getGenericSignature(arguments);
    if (signature != null) {
      final int objectArgCount = signature.getFirst();
      final boolean finalArray = signature.getSecond();
      if (objectArgCount == 0 && !finalArray) {
        return Collections.emptyList();
      }
      final PsiClassType javaLangObject =
        PsiType.getJavaLangObject(methodTypeExpression.getManager(), methodTypeExpression.getResolveScope());
      final ReflectiveType objectType = ReflectiveType.create(javaLangObject, false);
      final List<ReflectiveType> argumentTypes = new ArrayList<>();
      argumentTypes.add(objectType); // return type
      for (int i = 0; i < objectArgCount; i++) {
        argumentTypes.add(objectType);
      }
      if (finalArray) {
        argumentTypes.add(ReflectiveType.arrayOf(objectType));
      }
      return ContainerUtil.map(argumentTypes, type -> (() -> type));
    }
    return null;
  }
@Nullable
  private static List<Supplier<ReflectiveType>> getLazyMethodSignatureForGenericMethodType(
    @NotNull PsiMethodCallExpression methodTypeExpression
  )