IR: optimize FqNameEqualityChecker.checkViaDeclarations
This commit is contained in:
+13
-1
@@ -59,12 +59,24 @@ object FqNameEqualityChecker : IrClassifierEqualityChecker {
|
||||
return parentFqName?.child(name)
|
||||
}
|
||||
|
||||
private fun areFqNamesEqual(c1: IrDeclarationWithName, c2: IrDeclarationWithName): Boolean {
|
||||
if (c1.name != c2.name) return false
|
||||
|
||||
val parent1 = c1.parent
|
||||
val parent2 = c2.parent
|
||||
return when (parent1) {
|
||||
is IrPackageFragment -> parent2 is IrPackageFragment && parent1.fqName == parent2.fqName
|
||||
is IrDeclarationWithName -> parent2 is IrDeclarationWithName && areFqNamesEqual(parent1, parent2)
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkViaDeclarations(c1: IrSymbolOwner, c2: IrSymbolOwner): Boolean {
|
||||
if (c1 is IrClass && c2 is IrClass) {
|
||||
if (c1.isLocalClass() || c2.isLocalClass())
|
||||
return c1 === c2 // Local declarations should be identical
|
||||
|
||||
return c1.fqName == c2.fqName
|
||||
return areFqNamesEqual(c1, c2)
|
||||
}
|
||||
|
||||
return c1 == c2
|
||||
|
||||
Reference in New Issue
Block a user