From eb3a2c6004b7dfbe1069a408304960971c6a973a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 17 Jan 2011 16:36:16 +0100 Subject: [PATCH] correct resolve roof for private names in superclass list of a class (PY-2618) --- .../src/com/jetbrains/python/psi/impl/PyReferenceImpl.java | 5 ++++- python/testData/resolve/PrivateInsideModule.py | 3 +++ python/testSrc/com/jetbrains/python/PyResolveTest.java | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 python/testData/resolve/PrivateInsideModule.py diff --git a/python/src/com/jetbrains/python/psi/impl/PyReferenceImpl.java b/python/src/com/jetbrains/python/psi/impl/PyReferenceImpl.java index 2275dc0be309..afa4171a33b3 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyReferenceImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyReferenceImpl.java @@ -234,7 +234,10 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference } while (one instanceof PyFunction); if (one instanceof PyClass) { - return one; + PyArgumentList superClassExpressionList = ((PyClass)one).getSuperClassExpressionList(); + if (superClassExpressionList == null || !PsiTreeUtil.isAncestor(superClassExpressionList, myElement, false)) { + return one; + } } } diff --git a/python/testData/resolve/PrivateInsideModule.py b/python/testData/resolve/PrivateInsideModule.py new file mode 100644 index 000000000000..11a69039018e --- /dev/null +++ b/python/testData/resolve/PrivateInsideModule.py @@ -0,0 +1,3 @@ +class __VeryPrivate(object): pass +class Public(__VeryPrivate): pass +# \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyResolveTest.java b/python/testSrc/com/jetbrains/python/PyResolveTest.java index 5508a00578a1..22080efc9d4e 100644 --- a/python/testSrc/com/jetbrains/python/PyResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyResolveTest.java @@ -388,4 +388,8 @@ public class PyResolveTest extends PyResolveTestCase { public void testWithParentheses() { assertResolvesTo(LanguageLevel.PYTHON27, PyTargetExpression.class, "MockClass1"); } + + public void testPrivateInsideModule() { // PY-2618 + assertResolvesTo(PyClass.class, "__VeryPrivate"); + } } \ No newline at end of file