diff --git a/python/src/com/jetbrains/python/documentation/PyTypeModelBuilder.java b/python/src/com/jetbrains/python/documentation/PyTypeModelBuilder.java index b24646262593..017b812fc5c3 100644 --- a/python/src/com/jetbrains/python/documentation/PyTypeModelBuilder.java +++ b/python/src/com/jetbrains/python/documentation/PyTypeModelBuilder.java @@ -21,6 +21,7 @@ import com.intellij.psi.PsiElement; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PyNames; import com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider; +import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.types.*; import com.jetbrains.python.toolbox.ChainIterable; import org.jetbrains.annotations.NotNull; @@ -280,7 +281,14 @@ public class PyTypeModelBuilder { result = buildCallable((PyCallableType)type); } else if (type instanceof PyInstantiableType && ((PyInstantiableType)type).isDefinition()) { - result = new ClassObjectType(build(((PyInstantiableType)type).toInstance(), allowUnions)); + final PyInstantiableType instanceType = ((PyInstantiableType)type).toInstance(); + // Special case: render Type[type] as just type + if (type instanceof PyClassType && instanceType.equals(PyBuiltinCache.getInstance(((PyClassType)type).getPyClass()).getTypeType())) { + result = NamedType.nameOrAny(type); + } + else { + result = new ClassObjectType(build(instanceType, allowUnions)); + } } else if (type instanceof PyGenericType) { //assert !((PyGenericType)type).isDefinition() diff --git a/python/testData/inspections/PyTypeCheckerInspection/TypeAndClassObjectTypesCompatibility.py b/python/testData/inspections/PyTypeCheckerInspection/TypeAndClassObjectTypesCompatibility.py index 1a9e4eda32cd..b484b262720f 100644 --- a/python/testData/inspections/PyTypeCheckerInspection/TypeAndClassObjectTypesCompatibility.py +++ b/python/testData/inspections/PyTypeCheckerInspection/TypeAndClassObjectTypesCompatibility.py @@ -32,9 +32,9 @@ expects_type(type) expects_type(object) expects_typing_type(type) expects_typing_type(object) -expects_str_class(type) +expects_str_class(type) expects_any_type_via_type_var(type) -expects_str_subclass(type) +expects_str_subclass(type) expects_object(type)