[IR] Fix classifier equality for Local classes

This commit is contained in:
Roman Artemev
2019-03-20 20:35:16 +03:00
committed by romanart
parent 4cd95256b6
commit 698594b14d
@@ -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
}