From 3ff146ee195e61aed9468edfd3ba2353f23d6f53 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 4 Feb 2013 15:02:18 +0100 Subject: [PATCH] don't bother searching for implicit resolve results if we're going to reject them anyway (PY-6559) --- .../python/psi/resolve/PyResolveContext.java | 4 ++++ .../psi/impl/references/PyQualifiedReference.java | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/python/psi-api/src/com/jetbrains/python/psi/resolve/PyResolveContext.java b/python/psi-api/src/com/jetbrains/python/psi/resolve/PyResolveContext.java index 9816e755582e..4795a3e9ff79 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/resolve/PyResolveContext.java +++ b/python/psi-api/src/com/jetbrains/python/psi/resolve/PyResolveContext.java @@ -51,6 +51,10 @@ public class PyResolveContext { return new PyResolveContext(myAllowImplicits, myAllowProperties, context); } + public PyResolveContext withoutImplicits() { + return new PyResolveContext(false, myAllowProperties, myTypeEvalContext); + } + public TypeEvalContext getTypeEvalContext() { return myTypeEvalContext != null ? myTypeEvalContext : TypeEvalContext.fastStubOnly(null); } diff --git a/python/src/com/jetbrains/python/psi/impl/references/PyQualifiedReference.java b/python/src/com/jetbrains/python/psi/impl/references/PyQualifiedReference.java index de36cbafed9b..2fdd1a0539b2 100644 --- a/python/src/com/jetbrains/python/psi/impl/references/PyQualifiedReference.java +++ b/python/src/com/jetbrains/python/psi/impl/references/PyQualifiedReference.java @@ -4,6 +4,7 @@ import com.intellij.codeInsight.completion.CompletionUtil; import com.intellij.codeInsight.lookup.AutoCompletionPolicy; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.text.StringUtil; @@ -40,6 +41,8 @@ import java.util.*; * @author yole */ public class PyQualifiedReference extends PyReferenceImpl { + private static final Logger LOG = Logger.getInstance(PyQualifiedReference.class); + public PyQualifiedReference(PyQualifiedExpression element, PyResolveContext context) { super(element, context); } @@ -385,10 +388,8 @@ public class PyQualifiedReference extends PyReferenceImpl { } } } - for (ResolveResult result : multiResolve(false)) { - if (result instanceof ImplicitResolveResult) { - continue; - } + for (ResolveResult result : copyWithoutImplicits().multiResolve(false)) { + LOG.assertTrue(!(result instanceof ImplicitResolveResult)); PsiElement resolveResult = result.getElement(); if (isResolvedToResult(element, resolveResult)) { return true; @@ -398,6 +399,10 @@ public class PyQualifiedReference extends PyReferenceImpl { return false; } + protected PyQualifiedReference copyWithoutImplicits() { + return new PyQualifiedReference(myElement, myContext.withoutImplicits()); + } + private boolean isResolvedToResult(PsiElement element, PsiElement resolveResult) { if (resolveResult instanceof PyImportedModule) { resolveResult = resolveResult.getNavigationElement();