diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyClass.java b/python/psi-api/src/com/jetbrains/python/psi/PyClass.java index 6c0ae56bf2ab..723214fa2e1b 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyClass.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyClass.java @@ -222,4 +222,13 @@ public interface PyClass extends PsiNameIdentifierOwner, PyStatement, NameDefine */ @Nullable PyClassLikeType getMetaClassType(@NotNull TypeEvalContext context); + + /** + * Returns the expression that defines the metaclass of the class. + * + * It might be defined outside the class in case of file-level __metaclass__ attributes. + * Operates at the AST level. + */ + @Nullable + PyExpression getMetaClassExpression(); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java index 7ebff88ca682..6928810ccbfe 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java @@ -1181,6 +1181,7 @@ public class PyClassImpl extends PyPresentableElementImpl implement } @Nullable + @Override public PyExpression getMetaClassExpression() { final LanguageLevel level = LanguageLevel.forElement(this); if (level.isAtLeast(LanguageLevel.PYTHON30)) {