[IR] Fix classifier equality for Local classes
This commit is contained in:
+15
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user