diff options
Diffstat (limited to 'java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java')
-rw-r--r-- | java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java | 33 |
1 files changed, 18 insertions, 15 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 d6a1d46ad336..3b8d3424bc80 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,10 +16,8 @@ package com.intellij.psi.impl.source.resolve.graphInference; import com.intellij.psi.*; -import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; @@ -60,18 +58,7 @@ public class PsiPolyExpressionUtil { } } } else if (expression instanceof PsiMethodCallExpression) { - if (isInAssignmentOrInvocationContext(expression) && ((PsiMethodCallExpression)expression).getTypeArguments().length == 0) { - final PsiMethod method = ((PsiMethodCallExpression)expression).resolveMethod(); - if (method != null) { - final Set<PsiTypeParameter> typeParameters = new HashSet<PsiTypeParameter>(Arrays.asList(method.getTypeParameters())); - if (typeParameters.size() > 0) { - final PsiType returnType = method.getReturnType(); - if (returnType != null) { - return mentionsTypeParameters(returnType, typeParameters); - } - } - } - } + return isMethodCallPolyExpression(expression, ((PsiMethodCallExpression)expression).resolveMethod()); } else if (expression instanceof PsiConditionalExpression) { final ConditionalKind conditionalKind = isBooleanOrNumeric(expression); @@ -82,6 +69,21 @@ public class PsiPolyExpressionUtil { return false; } + public static boolean isMethodCallPolyExpression(PsiExpression expression, final PsiMethod method) { + if (isInAssignmentOrInvocationContext(expression) && ((PsiCallExpression)expression).getTypeArguments().length == 0) { + if (method != null) { + final Set<PsiTypeParameter> typeParameters = new HashSet<PsiTypeParameter>(Arrays.asList(method.getTypeParameters())); + if (typeParameters.size() > 0) { + final PsiType returnType = method.getReturnType(); + if (returnType != null) { + return mentionsTypeParameters(returnType, typeParameters); + } + } + } + } + return false; + } + public static Boolean mentionsTypeParameters(@Nullable PsiType returnType, final Set<PsiTypeParameter> typeParameters) { if (returnType == null) return false; return returnType.accept(new PsiTypeVisitor<Boolean>() { @@ -128,7 +130,8 @@ public class PsiPolyExpressionUtil { return PsiUtil.isCondition(expr, context) || context instanceof PsiReturnStatement || context instanceof PsiAssignmentExpression || - context instanceof PsiVariable; + context instanceof PsiVariable || + context instanceof PsiLambdaExpression; } private enum ConditionalKind { |