void (@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]); }