public static boolean isLambdaSubsignature(@NotNull PsiMethod method1,
                                             @NotNull PsiType type1,
                                             @NotNull PsiMethod method2,
                                             @NotNull PsiType type2) {
    MethodSignature signature1 = method1.getSignature(PsiSubstitutor.EMPTY);
    MethodSignature signature2 = method2.getSignature(PsiSubstitutor.EMPTY);
    if (!MethodSignatureUtil.isSubsignature(signature1, signature2) &&
        !MethodSignatureUtil.isSubsignature(signature2, signature1)) {
      return false;
    }
    signature1 = getSignatureWithSubstitutors(method1, type1);
    signature2 = getSignatureWithSubstitutors(method2, type2);
    if (!MethodSignatureUtil.isSubsignature(signature1, signature2) &&
        !MethodSignatureUtil.isSubsignature(signature2, signature1)) {
      return false;
    }

    return true;
  }
public static boolean isLambdaSubsignature(@NotNull PsiMethod method1,
                                             @NotNull PsiType type1,
                                             @NotNull PsiMethod method2,
                                             @NotNull PsiType type2)