mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[python] Simplify NoneType resolution in PyBuiltinCache.getNoneType
Return types.NoneType if it's available and _typeshed.NoneType otherwise. GitOrigin-RevId: 253bce59377fb8b2aff3912c9a8db9b219865c52
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f108875d9f
commit
eb6065ed19
@@ -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<String, PyClassType?> = 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) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user