From ad970effd6ebeb0fb601920e48b6c7ffd5df5327 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 23 Sep 2013 20:08:45 +0400 Subject: [PATCH] lambda: propagate wildcards elimination --- .../daemon/impl/analysis/HighlightVisitorImpl.java | 2 +- .../FunctionalInterfaceParameterizationUtil.java | 5 +++-- .../psi/impl/source/tree/java/PsiLambdaExpressionImpl.java | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 6522fd322f4a..cb34a20bd184 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -301,7 +301,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh myHolder.add(result); } else { - final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(FunctionalInterfaceParameterizationUtil.getFunctionalType(functionalInterfaceType, expression)); + final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(functionalInterfaceType); final PsiMethod interfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(resolveResult); if (interfaceMethod != null) { final PsiParameter[] parameters = interfaceMethod.getParameterList().getParameters(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java index 1bb4278ea1b0..6e38cd42f15d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java @@ -24,7 +24,8 @@ import org.jetbrains.annotations.Nullable; public class FunctionalInterfaceParameterizationUtil { private static final Logger LOG = Logger.getInstance("#" + FunctionalInterfaceParameterizationUtil.class.getName()); - public static boolean isWildcardParameterized(@NotNull PsiType classType) { + public static boolean isWildcardParameterized(@Nullable PsiType classType) { + if (classType == null) return false; if (classType instanceof PsiIntersectionType) { for (PsiType type : ((PsiIntersectionType)classType).getConjuncts()) { if (!isWildcardParameterized(type)) return false; @@ -43,7 +44,7 @@ public class FunctionalInterfaceParameterizationUtil { } @Nullable - public static PsiType getFunctionalType(PsiType psiClassType, PsiLambdaExpression expr) { + public static PsiType getFunctionalType(@Nullable PsiType psiClassType, PsiLambdaExpression expr) { if (!expr.hasFormalParameterTypes()) return psiClassType; if (!isWildcardParameterized(psiClassType)) { return psiClassType; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiLambdaExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiLambdaExpressionImpl.java index 3093099e228a..5710165181f8 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiLambdaExpressionImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiLambdaExpressionImpl.java @@ -19,6 +19,7 @@ import com.intellij.lang.ASTNode; import com.intellij.psi.*; import com.intellij.psi.controlFlow.*; import com.intellij.psi.impl.PsiImplUtil; +import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil; import com.intellij.psi.impl.source.tree.ChildRole; import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.scope.PsiScopeProcessor; @@ -63,7 +64,7 @@ public class PsiLambdaExpressionImpl extends ExpressionPsiElement implements Psi @Nullable @Override public PsiType getFunctionalInterfaceType() { - return LambdaUtil.getFunctionalInterfaceType(this, true); + return FunctionalInterfaceParameterizationUtil.getFunctionalType(LambdaUtil.getFunctionalInterfaceType(this, true), this); } @Override