diff --git a/python/python-psi-api/resources/META-INF/PythonPsi.xml b/python/python-psi-api/resources/META-INF/PythonPsi.xml
index 15585484a3f6..29863960a786 100644
--- a/python/python-psi-api/resources/META-INF/PythonPsi.xml
+++ b/python/python-psi-api/resources/META-INF/PythonPsi.xml
@@ -4,6 +4,7 @@
interface="com.jetbrains.python.psi.resolve.PyReferenceResolveProvider"
dynamic="true"/>
+
?
+
+ companion object {
+ private val EP_NAME: ExtensionPointName = ExtensionPointName.create("Pythonid.typeHintProvider");
+
+ fun parseTypeHint(typeHint: PyExpression, alias: PyQualifiedNameOwner?, resolved: PsiElement, context: TypeEvalContext): Ref? {
+ return EP_NAME.extensionList.firstNotNullOfOrNull { it.parseTypeHint(typeHint, alias, resolved, context) }
+ }
+ }
+}
diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java
index 4c9931d4b32f..fab73b8ce606 100644
--- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java
+++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java
@@ -865,6 +865,15 @@ public final class PyTypingTypeProvider extends PyTypeProviderWithCustomContext<
context.getTypeAliasStack().add(alias);
}
try {
+ final Ref typeHintFromProvider = PyTypeHintProvider.Companion.parseTypeHint(
+ typeHint,
+ alias,
+ resolved,
+ context.getTypeContext()
+ );
+ if (typeHintFromProvider != null) {
+ return typeHintFromProvider;
+ }
final Ref typeFromParenthesizedExpression = getTypeFromParenthesizedExpression(resolved, context);
if (typeFromParenthesizedExpression != null) {
return typeFromParenthesizedExpression;