diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/PyKnownDecoratorUtil.java b/python/python-psi-impl/src/com/jetbrains/python/psi/PyKnownDecoratorUtil.java index 5e5a7a773ad3..d4102d450527 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/PyKnownDecoratorUtil.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/PyKnownDecoratorUtil.java @@ -6,6 +6,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.util.QualifiedName; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.FunctionParameter; +import com.jetbrains.python.PyNames; import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.PyResolveUtil; @@ -56,6 +57,11 @@ public final class PyKnownDecoratorUtil { if (qualifiedName == null) { return Collections.emptyList(); } + // Avoid resolving property accessor decorators to prevent an infinite recursion + String lastComponent = qualifiedName.getLastComponent(); + if (PyNames.GETTER.equals(lastComponent) || PyNames.SETTER.equals(lastComponent) || PyNames.DELETER.equals(lastComponent)) { + return Collections.emptyList(); + } if (context.maySwitchToAST(decorator)) { PsiFile containingFile = decorator.getContainingFile(); List resolved;