@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
      super.visitMethodCallExpression(expression);
      if (!OPTIONAL_OR_ELSE_THROW.test(expression)) {
        return;
      }
      PsiLambdaExpression lambdaSupplier = getLambdaSupplier(expression);
      if (lambdaSupplier == null) return;
      PsiType lambdaType = lambdaSupplier.getFunctionalInterfaceType();
      if (lambdaType == null ||
          !InheritanceUtil.isInheritor(lambdaType, JAVA_UTIL_FUNCTION_SUPPLIER) ||
          !(lambdaType instanceof PsiClassType classType && classType.getParameterCount() == 1) ||
          !InheritanceUtil.isInheritor(classType.getParameters()[0], CommonClassNames.JAVA_LANG_THROWABLE)) {
        return;
      }

      PsiElement lambdaSupplierBody = lambdaSupplier.getBody();
      if (lambdaSupplierBody == null || !ControlFlowUtils.lambdaExpressionAlwaysThrowsException(lambdaSupplier)) {
        return;
      }

      List<PsiThrowStatement> all = getThrowStatements(lambdaSupplier);
      if (all.size() == 0) {
        return;
      }
      PsiIdentifier[] identifiers = PsiTreeUtil.getChildrenOfType(expression.getMethodExpression(), PsiIdentifier.class);
      if (identifiers == null || identifiers.length != 1) {
        return;
      }
      registerError(identifiers[0]);
    }
@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)