Fir2Ir converter: fix KNPE during use-site scope building for local
This commit is contained in:
@@ -30,7 +30,7 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
|
|||||||
// TODO: support that case and switch back to `firUnsafe` instead of `firSafeNullable`
|
// TODO: support that case and switch back to `firUnsafe` instead of `firSafeNullable`
|
||||||
val fir = this.lookupTag.toSymbol(useSiteSession)?.firSafeNullable<FirRegularClass>() ?: return null
|
val fir = this.lookupTag.toSymbol(useSiteSession)?.firSafeNullable<FirRegularClass>() ?: return null
|
||||||
val companionScope = fir.companionObject?.buildUseSiteScope(useSiteSession, scopeSession)
|
val companionScope = fir.companionObject?.buildUseSiteScope(useSiteSession, scopeSession)
|
||||||
val ownScope = wrapSubstitutionScopeIfNeed(useSiteSession, fir.buildUseSiteScope(useSiteSession, scopeSession), scopeSession)
|
val ownScope = wrapSubstitutionScopeIfNeed(useSiteSession, fir.buildUseSiteScope(useSiteSession, scopeSession)!!, scopeSession)
|
||||||
if (companionScope != null) FirCompositeScope(mutableListOf(ownScope, companionScope)) else ownScope
|
if (companionScope != null) FirCompositeScope(mutableListOf(ownScope, companionScope)) else ownScope
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ val DECLARED = scopeSessionKey()
|
|||||||
|
|
||||||
data class SubstitutionScopeKey<T : FirClassSubstitutionScope>(val type: ConeClassLikeType) : ScopeSessionKey<T>() {}
|
data class SubstitutionScopeKey<T : FirClassSubstitutionScope>(val type: ConeClassLikeType) : ScopeSessionKey<T>() {}
|
||||||
|
|
||||||
fun FirRegularClass.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope {
|
fun FirRegularClass.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
||||||
val symbolProvider = useSiteSession.service<FirSymbolProvider>()
|
val symbolProvider = useSiteSession.service<FirSymbolProvider>()
|
||||||
return symbolProvider.getClassUseSiteMemberScope(this.classId, useSiteSession, builder)!!
|
return symbolProvider.getClassUseSiteMemberScope(this.classId, useSiteSession, builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirTypeAlias.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
fun FirTypeAlias.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
||||||
@@ -72,7 +72,7 @@ fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession, builder
|
|||||||
if (useSiteSuperType is ConeClassErrorType) return@mapNotNull null
|
if (useSiteSuperType is ConeClassErrorType) return@mapNotNull null
|
||||||
val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession)
|
val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession)
|
||||||
if (symbol is FirClassSymbol) {
|
if (symbol is FirClassSymbol) {
|
||||||
val useSiteScope = symbol.fir.buildUseSiteScope(useSiteSession, builder)
|
val useSiteScope = symbol.fir.buildUseSiteScope(useSiteSession, builder)!!
|
||||||
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, useSiteScope, symbol.fir, builder)
|
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, useSiteScope, symbol.fir, builder)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
|
|||||||
Reference in New Issue
Block a user