diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInSignature.kt b/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInSignature.kt index 54110e5eb95..80bd0a2713a 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInSignature.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInSignature.kt @@ -23,7 +23,7 @@ var x2: C @JsExport class A( - val x: C, + val x: C, y: C ) { fun foo(x: C) = x diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.kt b/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.kt index 173c3eb1535..6370f6f6e69 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.kt @@ -15,3 +15,11 @@ class A<T : C, T> where T : C, T : I + +@JsExport +class B(val a: T, val b: Comparable) { + val c: Comparable = b +} + +@JsExport +class D(val a: T, val b: Array) diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.txt b/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.txt index 618c24e34d9..27636c31e33 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.txt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/export/unexportableTypesInTypeParameters.txt @@ -10,6 +10,16 @@ package foo { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + @kotlin.js.JsExport public final class B { + public constructor B(/*0*/ a: T, /*1*/ b: kotlin.Comparable) + public final val a: T + public final val b: kotlin.Comparable + public final val c: kotlin.Comparable + 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 + } + public abstract class C { public constructor C() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -17,6 +27,15 @@ package foo { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + @kotlin.js.JsExport public final class D { + public constructor D(/*0*/ a: T, /*1*/ b: kotlin.Array) + public final val a: T + public final val b: kotlin.Array + 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 + } + public interface I { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int 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 ccef49ef065..50dcbcefc77 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 @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils @@ -104,6 +105,7 @@ object JsExportDeclarationChecker : DeclarationChecker { } is PropertyDescriptor -> { + if (declaration is KtParameter) return if (descriptor.isExtensionProperty) { reportWrongExportedDeclaration("extension property") return @@ -189,6 +191,7 @@ object JsExportDeclarationChecker : DeclarationChecker { val nonNullable = makeNotNullable() val isPrimitiveExportableType = nonNullable.isAnyOrNullableAny() || + nonNullable.isTypeParameter() || nonNullable.isDynamic() || nonNullable.isBoolean() || KotlinBuiltIns.isThrowableOrNullableThrowable(nonNullable) ||