From 7d881842b45581ab2df9aa7daaa5f0276159a318 Mon Sep 17 00:00:00 2001 From: Artem Kobzar Date: Thu, 5 Jan 2023 16:30:23 +0000 Subject: [PATCH] [K/JS] Include protected member declarations into checked by JsExportDeclarationChecker declarations ^Fixed KT-55786 --- .../export/secondaryConstructorWithoutJsName.kt | 7 ++++++- .../export/secondaryConstructorWithoutJsName.txt | 9 +++++++++ .../secondaryConstructorWithoutJsNameInExportedFile.kt | 6 +++++- .../secondaryConstructorWithoutJsNameInExportedFile.txt | 9 +++++++++ .../kotlin/js/translate/utils/AnnotationsUtils.java | 3 ++- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.kt b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.kt index d4104b6d13f..0923d49f68c 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.kt @@ -12,4 +12,9 @@ class C(val x: String) { class C2(val x: String) { @JsName("JsNameProvided") constructor(x: Int): this(x.toString()) -} \ No newline at end of file +} + +@JsExport +class C3(val x: String) { + protected constructor(x: Int): this(x.toString()) +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.txt b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.txt index 8620cc983ec..c0214f07f99 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.txt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsName.txt @@ -19,4 +19,13 @@ package foo { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + + @kotlin.js.JsExport public final class C3 { + protected constructor C3(/*0*/ x: kotlin.Int) + public constructor C3(/*0*/ x: kotlin.String) + public final val x: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } } diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.kt b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.kt index ad44f0843f1..f3a91ee8d6f 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.kt @@ -11,4 +11,8 @@ class C(val x: String) { class C2(val x: String) { @JsName("JsNameProvided") constructor(x: Int): this(x.toString()) -} \ No newline at end of file +} + +class C3(val x: String) { + protected constructor(x: Int): this(x.toString()) +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.txt b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.txt index c362f0317bb..29e57c4b4d1 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.txt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/export/secondaryConstructorWithoutJsNameInExportedFile.txt @@ -19,4 +19,13 @@ package foo { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + + public final class C3 { + protected constructor C3(/*0*/ x: kotlin.Int) + public constructor C3(/*0*/ x: kotlin.String) + public final val x: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java index 060ce04ed9b..b0ce258db89 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java @@ -121,7 +121,8 @@ public final class AnnotationsUtils { public static boolean isExportedObject(@NotNull DeclarationDescriptor descriptor, @NotNull BindingContext bindingContext) { if (descriptor instanceof MemberDescriptor) { MemberDescriptor memberDescriptor = (MemberDescriptor) descriptor; - if (memberDescriptor.getVisibility() != DescriptorVisibilities.PUBLIC) return false; + DescriptorVisibility visibility = memberDescriptor.getVisibility(); + if (visibility != DescriptorVisibilities.PUBLIC && visibility != DescriptorVisibilities.PROTECTED) return false; } if (hasAnnotationOrInsideAnnotatedClass(descriptor, JS_EXPORT_IGNORE)) return false;