Fir2Ir converter: fix KNPE during use-site scope building for local

This commit is contained in:
Mikhail Glukhikh
2019-04-26 12:53:36 +03:00
parent 8cb16cc06a
commit f2ff103ed7
2 changed files with 4 additions and 4 deletions
@@ -30,7 +30,7 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
// TODO: support that case and switch back to `firUnsafe` instead of `firSafeNullable`
val fir = this.lookupTag.toSymbol(useSiteSession)?.firSafeNullable<FirRegularClass>() ?: return null
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
}
@@ -51,9 +51,9 @@ val DECLARED = scopeSessionKey()
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>()
return symbolProvider.getClassUseSiteMemberScope(this.classId, useSiteSession, builder)!!
return symbolProvider.getClassUseSiteMemberScope(this.classId, useSiteSession, builder)
}
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
val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession)
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)
} else {
null