diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirIrProvider.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirIrProvider.kt index e85cce4da22..38d39add350 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirIrProvider.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirIrProvider.kt @@ -5,10 +5,9 @@ package org.jetbrains.kotlin.fir.backend -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.containingClass import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider +import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclaration @@ -57,13 +56,30 @@ class FirIrProvider(val fir2IrComponents: Fir2IrComponents) : IrProvider { firClass = firClass.declarations.singleOrNull { (it as? FirRegularClass)?.name?.asString() == midName } as? FirRegularClass ?: return null } + val scope = firClass.unsubstitutedScope(fir2IrComponents.session, fir2IrComponents.scopeSession, withForcedTypeCalculator = true) when (symbol) { is IrClassSymbol -> { firCandidates = listOf(firClass) - parent = classifierStorage.getIrClassSymbol(firParentClass!!.symbol).owner + parent = firParentClass?.let { classifierStorage.getIrClassSymbol(it.symbol).owner } ?: packageFragment } is IrConstructorSymbol -> { - firCandidates = firClass.declarations.filter { it is FirConstructor } + val constructors = mutableListOf() + scope.processDeclaredConstructors { constructors.add(it.fir) } + firCandidates = constructors + parent = classifierStorage.getIrClassSymbol(firClass.symbol).owner + } + is IrSimpleFunctionSymbol -> { + val lastName = Name.guessByFirstCharacter(nameSegments.last()) + val functions = mutableListOf() + scope.processFunctionsByName(lastName) { functions.add(it.fir) } + firCandidates = functions + parent = classifierStorage.getIrClassSymbol(firClass.symbol).owner + } + is IrPropertySymbol -> { + val lastName = Name.guessByFirstCharacter(nameSegments.last()) + val properties = mutableListOf() + scope.processPropertiesByName(lastName) { properties.add(it.fir) } + firCandidates = properties parent = classifierStorage.getIrClassSymbol(firClass.symbol).owner } else -> {