From a46c4cf0a55a2be0c698c7f774c08930d31e8615 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 17 Nov 2021 20:05:56 +0300 Subject: [PATCH] [JS IR] Fix exportable super types for enum ^KT-49754 fixed --- .../resolve/diagnostics/JsExportDeclarationChecker.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExportDeclarationChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExportDeclarationChecker.kt index c418b008785..ea4a0f36ba2 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExportDeclarationChecker.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExportDeclarationChecker.kt @@ -6,9 +6,11 @@ package org.jetbrains.kotlin.js.resolve.diagnostics import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.ClassKind.* +import org.jetbrains.kotlin.js.resolve.diagnostics.JsExportDeclarationChecker.isExportable import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.resolve.BindingContext @@ -131,8 +133,11 @@ object JsExportDeclarationChecker : DeclarationChecker { return } - for (superType in descriptor.defaultType.supertypes()) { - if (!superType.isExportable(bindingContext)) { + val supertypes = descriptor.defaultType.supertypes() + val isEnum = supertypes.any { KotlinBuiltIns.isEnum(it) } + + for (superType in supertypes) { + if (!superType.isExportable(bindingContext) && !(KotlinBuiltIns.isComparable(superType) && isEnum)) { trace.report(ErrorsJs.NON_EXPORTABLE_TYPE.on(declaration, "super", superType)) } } @@ -192,6 +197,8 @@ object JsExportDeclarationChecker : DeclarationChecker { if (descriptor !is MemberDescriptor) return false + if (KotlinBuiltIns.isEnum(this)) return true + return descriptor.isEffectivelyExternal() || AnnotationsUtils.isExportedObject(descriptor, bindingContext) } }