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 531b4d9a833..b5ae70a7794 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 @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.symbols import org.jetbrains.kotlin.descriptors.ClassifierDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.name.FqName @@ -30,8 +31,22 @@ object FqNameEqualityChecker : IrClassifierEqualityChecker { return parentFqName?.child(name) } + private fun isLocalClass(declaration: IrClass): Boolean { + var current: IrDeclarationParent? = declaration + while (current != null && current !is IrPackageFragment) { + if (current is IrDeclarationWithVisibility && current.visibility == Visibilities.LOCAL) + return true + current = (current as? IrDeclaration)?.parent + } + + return false + } + private fun checkViaDeclarations(c1: IrSymbolOwner, c2: IrSymbolOwner): Boolean { if (c1 is IrClass && c2 is IrClass) { + if (isLocalClass(c1) || isLocalClass(c2)) + return c1 === c2 // Local declarations should be identical + return c1.fqName == c2.fqName }