[LL API] Handle smart casts correctly on 'FirCodeFragment' analysis
This commit is contained in:
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.containingClassForLocalAttr
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.RealVariable
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
@@ -98,7 +98,7 @@ val FirConstructorSymbol.typeAliasForConstructor: FirTypeAliasSymbol?
|
||||
|
||||
interface FirCodeFragmentContext {
|
||||
val towerDataContext: FirTowerDataContext
|
||||
val variables: Map<FirBasedSymbol<*>, Set<ConeKotlinType>>
|
||||
val smartCasts: Map<RealVariable, Set<ConeKotlinType>>
|
||||
}
|
||||
|
||||
private object CodeFragmentContextDataKey : FirDeclarationDataKey()
|
||||
|
||||
+5
-1
@@ -144,7 +144,7 @@ class VariableStorageImpl(private val session: FirSession) : VariableStorage() {
|
||||
extensionReceiver = if (extensionReceiver == from) to else extensionReceiver,
|
||||
)
|
||||
}
|
||||
return _realVariables.getOrPut(newIdentifier) {
|
||||
return getOrPut(newIdentifier) {
|
||||
with(variable) {
|
||||
RealVariable(
|
||||
newIdentifier, isThisReference, if (explicitReceiverVariable == from) to else explicitReceiverVariable,
|
||||
@@ -154,6 +154,10 @@ class VariableStorageImpl(private val session: FirSession) : VariableStorage() {
|
||||
}
|
||||
}
|
||||
|
||||
fun getOrPut(identifier: Identifier, factory: () -> RealVariable): RealVariable {
|
||||
return _realVariables.getOrPut(identifier, factory)
|
||||
}
|
||||
|
||||
private fun FirBasedSymbol<*>.getStability(originalFir: FirElement): PropertyStability? {
|
||||
if (originalFir is FirThisReceiverExpression) return PropertyStability.STABLE_VALUE
|
||||
when (this) {
|
||||
|
||||
Reference in New Issue
Block a user