summaryrefslogtreecommitdiff
path: root/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java
diff options
context:
space:
mode:
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.java33
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 {