From 988226a90e91e9a6998e8c687749cf5011bf69d1 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 15 Jun 2020 21:44:55 +0200 Subject: [PATCH] IR: optimize FqNameEqualityChecker.checkViaDeclarations --- .../ir/symbols/IrClassifierEqualityChecker.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt index 42afadb8437..9b8e16bdda0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt @@ -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