boolean (PsiMethodReferenceExpression expression, JavaResolveResult result, PsiType functionalInterfaceType, Ref<@Nls String> errorMessage) { final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(functionalInterfaceType); final PsiMethod interfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(resolveResult); if (interfaceMethod != null) { final PsiType interfaceReturnType = LambdaUtil.getFunctionalInterfaceReturnType(functionalInterfaceType); if (PsiTypes.voidType().equals(interfaceReturnType) || interfaceReturnType == null) { return true; } PsiType methodReturnType = getMethodReferenceReturnType(expression, result); if (methodReturnType == null) { return false; } if (TypeConversionUtil.isAssignable(interfaceReturnType, methodReturnType)) { return true; } if (errorMessage != null) { errorMessage.set(JavaPsiBundle.message("bad.return.type.in.method.reference", methodReturnType.getCanonicalText(), interfaceReturnType.getCanonicalText())); } } return false; }