diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt index d1a0348b7e0..7a3b38a8649 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt @@ -83,7 +83,7 @@ fun > F.runBodiesResolutionForLocalClass( ) val graphBuilder = components.context.dataFlowAnalyzerContext.graphBuilder - val members = designationMap.keys + val members = localClassesNavigationInfo.allMembers graphBuilder.prepareForLocalClassMembers(members) return this.transform(transformer, resolutionMode).single.also { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt index 7dcdca46499..c27d2d4e944 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt @@ -14,7 +14,8 @@ import org.jetbrains.kotlin.utils.keysToMap class LocalClassesNavigationInfo( val parentForClass: Map, FirClass<*>?>, - private val parentClassForFunction: Map, FirClass<*>> + private val parentClassForFunction: Map, FirClass<*>>, + val allMembers: List> ) { val designationMap by lazy { parentClassForFunction.keys.keysToMap { @@ -39,12 +40,13 @@ fun FirClass<*>.collectLocalClassesNavigationInfo(): LocalClassesNavigationInfo NavigationInfoVisitor().run { this@collectLocalClassesNavigationInfo.accept(this@run) - LocalClassesNavigationInfo(parentForClass, resultingMap) + LocalClassesNavigationInfo(parentForClass, resultingMap, allMembers) } private class NavigationInfoVisitor : FirDefaultVisitorVoid() { val resultingMap = mutableMapOf, FirClass<*>>() val parentForClass = mutableMapOf, FirClass<*>?>() + val allMembers = mutableListOf>() private var currentPath = persistentListOf>() override fun visitElement(element: FirElement) {} @@ -75,9 +77,14 @@ private class NavigationInfoVisitor : FirDefaultVisitorVoid() { visitCallableMemberDeclaration(property) } + override fun visitConstructor(constructor: FirConstructor) { + visitCallableMemberDeclaration(constructor) + } + override fun > visitCallableMemberDeclaration( callableMemberDeclaration: FirCallableMemberDeclaration ) { + allMembers += callableMemberDeclaration if (callableMemberDeclaration.returnTypeRef !is FirImplicitTypeRef) return resultingMap[callableMemberDeclaration] = currentPath.last() }