lambda: propagate wildcards elimination

This commit is contained in:
Anna Kozlova
2013-09-23 20:08:45 +04:00
parent e78ab513a5
commit ad970effd6
3 changed files with 6 additions and 4 deletions
@@ -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();
@@ -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;
@@ -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