diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsDeclarationTable.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsDeclarationTable.kt index 69a488afe4b..e96342f716c 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsDeclarationTable.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsDeclarationTable.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir import org.jetbrains.kotlin.backend.common.serialization.GlobalDeclarationTable import org.jetbrains.kotlin.backend.common.serialization.IdSignatureClashTracker import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer -import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns @@ -24,19 +24,15 @@ class JsUniqIdClashTracker : IdSignatureClashTracker { if (signature in committedIdSignatures) { val clashedDeclaration = committedIdSignatures[signature]!! - if (declaration !is IrTypeParameter && - (declaration.parent !is IrSimpleFunction || declaration.parent === clashedDeclaration.parent) - ) { + val parent = declaration.parent + val clashedParent = clashedDeclaration.parent + if (declaration is IrTypeParameter && parent is IrSimpleFunction && parent.parent is IrProperty && parent !== clashedParent) { + // Check whether they are type parameters of the same extension property but different accessors + require(clashedParent is IrSimpleFunction) + require(clashedParent.correspondingPropertySymbol === parent.correspondingPropertySymbol) + } else { // TODO: handle clashes properly error("IdSignature clash: $signature; Existed declaration ${clashedDeclaration.render()} clashed with new ${declaration.render()}") - } else { - // Check whether they are type parameters of the same extension property but different accessors - val parent = declaration.parent - val clashedParent = clashedDeclaration.parent - require(parent is IrSimpleFunction) - require(clashedParent is IrSimpleFunction) - require(clashedDeclaration !== parent) - require(clashedParent.correspondingPropertySymbol === parent.correspondingPropertySymbol) } }