ublic static boolean matchMethodWithParams(@NotNull Map<String, List<List<PsiType>>> existingMethodsWithTypes,
                                              @NotNull String methodName,
                                              @NotNull List<PsiType> methodParameterTypes) {
    final List<List<PsiType>> existingMethodWithTypes = existingMethodsWithTypes.getOrDefault(methodName, Collections.emptyList());
    if (!existingMethodWithTypes.isEmpty()) {
      final int typesCount = methodParameterTypes.size();
      final List<List<PsiType>> existingMethodsTypes = ContainerUtil.filter(existingMethodWithTypes, types -> types.size() == typesCount);
      if (!existingMethodsTypes.isEmpty()) {
        //check params
        for (List<PsiType> existingMethodTypes : existingMethodsTypes) {
          boolean allParameterTypesMatched = true;

          for (int i = 0; i < typesCount; i++) {
            if (!PsiTypesUtil.compareTypes(existingMethodTypes.get(i), methodParameterTypes.get(i), true)) {
              allParameterTypesMatched = false;
              break;
            }
          }

          if (allParameterTypesMatched) {
            return true;
          }
        }
      }
    }
    return false;
  }

ublic static boolean matchMethodWithParams(@NotNull Map<String, List<List<PsiType>>> existingMethodsWithTypes,
                                              @NotNull String methodName,
                                              @NotNull List<PsiType> methodParameterTypes) 