FIR: introduce symbolProvider.getNestedClassifierScope to choose lazy/non-lazy

For some reason this breaks two old FE based tests with member type aliases.
It's not very interesting because member aliases aren't supported.
This commit is contained in:
Mikhail Glukhikh
2019-12-12 13:48:20 +03:00
parent 663d545d79
commit fea224749b
12 changed files with 60 additions and 7 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
import org.jetbrains.kotlin.fir.scopes.impl.nestedClassifierScope
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.toFirSourceElement
@@ -64,6 +65,21 @@ class JavaSymbolProvider(
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> =
emptyList()
override fun getNestedClassifierScope(classId: ClassId): FirScope? {
val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null
val regularClass = symbol.fir
return if (regularClass is FirJavaClass) {
nestedClassifierScope(
classId,
session,
existingNames = regularClass.existingNestedClassifierNames,
symbolProvider = this
)
} else {
nestedClassifierScope(regularClass)
}
}
override fun getClassUseSiteMemberScope(
classId: ClassId,
useSiteSession: FirSession,
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl
import org.jetbrains.kotlin.fir.references.impl.FirResolvedNamedReferenceImpl
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.impl.nestedClassifierScope
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl
@@ -392,6 +393,12 @@ class KotlinDeserializedJvmSymbolsProvider(
}
}
override fun getNestedClassifierScope(classId: ClassId): FirScope? {
return findRegularClass(classId)?.let {
nestedClassifierScope(it)
}
}
private fun getPackageParts(packageFqName: FqName): Collection<PackagePartsCacheData> {
return packagePartsCache.getOrPut(packageFqName) {
try {