diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/AnnotationUtils.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/AnnotationUtils.kt index 15d8591a068..8e2abc36208 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/AnnotationUtils.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/AnnotationUtils.kt @@ -71,7 +71,11 @@ fun IrAnnotationContainer.couldBeConvertedToExplicitExport(): Boolean? = getAnnotation(JsAnnotations.jsImplicitExportFqn)?.getSingleConstBooleanArgument() fun IrAnnotationContainer.isJsExportIgnore(): Boolean = - hasAnnotation(JsAnnotations.jsExportIgnoreFqn) + annotations.any { + // Using `IrSymbol.hasEqualFqName(FqName)` instead of a usual `hasAnnotation` call, because `JsExport.Ignore` is a nested class, + // whose FQ name cannot be computed by traversing IR tree parents because it lacks `JsExport` for some reason. + it.symbol.owner.parentAsClass.symbol.hasEqualFqName(JsAnnotations.jsExportIgnoreFqn) + } fun IrAnnotationContainer.isJsNativeGetter(): Boolean = hasAnnotation(JsAnnotations.jsNativeGetter) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt index abc651f98f4..f5b725198fd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt @@ -140,7 +140,7 @@ val IrClass.packageFqName: FqName? get() = symbol.signature?.packageFqName() ?: parent.getPackageFragment()?.packageFqName fun IrDeclarationWithName.hasEqualFqName(fqName: FqName): Boolean = - symbol.hasEqualFqName(fqName) || name == fqName.shortName() && when (val parent = parent) { + name == fqName.shortName() && when (val parent = parent) { is IrPackageFragment -> parent.packageFqName == fqName.parent() is IrDeclarationWithName -> parent.hasEqualFqName(fqName.parent()) else -> false