ThreeState (@NotNull PsiFunctionalExpression expression, @NotNull List<? extends PsiClass> samClasses) { PsiElement parent = expression.getParent(); if (parent instanceof PsiExpressionList && parent.getParent() instanceof PsiMethodCallExpression) { PsiExpression[] args = ((PsiExpressionList)parent).getExpressions(); int argIndex = Arrays.asList(args).indexOf(expression); PsiReferenceExpression methodExpression = ((PsiMethodCallExpression)parent.getParent()).getMethodExpression(); PsiExpression qualifier = methodExpression.getQualifierExpression(); String methodName = methodExpression.getReferenceName(); if (qualifier != null && methodName != null && argIndex >= 0) { Set<PsiClass> approximateTypes = ApproximateResolver.getPossibleTypes(qualifier, 10); List<PsiMethod> methods = approximateTypes == null ? null : ApproximateResolver.getPossibleMethods(approximateTypes, methodName, args.length); return methods == null ? ThreeState.UNSURE : methods.isEmpty() ? ThreeState.NO : ThreeState.merge(JBIterable.from(methods).map(m -> FunExprOccurrence.hasCompatibleParameter(m, argIndex, samClasses))); } } return ThreeState.UNSURE; }