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;