boolean (PsiFunctionalExpression expression, PsiExpressionList argsList, PsiMethod method) { if (!Registry.is("JDK8042508.bug.fixed", false)) { final PsiCallExpression callExpression = PsiTreeUtil.getParentOfType(argsList, PsiCallExpression.class); if (callExpression == null || callExpression.getTypeArguments().length > 0) { return false; } } final int lambdaIdx = getLambdaIdx(argsList, expression); if (lambdaIdx >= 0) { final PsiParameter[] parameters = method.getParameterList().getParameters(); final PsiParameter lambdaParameter = parameters[Math.min(lambdaIdx, parameters.length - 1)]; final PsiClass paramClass = PsiUtil.resolveClassInType(lambdaParameter.getType()); if (paramClass instanceof PsiTypeParameter && ((PsiTypeParameter)paramClass).getOwner() == method) { return true; } } return false; }