void (@NotNull PsiReferenceExpression expression) { super.visitReferenceExpression(expression); if (expression instanceof PsiMethodReferenceExpression methodReferenceExpression) { if (methodReferenceExpression.isConstructor()) { return; } final PsiElement referenceNameElement = methodReferenceExpression.getReferenceNameElement(); if (referenceNameElement == null) { return; } final PsiElement target = methodReferenceExpression.resolve(); if (!(target instanceof PsiMethod method)) { return; } final PsiType returnType = method.getReturnType(); if (returnType == null || returnType.equals(PsiTypes.voidType()) || !TypeConversionUtil.isPrimitiveAndNotNull(returnType)) { return; } final PsiPrimitiveType primitiveType = (PsiPrimitiveType)returnType; final PsiClassType boxedType = primitiveType.getBoxedType(expression); if (boxedType == null) { return; } final PsiType functionalInterfaceReturnType = LambdaUtil.getFunctionalInterfaceReturnType(methodReferenceExpression); if (functionalInterfaceReturnType == null || TypeConversionUtil.isPrimitiveAndNotNull(functionalInterfaceReturnType) || !functionalInterfaceReturnType.isAssignableFrom(boxedType)) { return; } registerError(referenceNameElement); } else { checkExpression(expression); } }