From 633d840c886ba9f9631f832ba98026ac75d0ad33 Mon Sep 17 00:00:00 2001 From: Artem Kobzar Date: Fri, 10 Mar 2023 12:55:43 +0000 Subject: [PATCH] [K/JS] Deprecate `external enum` declarations ^KT-57254 Fixed --- .../diagnostics/KtFirDataClassConverters.kt | 6 +++++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 4 ++++ .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 5 ++++ .../diagnostics/FirJsDiagnosticsList.kt | 1 + .../analysis/diagnostics/js/FirJsErrors.kt | 1 + .../js/FirJsErrorsDefaultMessages.kt | 5 ++++ .../declaration/FirJsExternalChecker.kt | 6 ++++- .../testsWithJsStdLib/native/enumEntry.fir.kt | 3 ++- .../testsWithJsStdLib/native/enumEntry.kt | 2 +- .../native/externalInterfaceNested.kt | 3 ++- .../testsWithJsStdLib/native/inheritance.kt | 5 ++-- .../testsWithJsStdLib/native/inlineClass.kt | 3 ++- .../testsWithJsStdLib/native/innerClass.kt | 3 ++- .../testsWithJsStdLib/native/wrongTarget.kt | 7 +++++- .../testsWithJsStdLib/native/wrongTarget.txt | 23 +++++++++++++++++++ .../diagnostics/DefaultErrorMessagesJs.kt | 1 + .../js/resolve/diagnostics/ErrorsJs.java | 1 + .../resolve/diagnostics/JsExternalChecker.kt | 5 ++++ 18 files changed, 75 insertions(+), 9 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index df659c1cf2d..f65b04c17b9 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -4904,6 +4904,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirJsErrors.ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING) { firDiagnostic -> + EnumClassInExternalDeclarationWarningImpl( + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirJsErrors.INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING) { firDiagnostic -> InlineClassInExternalDeclarationWarningImpl( firDiagnostic as KtPsiDiagnostic, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 082fb80c4b7..f9021b5c648 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -3409,6 +3409,10 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = InlineExternalDeclaration::class } + abstract class EnumClassInExternalDeclarationWarning : KtFirDiagnostic() { + override val diagnosticClass get() = EnumClassInExternalDeclarationWarning::class + } + abstract class InlineClassInExternalDeclarationWarning : KtFirDiagnostic() { override val diagnosticClass get() = InlineClassInExternalDeclarationWarning::class } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 9d333f742b5..a6350fc1117 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -4126,6 +4126,11 @@ internal class InlineExternalDeclarationImpl( override val token: KtLifetimeToken, ) : KtFirDiagnostic.InlineExternalDeclaration(), KtAbstractFirDiagnostic +internal class EnumClassInExternalDeclarationWarningImpl( + override val firDiagnostic: KtPsiDiagnostic, + override val token: KtLifetimeToken, +) : KtFirDiagnostic.EnumClassInExternalDeclarationWarning(), KtAbstractFirDiagnostic + internal class InlineClassInExternalDeclarationWarningImpl( override val firDiagnostic: KtPsiDiagnostic, override val token: KtLifetimeToken, diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt index 2802ec2b7c4..0f837ff1b47 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt @@ -78,6 +78,7 @@ object JS_DIAGNOSTICS_LIST : DiagnosticList("FirJsErrors") { val NESTED_CLASS_IN_EXTERNAL_INTERFACE by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) val EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) val INLINE_EXTERNAL_DECLARATION by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) + val ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING by warning(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) val INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING by warning(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) val INLINE_CLASS_IN_EXTERNAL_DECLARATION by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) val EXTENSION_FUNCTION_IN_EXTERNAL_DECLARATION by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) diff --git a/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt b/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt index 15b7676afb7..cca419be445 100644 --- a/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt +++ b/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt @@ -69,6 +69,7 @@ object FirJsErrors { val NESTED_CLASS_IN_EXTERNAL_INTERFACE by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val INLINE_EXTERNAL_DECLARATION by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) + val ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING by warning0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING by warning0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val INLINE_CLASS_IN_EXTERNAL_DECLARATION by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val EXTENSION_FUNCTION_IN_EXTERNAL_DECLARATION by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt index 5b2c3bea894..6cbc8e110e2 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.DELEGATION_B import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.IMPLEMENTING_FUNCTION_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.INLINE_CLASS_IN_EXTERNAL_DECLARATION import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING +import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.INLINE_EXTERNAL_DECLARATION import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.JS_MODULE_PROHIBITED_ON_NON_NATIVE import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.JS_MODULE_PROHIBITED_ON_VAR @@ -106,6 +107,10 @@ object FirJsErrorsDefaultMessages : BaseDiagnosticRendererFactory() { INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING, "Using value classes as parameter type or return type of external declarations is experimental" ) + map.put( + ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING, + "Using enum classes with an `external` qualifier becomes deprecated and will be an error in future releases" + ) map.put( INLINE_CLASS_IN_EXTERNAL_DECLARATION, "Using value classes as parameter type or return type of external declarations is not supported" diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalChecker.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalChecker.kt index df91dcdf4e3..4c69947c37c 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalChecker.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalChecker.kt @@ -64,6 +64,10 @@ object FirJsExternalChecker : FirBasicDeclarationChecker() { if (classKind != null) { reporter.reportOn(declaration.source, FirJsErrors.WRONG_EXTERNAL_DECLARATION, classKind, context) } + + if (declaration.isEnumClass) { + reporter.reportOn(declaration.source, FirJsErrors.ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING, context) + } } if (declaration is FirPropertyAccessor && declaration.isDirectlyExternal(context.session)) { @@ -184,7 +188,7 @@ object FirJsExternalChecker : FirBasicDeclarationChecker() { declaration.checkAnonymousInitializer(context, reporter) declaration.checkEnumEntry(context, reporter) declaration.checkConstructorPropertyParam(context, reporter) - } + } private val KtSourceElement.allowsReporting get() = kind !is KtFakeSourceElementKind || kind == KtFakeSourceElementKind.PropertyFromParameter diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.fir.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.fir.kt index 7e7d303c4a9..81f16853fa8 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.fir.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.fir.kt @@ -1,4 +1,5 @@ -external enum class E { +// !DIAGNOSTICS: +ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING +external enum class E { X, Y { fun foo() diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.kt index ead35fd63e2..dc24a19a8b8 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/enumEntry.kt @@ -1,4 +1,4 @@ -external enum class E { +external enum class E { X, Y { fun foo() diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/externalInterfaceNested.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/externalInterfaceNested.kt index 2abebfa2b03..ce697540767 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/externalInterfaceNested.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/externalInterfaceNested.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +// !DIAGNOSTICS: +ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING external interface I { interface J @@ -6,7 +7,7 @@ external interface I { object O - enum class E + enum class E companion object } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/inheritance.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/inheritance.kt index 443451008bf..d975a25e210 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/inheritance.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/inheritance.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +// !DIAGNOSTICS: +ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING open class A interface I @@ -11,10 +12,10 @@ external class D : B, I external interface K : I -external enum class E { +external enum class E { X } -external enum class F : I { +external enum class F : I { X } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/inlineClass.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/inlineClass.kt index 488cadab30b..8ce200994c9 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/inlineClass.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/inlineClass.kt @@ -1,10 +1,11 @@ // FIR_IDENTICAL // !LANGUAGE: +InlineClasses, -JvmInlineValueClasses +// !DIAGNOSTICS: +ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING external inline class C(val a: Int) { fun foo() } -inline external enum class E { +inline external enum class E { A } diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/innerClass.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/innerClass.kt index 217f16fe095..b4ff4f06253 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/innerClass.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/innerClass.kt @@ -1,9 +1,10 @@ // FIR_IDENTICAL +// !DIAGNOSTICS: +ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING external class C { inner class Inner } -external enum class E { +external enum class E { X; inner class Inner diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.kt index 19d260c539e..a785cb4eab9 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +// !DIAGNOSTICS: +ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING external annotation class A(val x: Int) val x: Int @@ -19,4 +20,8 @@ external class D { external get() = definedExternally } -external data class E(val x: Int) \ No newline at end of file +external data class E(val x: Int) + +external enum class F { + A, B, C +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.txt b/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.txt index a83d95bdb72..277924424f5 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.txt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/wrongTarget.txt @@ -43,3 +43,26 @@ public final external data class E { public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String } + +public final external enum class F : kotlin.Enum { + enum entry A + + enum entry B + + enum entry C + + private constructor F() + @kotlin.internal.IntrinsicConstEvaluation public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: F): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final /*synthesized*/ val entries: kotlin.enums.EnumEntries + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): F + public final /*synthesized*/ fun values(): kotlin.Array +} + diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt index e6fdefbbe2f..35fc64c081c 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt @@ -31,6 +31,7 @@ private val DIAGNOSTIC_FACTORY_TO_RENDERER by lazy { put(ErrorsJs.EXTENSION_FUNCTION_IN_EXTERNAL_DECLARATION, "Function types with receiver are prohibited in external declarations") put(ErrorsJs.INLINE_CLASS_IN_EXTERNAL_DECLARATION, "Using value classes as parameter type or return type of external declarations is not supported") put(ErrorsJs.INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING, "Using value classes as parameter type or return type of external declarations is experimental") + put(ErrorsJs.ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING, "Using enum classes with an `external` qualifier becomes deprecated and will be an error in future releases") put(ErrorsJs.JS_NAME_CLASH, "JavaScript name ({0}) generated for this declaration clashes with another declaration: {1}", STRING, Renderers.COMPACT) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java index fec5d77883a..2791c2a7eb5 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java @@ -33,6 +33,7 @@ public interface ErrorsJs { DiagnosticFactory0 EXTENSION_FUNCTION_IN_EXTERNAL_DECLARATION = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory0 NESTED_EXTERNAL_DECLARATION = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory0 INLINE_CLASS_IN_EXTERNAL_DECLARATION = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); + DiagnosticFactory0 ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory0 INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory2 JS_NAME_CLASH = DiagnosticFactory2.create( diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExternalChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExternalChecker.kt index 12e591689ec..3aa4391f145 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExternalChecker.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsExternalChecker.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.js.PredefinedAnnotation import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.JsStandardClassIds +import org.jetbrains.kotlin.platform.isWasm import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -55,6 +56,10 @@ object JsExternalChecker : DeclarationChecker { if (classKind != null) { trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, classKind)) } + + if (DescriptorUtils.isEnumClass(descriptor) && context.moduleDescriptor.platform?.isWasm() != true) { + trace.report(ErrorsJs.ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING.on(declaration)) + } } if (descriptor is PropertyAccessorDescriptor && isDirectlyExternal(declaration, descriptor)) {