[IR] Simplify ExpectActualCollector, remove nesting
This commit is contained in:
committed by
Space Team
parent
010c7acc3a
commit
a54b56d74e
+24
-25
@@ -23,7 +23,7 @@ internal class ExpectActualCollector(private val mainFragment: IrModuleFragment,
|
|||||||
val result = mutableMapOf<IrSymbol, IrSymbol>()
|
val result = mutableMapOf<IrSymbol, IrSymbol>()
|
||||||
// Collect and link classifiers at first to make it possible to expand type aliases on the callables linking
|
// Collect and link classifiers at first to make it possible to expand type aliases on the callables linking
|
||||||
val (allActualDeclarations, typeAliasMap) = result.appendExpectActualClassifiersMap()
|
val (allActualDeclarations, typeAliasMap) = result.appendExpectActualClassifiersMap()
|
||||||
result.appendExpectActualCallablesMap(allActualDeclarations, typeAliasMap, dependentFragments)
|
result.appendExpectActualCallablesMap(allActualDeclarations, typeAliasMap)
|
||||||
return result to typeAliasMap
|
return result to typeAliasMap
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,11 +44,23 @@ internal class ExpectActualCollector(private val mainFragment: IrModuleFragment,
|
|||||||
return allActualDeclarations to typeAliasMap
|
return allActualDeclarations to typeAliasMap
|
||||||
}
|
}
|
||||||
|
|
||||||
class ActualClassifiersCollector(
|
private fun MutableMap<IrSymbol, IrSymbol>.appendExpectActualCallablesMap(
|
||||||
|
allActualDeclarations: Set<IrDeclaration>,
|
||||||
|
typeAliasMap: Map<FqName, FqName>
|
||||||
|
) {
|
||||||
|
val actualMembers = mutableMapOf<String, IrDeclarationBase>()
|
||||||
|
|
||||||
|
collectActualCallables(this, actualMembers, allActualDeclarations)
|
||||||
|
val collector = CallablesLinkCollector(this, actualMembers, typeAliasMap)
|
||||||
|
dependentFragments.forEach { collector.visitModuleFragment(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ActualClassifiersCollector(
|
||||||
private val actualClassifiers: MutableMap<FqName, IrSymbol>,
|
private val actualClassifiers: MutableMap<FqName, IrSymbol>,
|
||||||
private val allActualClassifiers: MutableSet<IrDeclaration>,
|
private val allActualClassifiers: MutableSet<IrDeclaration>,
|
||||||
private val typeAliasMap: MutableMap<FqName, FqName>
|
private val typeAliasMap: MutableMap<FqName, FqName>
|
||||||
) : IrElementVisitor<Unit, Boolean> {
|
) : IrElementVisitor<Unit, Boolean> {
|
||||||
override fun visitTypeAlias(declaration: IrTypeAlias, data: Boolean) {
|
override fun visitTypeAlias(declaration: IrTypeAlias, data: Boolean) {
|
||||||
if (declaration.isActual) {
|
if (declaration.isActual) {
|
||||||
val expandedTypeSymbol = declaration.expandedType.classifierOrFail
|
val expandedTypeSymbol = declaration.expandedType.classifierOrFail
|
||||||
@@ -90,12 +102,12 @@ internal class ExpectActualCollector(private val mainFragment: IrModuleFragment,
|
|||||||
override fun visitElement(element: IrElement, data: Boolean) {
|
override fun visitElement(element: IrElement, data: Boolean) {
|
||||||
element.acceptChildren(this, data)
|
element.acceptChildren(this, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ClassifiersLinkCollector(
|
private class ClassifiersLinkCollector(
|
||||||
private val expectActualMap: MutableMap<IrSymbol, IrSymbol>,
|
private val expectActualMap: MutableMap<IrSymbol, IrSymbol>,
|
||||||
private val actualClassifiers: Map<FqName, IrSymbol>
|
private val actualClassifiers: Map<FqName, IrSymbol>
|
||||||
) : IrElementVisitorVoid {
|
) : IrElementVisitorVoid {
|
||||||
private fun addLinkOrReportMissing(expectElement: IrSymbolOwner, actualTypeId: FqName) {
|
private fun addLinkOrReportMissing(expectElement: IrSymbolOwner, actualTypeId: FqName) {
|
||||||
val actualClassifier = actualClassifiers[actualTypeId]
|
val actualClassifier = actualClassifiers[actualTypeId]
|
||||||
if (actualClassifier != null) {
|
if (actualClassifier != null) {
|
||||||
@@ -124,25 +136,13 @@ internal class ExpectActualCollector(private val mainFragment: IrModuleFragment,
|
|||||||
override fun visitElement(element: IrElement) {
|
override fun visitElement(element: IrElement) {
|
||||||
element.acceptChildrenVoid(this)
|
element.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MutableMap<IrSymbol, IrSymbol>.appendExpectActualCallablesMap(
|
private fun collectActualCallables(
|
||||||
allActualDeclarations: Set<IrDeclaration>,
|
|
||||||
typeAliasMap: Map<FqName, FqName>,
|
|
||||||
dependentFragments: List<IrModuleFragment>
|
|
||||||
) {
|
|
||||||
val actualMembers = mutableMapOf<String, IrDeclarationBase>()
|
|
||||||
|
|
||||||
collectActualCallables(this, actualMembers, allActualDeclarations)
|
|
||||||
val collector = CallablesLinkCollector(this, actualMembers, typeAliasMap)
|
|
||||||
dependentFragments.forEach { collector.visitModuleFragment(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectActualCallables(
|
|
||||||
expectActualMap: MutableMap<IrSymbol, IrSymbol>,
|
expectActualMap: MutableMap<IrSymbol, IrSymbol>,
|
||||||
actualMembers: MutableMap<String, IrDeclarationBase>,
|
actualMembers: MutableMap<String, IrDeclarationBase>,
|
||||||
allActualDeclarations: Set<IrDeclaration>,
|
allActualDeclarations: Set<IrDeclaration>,
|
||||||
) {
|
) {
|
||||||
fun collectActualsCallables(declaration: IrDeclaration) {
|
fun collectActualsCallables(declaration: IrDeclaration) {
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is IrFunction,
|
is IrFunction,
|
||||||
@@ -160,13 +160,13 @@ internal class ExpectActualCollector(private val mainFragment: IrModuleFragment,
|
|||||||
for (actualDeclaration in allActualDeclarations) {
|
for (actualDeclaration in allActualDeclarations) {
|
||||||
collectActualsCallables(actualDeclaration)
|
collectActualsCallables(actualDeclaration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CallablesLinkCollector(
|
private class CallablesLinkCollector(
|
||||||
private val expectActualMap: MutableMap<IrSymbol, IrSymbol>,
|
private val expectActualMap: MutableMap<IrSymbol, IrSymbol>,
|
||||||
private val actualMembers: Map<String, IrDeclarationBase>,
|
private val actualMembers: Map<String, IrDeclarationBase>,
|
||||||
private val typeAliasMap: Map<FqName, FqName>
|
private val typeAliasMap: Map<FqName, FqName>
|
||||||
) : IrElementVisitorVoid {
|
) : IrElementVisitorVoid {
|
||||||
override fun visitFunction(declaration: IrFunction) = addLink(declaration)
|
override fun visitFunction(declaration: IrFunction) = addLink(declaration)
|
||||||
|
|
||||||
override fun visitProperty(declaration: IrProperty) = addLink(declaration)
|
override fun visitProperty(declaration: IrProperty) = addLink(declaration)
|
||||||
@@ -189,5 +189,4 @@ internal class ExpectActualCollector(private val mainFragment: IrModuleFragment,
|
|||||||
override fun visitElement(element: IrElement) {
|
override fun visitElement(element: IrElement) {
|
||||||
element.acceptChildrenVoid(this)
|
element.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user