diff --git a/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java index b1b7765b4eaa..1980ef1eb285 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java @@ -216,12 +216,16 @@ public class PyReferenceExpressionImpl extends PyElementImpl implements PyRefere PyExpression qualifier = getQualifier(); final String name = getName(); if (name != null && qualifier != null) { - PyType qualifier_type = context.getType(qualifier); - if (qualifier_type instanceof PyClassType) { - PyClass pyClass = ((PyClassType)qualifier_type).getPyClass(); + PyType qualifierType = context.getType(qualifier); + if (qualifierType instanceof PyClassType) { + final PyClassType classType = (PyClassType)qualifierType; + PyClass pyClass = classType.getPyClass(); if (pyClass != null) { Property property = pyClass.findProperty(name); if (property != null) { + if (classType.isDefinition()) { + return Ref.create(PyBuiltinCache.getInstance(pyClass).getObjectType(PyNames.PROPERTY)); + } final Maybe accessor = property.getByDirection(AccessDirection.of(this)); if (!accessor.isDefined()) { return Ref.create(null); diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/propertyType.py b/python/testData/inspections/PyUnresolvedReferencesInspection/propertyType.py new file mode 100644 index 000000000000..1b2cb2ed97bb --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/propertyType.py @@ -0,0 +1,34 @@ +# coding=utf-8 + +""" +Sample of code that use fget +""" + +class Parent(object): + """ + parent class to show a simply property + """ + + @property + def attribute(self): + """ + some attribute in parent + """ + return True + +class Child(Parent): + """ + child class + """ + + @property + def attribute(self): + """ + do something before execute code of parent attribute + """ + print "i'm the child" + return Parent.attribute.fget(self) + +if __name__ == '__main__': + child = Child() + print child.attribute diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java index 76877b91d52b..3fab2969cc9f 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java @@ -93,6 +93,10 @@ public class PyUnresolvedReferencesInspectionTest extends PyTestCase { doMultiFileTest(); } + public void testPropertyType() { // PY-5915 + doTest(); + } + private void doMultiFileTest() { myFixture.copyFileToProject("inspections/PyUnresolvedReferencesInspection/__init__.py", "PyUnresolvedReferencesInspection/__init__.py"); myFixture.copyFileToProject("inspections/PyUnresolvedReferencesInspection/" + getTestName(true) + ".py",