[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 graphBuilder = components.context.dataFlowAnalyzerContext.graphBuilder
|
||||||
val members = designationMap.keys
|
val members = localClassesNavigationInfo.allMembers
|
||||||
graphBuilder.prepareForLocalClassMembers(members)
|
graphBuilder.prepareForLocalClassMembers(members)
|
||||||
|
|
||||||
return this.transform<F, ResolutionMode>(transformer, resolutionMode).single.also {
|
return this.transform<F, ResolutionMode>(transformer, resolutionMode).single.also {
|
||||||
|
|||||||
+9
-2
@@ -14,7 +14,8 @@ import org.jetbrains.kotlin.utils.keysToMap
|
|||||||
|
|
||||||
class LocalClassesNavigationInfo(
|
class LocalClassesNavigationInfo(
|
||||||
val parentForClass: Map<FirClass<*>, FirClass<*>?>,
|
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 {
|
val designationMap by lazy {
|
||||||
parentClassForFunction.keys.keysToMap {
|
parentClassForFunction.keys.keysToMap {
|
||||||
@@ -39,12 +40,13 @@ fun FirClass<*>.collectLocalClassesNavigationInfo(): LocalClassesNavigationInfo
|
|||||||
NavigationInfoVisitor().run {
|
NavigationInfoVisitor().run {
|
||||||
this@collectLocalClassesNavigationInfo.accept(this@run)
|
this@collectLocalClassesNavigationInfo.accept(this@run)
|
||||||
|
|
||||||
LocalClassesNavigationInfo(parentForClass, resultingMap)
|
LocalClassesNavigationInfo(parentForClass, resultingMap, allMembers)
|
||||||
}
|
}
|
||||||
|
|
||||||
private class NavigationInfoVisitor : FirDefaultVisitorVoid() {
|
private class NavigationInfoVisitor : FirDefaultVisitorVoid() {
|
||||||
val resultingMap = mutableMapOf<FirCallableMemberDeclaration<*>, FirClass<*>>()
|
val resultingMap = mutableMapOf<FirCallableMemberDeclaration<*>, FirClass<*>>()
|
||||||
val parentForClass = mutableMapOf<FirClass<*>, FirClass<*>?>()
|
val parentForClass = mutableMapOf<FirClass<*>, FirClass<*>?>()
|
||||||
|
val allMembers = mutableListOf<FirCallableMemberDeclaration<*>>()
|
||||||
private var currentPath = persistentListOf<FirClass<*>>()
|
private var currentPath = persistentListOf<FirClass<*>>()
|
||||||
|
|
||||||
override fun visitElement(element: FirElement) {}
|
override fun visitElement(element: FirElement) {}
|
||||||
@@ -75,9 +77,14 @@ private class NavigationInfoVisitor : FirDefaultVisitorVoid() {
|
|||||||
visitCallableMemberDeclaration(property)
|
visitCallableMemberDeclaration(property)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitConstructor(constructor: FirConstructor) {
|
||||||
|
visitCallableMemberDeclaration(constructor)
|
||||||
|
}
|
||||||
|
|
||||||
override fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(
|
override fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(
|
||||||
callableMemberDeclaration: FirCallableMemberDeclaration<F>
|
callableMemberDeclaration: FirCallableMemberDeclaration<F>
|
||||||
) {
|
) {
|
||||||
|
allMembers += callableMemberDeclaration
|
||||||
if (callableMemberDeclaration.returnTypeRef !is FirImplicitTypeRef) return
|
if (callableMemberDeclaration.returnTypeRef !is FirImplicitTypeRef) return
|
||||||
resultingMap[callableMemberDeclaration] = currentPath.last()
|
resultingMap[callableMemberDeclaration] = currentPath.last()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user