diff --git a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java index 92b824775901..4fe2715fd4ed 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java @@ -764,7 +764,8 @@ public class PyClassImpl extends PyBaseElementImpl implements PyCla decoName = knownName; } } - if (PyNames.PROPERTY.equals(decoName)) { + if (PyNames.PROPERTY.equals(decoName) || + qname.equals(PyKnownDecoratorUtil.KnownDecorator.ABC_ABSTRACTPROPERTY.getQualifiedName())) { getter = new Maybe<>(method); } else if (useAdvancedSyntax && qname.matches(decoratorName, PyNames.GETTER)) { diff --git a/python/testSrc/com/jetbrains/python/PyTypeTest.java b/python/testSrc/com/jetbrains/python/PyTypeTest.java index 7574e831071f..1e709aec7799 100644 --- a/python/testSrc/com/jetbrains/python/PyTypeTest.java +++ b/python/testSrc/com/jetbrains/python/PyTypeTest.java @@ -1461,6 +1461,17 @@ public class PyTypeTest extends PyTestCase { "expr = float.fromhex(\"0.5\")"); } + // PY-13159 + public void testAbsAbstractProperty() { + doTest("str", + "import abc\n" + + "class D:\n" + + " @abc.abstractproperty\n" + + " def foo(self):\n" + + " return 'foo'\n" + + "expr = D().foo"); + } + // PY-20409 public void testGetFromDictWithDefaultNoneValue() { doTest("Any",