[FIR] fix nested access to FirCache
it's forbidden by the contract and causes ISE "Recursive update" or deadlock in the IDE
This commit is contained in:
+12
-9
@@ -189,12 +189,7 @@ class FirSignatureEnhancement(
|
|||||||
return original
|
return original
|
||||||
}
|
}
|
||||||
enhanceTypeParameterBounds(firMethod.typeParameters)
|
enhanceTypeParameterBounds(firMethod.typeParameters)
|
||||||
return enhanceMethod(firMethod, original.callableId, name).also { enhancedVersion ->
|
return enhanceMethod(firMethod, original.callableId, name)
|
||||||
val enhancedVersionFir = enhancedVersion.fir
|
|
||||||
(enhancedVersionFir.initialSignatureAttr as? FirSimpleFunction)?.let {
|
|
||||||
enhancedVersionFir.initialSignatureAttr = enhancedFunction(it.symbol, it.name).fir
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun enhanceMethod(
|
private fun enhanceMethod(
|
||||||
@@ -563,9 +558,17 @@ class FirEnhancedSymbolsStorage(val session: FirSession) : FirSessionComponent {
|
|||||||
class EnhancementSymbolsCache(cachesFactory: FirCachesFactory) {
|
class EnhancementSymbolsCache(cachesFactory: FirCachesFactory) {
|
||||||
@OptIn(PrivateForInline::class)
|
@OptIn(PrivateForInline::class)
|
||||||
val enhancedFunctions: FirCache<FirFunctionSymbol<*>, FirFunctionSymbol<*>, Pair<FirSignatureEnhancement, Name?>> =
|
val enhancedFunctions: FirCache<FirFunctionSymbol<*>, FirFunctionSymbol<*>, Pair<FirSignatureEnhancement, Name?>> =
|
||||||
cachesFactory.createCache { original, (enhancement, name) ->
|
cachesFactory.createCacheWithPostCompute(
|
||||||
enhancement.enhance(original, name)
|
createValue = { original, (enhancement, name) ->
|
||||||
}
|
enhancement.enhance(original, name) to enhancement
|
||||||
|
},
|
||||||
|
postCompute = { _, enhancedVersion, enhancement ->
|
||||||
|
val enhancedVersionFir = enhancedVersion.fir
|
||||||
|
(enhancedVersionFir.initialSignatureAttr as? FirSimpleFunction)?.let {
|
||||||
|
enhancedVersionFir.initialSignatureAttr = enhancement.enhancedFunction(it.symbol, it.name).fir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
@OptIn(PrivateForInline::class)
|
@OptIn(PrivateForInline::class)
|
||||||
val enhancedVariables: FirCache<FirVariableSymbol<*>, FirVariableSymbol<*>, Pair<FirSignatureEnhancement, Name>> =
|
val enhancedVariables: FirCache<FirVariableSymbol<*>, FirVariableSymbol<*>, Pair<FirSignatureEnhancement, Name>> =
|
||||||
|
|||||||
Reference in New Issue
Block a user