[FIR] Add incoming edge for all members of local class, not only implicit ones
This commit is contained in:
+1
-1
@@ -83,7 +83,7 @@ fun <F : FirClass<F>> F.runBodiesResolutionForLocalClass(
|
||||
)
|
||||
|
||||
val graphBuilder = components.context.dataFlowAnalyzerContext.graphBuilder
|
||||
val members = designationMap.keys
|
||||
val members = localClassesNavigationInfo.allMembers
|
||||
graphBuilder.prepareForLocalClassMembers(members)
|
||||
|
||||
return this.transform<F, ResolutionMode>(transformer, resolutionMode).single.also {
|
||||
|
||||
+9
-2
@@ -14,7 +14,8 @@ import org.jetbrains.kotlin.utils.keysToMap
|
||||
|
||||
class LocalClassesNavigationInfo(
|
||||
val parentForClass: Map<FirClass<*>, FirClass<*>?>,
|
||||
private val parentClassForFunction: Map<FirCallableMemberDeclaration<*>, FirClass<*>>
|
||||
private val parentClassForFunction: Map<FirCallableMemberDeclaration<*>, FirClass<*>>,
|
||||
val allMembers: List<FirCallableMemberDeclaration<*>>
|
||||
) {
|
||||
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<FirCallableMemberDeclaration<*>, FirClass<*>>()
|
||||
val parentForClass = mutableMapOf<FirClass<*>, FirClass<*>?>()
|
||||
val allMembers = mutableListOf<FirCallableMemberDeclaration<*>>()
|
||||
private var currentPath = persistentListOf<FirClass<*>>()
|
||||
|
||||
override fun visitElement(element: FirElement) {}
|
||||
@@ -75,9 +77,14 @@ private class NavigationInfoVisitor : FirDefaultVisitorVoid() {
|
||||
visitCallableMemberDeclaration(property)
|
||||
}
|
||||
|
||||
override fun visitConstructor(constructor: FirConstructor) {
|
||||
visitCallableMemberDeclaration(constructor)
|
||||
}
|
||||
|
||||
override fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(
|
||||
callableMemberDeclaration: FirCallableMemberDeclaration<F>
|
||||
) {
|
||||
allMembers += callableMemberDeclaration
|
||||
if (callableMemberDeclaration.returnTypeRef !is FirImplicitTypeRef) return
|
||||
resultingMap[callableMemberDeclaration] = currentPath.last()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user