From ba7784cf5cdb34cd43e2380a4ee6cbe04d1f5159 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 14 Nov 2013 13:56:07 +0100 Subject: [PATCH] new inference: is poly expression strictly after spec (cherry picked from commit a66cfe3806da068d012952170e22000a47bbfda1) --- .../graphInference/PsiPolyExpressionUtil.java | 32 ++----------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java index d0629db1c614..e5f00f0ff694 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java @@ -16,7 +16,6 @@ package com.intellij.psi.impl.source.resolve.graphInference; import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; import org.jetbrains.annotations.Nullable; @@ -59,7 +58,7 @@ public class PsiPolyExpressionUtil { } } } else if (expression instanceof PsiMethodCallExpression) { - return isMethodCallPolyExpression(expression, dependsOnLambdaParams(expression) ? null : ((PsiMethodCallExpression)expression).resolveMethod()); + return isMethodCallPolyExpression(expression, ((PsiMethodCallExpression)expression).resolveMethod()); } else if (expression instanceof PsiConditionalExpression) { final ConditionalKind conditionalKind = isBooleanOrNumeric(expression); @@ -70,34 +69,7 @@ public class PsiPolyExpressionUtil { return false; } - private static boolean dependsOnLambdaParams(PsiExpression expression) { - final PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(expression, PsiLambdaExpression.class); - boolean isLambdaReturnStmt = lambdaExpression != null && LambdaUtil.getReturnExpressions(lambdaExpression).contains(expression); - if (isLambdaReturnStmt) { - final boolean [] dependsOnParams = new boolean[] {false}; - expression.accept(new JavaRecursiveElementWalkingVisitor() { - @Override - public void visitElement(PsiElement element) { - if (dependsOnParams[0]) return; - super.visitElement(element); - } - - @Override - public void visitReferenceExpression(PsiReferenceExpression expression) { - if (dependsOnParams[0]) return; - super.visitReferenceExpression(expression); - final PsiElement resolve = expression.resolve(); - if (resolve instanceof PsiParameter && ((PsiParameter)resolve).getDeclarationScope() == lambdaExpression) { - dependsOnParams[0] = true; - } - } - }); - isLambdaReturnStmt = dependsOnParams[0]; - } - return isLambdaReturnStmt; - } - - public static boolean isMethodCallPolyExpression(PsiExpression expression, final PsiMethod method) { + public static boolean isMethodCallPolyExpression(PsiExpression expression, final PsiMethod method) { if (isInAssignmentOrInvocationContext(expression) && ((PsiCallExpression)expression).getTypeArguments().length == 0) { if (method != null) { final Set typeParameters = new HashSet(Arrays.asList(method.getTypeParameters()));