From cc3647f65b5641e36bb4051455d39a03fcecf708 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 27 Jul 2010 20:11:41 +0400 Subject: [PATCH] don't apply loose isReferenceTo() logic of qualified references with unknown qualifier type to __init__ calls (otherwise we get very weird results when searching usages of class) (PY-1450) --- .../jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java | 3 ++- python/testData/findUsages/UnresolvedClassInit.py | 3 +++ python/testSrc/com/jetbrains/python/PyFindUsagesTest.java | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 python/testData/findUsages/UnresolvedClassInit.py diff --git a/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java b/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java index 1e08b1084544..ce7ec0db5141 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java @@ -8,6 +8,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.ArrayUtil; import com.intellij.util.ProcessingContext; +import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.patterns.SyntaxMatchers; import com.jetbrains.python.psi.resolve.*; @@ -242,7 +243,7 @@ public class PyQualifiedReferenceImpl extends PyReferenceImpl { } final String referencedName = myElement.getReferencedName(); if (element instanceof PyFunction && Comparing.equal(referencedName, ((PyFunction)element).getName()) && - ((PyFunction)element).getContainingClass() != null) { + ((PyFunction)element).getContainingClass() != null && !PyNames.INIT.equals(referencedName)) { final PyExpression qualifier = myElement.getQualifier(); if (qualifier != null && qualifier.getType(TypeEvalContext.fast()) == null) { return true; diff --git a/python/testData/findUsages/UnresolvedClassInit.py b/python/testData/findUsages/UnresolvedClassInit.py new file mode 100644 index 000000000000..4e5df21c202e --- /dev/null +++ b/python/testData/findUsages/UnresolvedClassInit.py @@ -0,0 +1,3 @@ +class B(C): + def __init__(self): + C.__init__(self) \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyFindUsagesTest.java b/python/testSrc/com/jetbrains/python/PyFindUsagesTest.java index 69e02baf7f8c..e80f0333962e 100644 --- a/python/testSrc/com/jetbrains/python/PyFindUsagesTest.java +++ b/python/testSrc/com/jetbrains/python/PyFindUsagesTest.java @@ -54,6 +54,11 @@ public class PyFindUsagesTest extends PyLightFixtureTestCase { assertUsages(usages, "parm+1"); } + public void testUnresolvedClassInit() { // PY-1450 + final Collection usages = myFixture.testFindUsages("findUsages/UnresolvedClassInit.py"); + assertUsages(usages); + } + private void assertUsages(Collection usages, String... usageTexts) { assertEquals(usageTexts.length, usages.size()); List sortedUsages = new ArrayList(usages);