diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java index c88970062abb..5ac1aac711a3 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java @@ -142,7 +142,7 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference element instanceof PyTargetExpression && e != null && PyUtil.inSameFile(element, e) && PyPsiUtils.isBefore(element, e)) { continue; } - results.add(changePropertyMethodToSameNameGetter(r, name)); + results.add(changePropertyMethodToSameNameGetter(r, name, element)); } return results; } @@ -160,7 +160,19 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference return false; } - private static @NotNull RatedResolveResult changePropertyMethodToSameNameGetter(@NotNull RatedResolveResult resolveResult, @NotNull String name) { + private static @NotNull RatedResolveResult changePropertyMethodToSameNameGetter(@NotNull RatedResolveResult resolveResult, + @NotNull String name, + @NotNull PsiElement referenceElement) { + PyCallExpression propertyCall = PsiTreeUtil.getParentOfType(referenceElement, PyCallExpression.class); + if (propertyCall != null) { + // Avoid converting function to property getter when the reference we are resolving sits inside a property(...) call (e.g., property(__getX)) + // In such context we actually need the bare function, not the property + PyCallExpression propertyCallSite = PropertyBunch.findPropertyCallSite(propertyCall); + if (propertyCallSite != null) { + return resolveResult; + } + } + final PsiElement element = resolveResult.getElement(); if (element instanceof PyFunction) { final Property property = ((PyFunction)element).getProperty(); diff --git a/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java b/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java index 7f12e9f5e2c7..fc4ce2dbf56e 100644 --- a/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java +++ b/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java @@ -2,6 +2,7 @@ package com.jetbrains.python; import com.intellij.codeInsight.documentation.DocumentationManager; +import com.intellij.openapi.util.RecursionManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; @@ -173,6 +174,7 @@ public class Py3QuickDocTest extends LightMarkedTestCase { } public void testPropOldGetter() { + RecursionManager.assertOnRecursionPrevention(myFixture.getTestRootDisposable()); checkHTMLOnly(); }