From eb6065ed1982f76015d8a56da4c6f5c6f460cc12 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 12 Jun 2025 15:22:39 +0300 Subject: [PATCH] [python] Simplify NoneType resolution in PyBuiltinCache.getNoneType Return types.NoneType if it's available and _typeshed.NoneType otherwise. GitOrigin-RevId: 253bce59377fb8b2aff3912c9a8db9b219865c52 --- .../python/psi/impl/PyBuiltinCache.kt | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt index 744b2a48bc99..ac31228cb94a 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt @@ -167,11 +167,7 @@ class PyBuiltinCache private constructor( get() = getObjectType("slice") val noneType: PyClassType? - get() { - val file = myTypeshedFile ?: return null - // need to use `resolveNested` because `_typeshed` has `NoneType` as an import, not a class - return file.getClassType("NoneType", file::resolveNested) - } + get() = myTypesFile?.getClassType("NoneType") ?: myTypeshedFile?.getClassType("NoneType") val ellipsisType: PyClassType? get() = myTypesFile?.getClassType("EllipsisType") @@ -314,7 +310,7 @@ private class CachedFile( */ private val myTypeCache: MutableMap = mutableMapOf(), ) { - fun getClassType(name: @NonNls String, typeResolver: (@NonNls String) -> PyClassType? = ::resolveTopLevel): PyClassType? { + fun getClassType(name: @NonNls String): PyClassType? { return synchronized(this) { if (myModificationStamp != file.modificationStamp) { myTypeCache.clear() @@ -322,21 +318,13 @@ private class CachedFile( } myTypeCache[name] ?.also { it.assertValid(name) } - } ?: typeResolver(name)?.also { + } ?: resolveTopLevel(name)?.also { synchronized(myTypeCache) { myTypeCache.put(name, it) } } } - fun resolveNested(name: @NonNls String): PyClassType? { - val pyClass = ResolveImportUtil.resolveChildren( - file, name, file, false, true, false, false - ).getOrNull(0)?.element as? PyClass? ?: return null - return PyClassTypeImpl(pyClass, false) - .also { it.assertValid(name) } - } - fun resolveTopLevel(name: @NonNls String): PyClassType? { return file.findTopLevelClass(name)?.let { pyClass -> PyClassTypeImpl(pyClass, false) } }