mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
lambda: propagate wildcards elimination
This commit is contained in:
+1
-1
@@ -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();
|
||||
|
||||
+3
-2
@@ -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;
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user