diff --git a/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java index d108c09c98fc..93469c61713d 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java @@ -23,6 +23,7 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; +import com.intellij.psi.StubBasedPsiElement; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.stubs.IStubElementType; @@ -158,12 +159,9 @@ public class PyFunctionImpl extends PyPresentableElementImpl imp return null; } - final PsiElement parent = getParent(); - if (parent instanceof PyStatementList) { - PsiElement pparent = parent.getParent(); - if (pparent instanceof PyClass) { - return (PyClass)pparent; - } + final PsiElement parent = PsiTreeUtil.getParentOfType(this, StubBasedPsiElement.class); + if (parent instanceof PyClass) { + return (PyClass)parent; } return null; } diff --git a/python/testData/findUsages/ConditionalFunctions.py b/python/testData/findUsages/ConditionalFunctions.py new file mode 100644 index 000000000000..39f63a841800 --- /dev/null +++ b/python/testData/findUsages/ConditionalFunctions.py @@ -0,0 +1,14 @@ +import sys + +var = (sys.platform == 'win32') + +class A(): + def __init__(self): + self.a = None + + if var: + def func(self): + self.a = "" + else: + def func(self): + self.a = () \ 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 2e2239389b1e..e906386299be 100644 --- a/python/testSrc/com/jetbrains/python/PyFindUsagesTest.java +++ b/python/testSrc/com/jetbrains/python/PyFindUsagesTest.java @@ -147,6 +147,11 @@ public class PyFindUsagesTest extends PyTestCase { assertEquals(2, usages.size()); } + public void testConditionalFunctions() { // PY-1448 + final Collection usages = myFixture.testFindUsages("findUsages/ConditionalFunctions.py"); + assertEquals(3, usages.size()); + } + private Collection findMultiFileUsages(String filename) { final String testName = getTestName(false); myFixture.copyDirectoryToProject("findUsages/" + testName, "");