From 2742e643c1c242edf61af2acee49abf3902569b3 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Tue, 18 Feb 2020 14:54:35 +0300 Subject: [PATCH] JS: prohibit `external fun interface` --- .../testsWithJsStdLib/native/externalFunInterface.kt | 3 +++ .../testsWithJsStdLib/native/externalFunInterface.txt | 8 ++++++++ .../checkers/DiagnosticsTestWithJsStdLibGenerated.java | 5 +++++ .../kotlin/js/resolve/diagnostics/JsExternalChecker.kt | 1 + 4 files changed, 17 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.txt diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.kt b/compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.kt new file mode 100644 index 00000000000..416e9f50ce8 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.kt @@ -0,0 +1,3 @@ +external fun interface I { + fun f() +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.txt b/compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.txt new file mode 100644 index 00000000000..42995b321be --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.txt @@ -0,0 +1,8 @@ +package + +public external fun interface I { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun f(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java index f601633ba16..bbcc1e9f755 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java @@ -681,6 +681,11 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes runTest("compiler/testData/diagnostics/testsWithJsStdLib/native/extensionFunctionArgumentOrReturnType.kt"); } + @TestMetadata("externalFunInterface.kt") + public void testExternalFunInterface() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJsStdLib/native/externalFunInterface.kt"); + } + @TestMetadata("externalInterfaceNested.kt") public void testExternalInterfaceNested() throws Exception { runTest("compiler/testData/diagnostics/testsWithJsStdLib/native/externalInterfaceNested.kt"); 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 4791384e477..8ce11328650 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 @@ -44,6 +44,7 @@ object JsExternalChecker : DeclarationChecker { descriptor.isData -> "data class" descriptor.isInner -> "inner class" descriptor.isInline -> "inline class" + descriptor.isFun -> "fun interface" DescriptorUtils.isAnnotationClass(descriptor) -> "annotation class" else -> null }