--- /dev/null
+# --- TypeField ---
+
+class TypeFieldMeta(type):
+ pass
+
+
+class TypeField(metaclass=TypeFieldMeta):
+ pass
+
+
+# --- FieldedType ---
+
+class FieldedTypeMeta(type):
+ pass
+
+
+class FieldedType(metaclass=FieldedTypeMeta):
+ pass
+
+
+# --- CompositeField ---
+
+class CompositeFieldMeta(type(FieldedType), type(TypeField)):
+ # The superclass declaration is spelled they way it is to true and isolate this bit of code
+ # from the implementation details of whether or not FieldedType and TypeField have special
+ # metaclasses of their own or not and still get a metaclass MRO that keeps Python happy.
+ pass
import com.intellij.util.ArrayUtil;
import com.jetbrains.python.fixtures.PyTestCase;
+import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyClass;
import com.jetbrains.python.psi.types.PyClassLikeType;
import com.jetbrains.python.psi.types.TypeEvalContext;
assertMRO(getClass("MyClass"), "Base", "object");
}
+ // PY-20026
+ public void testUnresolvedMetaClassAncestors() {
+ runWithLanguageLevel(LanguageLevel.PYTHON30, () -> assertMRO(getClass("CompositeFieldMeta"), "type", "object"));
+ }
+
@NotNull
public PyClass getClass(@NotNull String name) {
myFixture.configureByFile(getPath(getTestName(false)));