From ec340c602ba49fd5875c42490aa95b3b6033506a Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Fri, 21 Aug 2015 17:58:42 +0300 Subject: [PATCH] Don't split untyped usages into signature match / mismatch groups We cannot reliably match arguments against parameters in case of unknown qualifier type of a call expression, so there is no point in splitting these usages into two different groups. --- .../findUsages/PyUsageTypeProvider.java | 24 ++----------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/python/src/com/jetbrains/python/findUsages/PyUsageTypeProvider.java b/python/src/com/jetbrains/python/findUsages/PyUsageTypeProvider.java index 3745afad63d1..5152a0dd8a34 100644 --- a/python/src/com/jetbrains/python/findUsages/PyUsageTypeProvider.java +++ b/python/src/com/jetbrains/python/findUsages/PyUsageTypeProvider.java @@ -23,11 +23,10 @@ import com.intellij.usages.impl.rules.UsageTypeProviderEx; import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyPsiUtils; -import com.jetbrains.python.psi.resolve.PyResolveContext; +import com.jetbrains.python.psi.types.PyStructuralType; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author yole @@ -37,7 +36,6 @@ public class PyUsageTypeProvider implements UsageTypeProviderEx { private static final UsageType UNTYPED = new UsageType("Untyped (probable) usage"); private static final UsageType USAGE_IN_ISINSTANCE = new UsageType("Usage in isinstance()"); private static final UsageType USAGE_IN_SUPERCLASS = new UsageType("Usage in superclass list"); - private static final UsageType SIGNATURE_MISMATCH = new UsageType("Untyped (probable) usage, signature mismatch"); @Override public UsageType getUsageType(PsiElement element) { @@ -54,11 +52,7 @@ public class PyUsageTypeProvider implements UsageTypeProviderEx { if (qualifier != null) { final TypeEvalContext context = TypeEvalContext.userInitiated(element.getProject(), element.getContainingFile()); final PyType type = context.getType(qualifier); - if (type == null) { - final PyCallExpression call = PsiTreeUtil.getParentOfType(element, PyCallExpression.class); - if (call != null && element == call.getCallee()) { - return checkMatchingSignatureGroup(call, context); - } + if (type == null || type instanceof PyStructuralType) { return UNTYPED; } } @@ -86,18 +80,4 @@ public class PyUsageTypeProvider implements UsageTypeProviderEx { } return null; } - - @Nullable - private static UsageType checkMatchingSignatureGroup(@NotNull PyCallExpression call, @NotNull TypeEvalContext context) { - final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(context); - final PyArgumentList argumentList = call.getArgumentList(); - final PyCallExpression.PyMarkedCallee callee = call.resolveCallee(resolveContext); - if (callee != null && argumentList != null) { - final CallArgumentsMapping mapping = argumentList.analyzeCall(resolveContext); - if (mapping.hasProblems()) { - return SIGNATURE_MISMATCH; - } - } - return null; - } }