[FIR] do not ignore nested type aliases in FirNestedClassifierScope

This commit is contained in:
Ilya Kirillov
2022-11-10 14:29:41 +01:00
parent 7059f7fbe7
commit 4b7cacd55e
12 changed files with 45 additions and 106 deletions
@@ -8,11 +8,13 @@ package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
@@ -21,7 +23,7 @@ import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.name.Name
abstract class FirNestedClassifierScope(val klass: FirClass, val useSiteSession: FirSession) : FirContainingNamesAwareScope() {
protected abstract fun getNestedClassSymbol(name: Name): FirRegularClassSymbol?
protected abstract fun getNestedClassSymbol(name: Name): FirClassLikeSymbol<*>?
override fun processClassifiersByNameWithSubstitution(
name: Name,
@@ -40,17 +42,19 @@ abstract class FirNestedClassifierScope(val klass: FirClass, val useSiteSession:
}
class FirNestedClassifierScopeImpl(klass: FirClass, useSiteSession: FirSession) : FirNestedClassifierScope(klass, useSiteSession) {
private val classIndex: Map<Name, FirRegularClassSymbol> = run {
val result = mutableMapOf<Name, FirRegularClassSymbol>()
private val classIndex: Map<Name, FirClassLikeSymbol<*>> = run {
val result = mutableMapOf<Name, FirClassLikeSymbol<*>>()
for (declaration in klass.declarations) {
if (declaration is FirRegularClass) {
result[declaration.name] = declaration.symbol
when (declaration) {
is FirRegularClass -> result[declaration.name] = declaration.symbol
is FirTypeAlias -> result[declaration.name] = declaration.symbol
else -> {}
}
}
result
}
override fun getNestedClassSymbol(name: Name): FirRegularClassSymbol? {
override fun getNestedClassSymbol(name: Name): FirClassLikeSymbol<*>? {
return classIndex[name]
}