diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/library/a.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/library/a.kt new file mode 100644 index 00000000000..ec17d72359e --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/library/a.kt @@ -0,0 +1,12 @@ +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") +package a + +import kotlin.internal.RequireKotlin + +class Outer { + @RequireKotlin("1.44") + class Nested { + @RequireKotlin("1.88") + fun f() {} + } +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/output.txt new file mode 100644 index 00000000000..229621c8f2d --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/output.txt @@ -0,0 +1,7 @@ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/source.kt:3:19: error: 'Nested' is only available since Kotlin 1.44 and cannot be used in Kotlin 1.2 +fun test(a: Outer.Nested) { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/source.kt:4:7: error: 'f(): Unit' is only available since Kotlin 1.88 and cannot be used in Kotlin 1.2 + a.f() + ^ +COMPILATION_ERROR diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/source.kt new file mode 100644 index 00000000000..850b632de23 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClasses/source.kt @@ -0,0 +1,5 @@ +import a.Outer + +fun test(a: Outer.Nested) { + a.f() +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/library/a.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/library/a.kt new file mode 100644 index 00000000000..ec17d72359e --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/library/a.kt @@ -0,0 +1,12 @@ +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") +package a + +import kotlin.internal.RequireKotlin + +class Outer { + @RequireKotlin("1.44") + class Nested { + @RequireKotlin("1.88") + fun f() {} + } +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/output.txt new file mode 100644 index 00000000000..79911cff48e --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/output.txt @@ -0,0 +1,7 @@ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/source.kt:3:19: error: 'Nested' is only available since Kotlin 1.44 and cannot be used in Kotlin 1.2 +fun test(a: Outer.Nested) { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/source.kt:4:7: error: 'f(): Unit' is only available since Kotlin 1.88 and cannot be used in Kotlin 1.2 + a.f() + ^ +COMPILATION_ERROR diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/source.kt new file mode 100644 index 00000000000..850b632de23 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14/source.kt @@ -0,0 +1,5 @@ +import a.Outer + +fun test(a: Outer.Nested) { + a.f() +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/library/a.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/library/a.kt new file mode 100644 index 00000000000..ec17d72359e --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/library/a.kt @@ -0,0 +1,12 @@ +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") +package a + +import kotlin.internal.RequireKotlin + +class Outer { + @RequireKotlin("1.44") + class Nested { + @RequireKotlin("1.88") + fun f() {} + } +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/output.txt new file mode 100644 index 00000000000..cf724a54895 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/output.txt @@ -0,0 +1,7 @@ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/source.kt:3:19: error: 'Nested' is only available since Kotlin 1.44 and cannot be used in Kotlin 1.2 +fun test(a: Outer.Nested) { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/source.kt:4:7: error: 'f(): Unit' is only available since Kotlin 1.88 and cannot be used in Kotlin 1.2 + a.f() + ^ +COMPILATION_ERROR diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/source.kt new file mode 100644 index 00000000000..850b632de23 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesAgainst14Js/source.kt @@ -0,0 +1,5 @@ +import a.Outer + +fun test(a: Outer.Nested) { + a.f() +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/library/a.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/library/a.kt new file mode 100644 index 00000000000..ec17d72359e --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/library/a.kt @@ -0,0 +1,12 @@ +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") +package a + +import kotlin.internal.RequireKotlin + +class Outer { + @RequireKotlin("1.44") + class Nested { + @RequireKotlin("1.88") + fun f() {} + } +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/output.txt new file mode 100644 index 00000000000..6d99614073b --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/output.txt @@ -0,0 +1,7 @@ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/source.kt:3:19: error: 'Nested' is only available since Kotlin 1.44 and cannot be used in Kotlin 1.2 +fun test(a: Outer.Nested) { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/source.kt:4:7: error: 'f(): Unit' is only available since Kotlin 1.88 and cannot be used in Kotlin 1.2 + a.f() + ^ +COMPILATION_ERROR diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/source.kt new file mode 100644 index 00000000000..850b632de23 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlinInNestedClassesJs/source.kt @@ -0,0 +1,5 @@ +import a.Outer + +fun test(a: Outer.Nested) { + a.f() +} diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt index 4431213f94b..a6506a950be 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt @@ -295,6 +295,27 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration doTestKotlinLibraryWithWrongMetadataVersionJs("library", "-Xskip-metadata-version-check") } + fun testRequireKotlinInNestedClasses() { + compileKotlin("source.kt", tmpdir, listOf(compileLibrary("library"))) + } + + fun testRequireKotlinInNestedClassesJs() { + compileKotlin("source.kt", File(tmpdir, "usage.js"), listOf(compileJsLibrary("library")), K2JSCompiler()) + } + + fun testRequireKotlinInNestedClassesAgainst14() { + val library = compileLibrary("library", additionalOptions = listOf("-Xmetadata-version=1.4.0")) + compileKotlin("source.kt", tmpdir, listOf(library), additionalOptions = listOf("-Xskip-metadata-version-check")) + } + + fun testRequireKotlinInNestedClassesAgainst14Js() { + val library = compileJsLibrary("library", additionalOptions = listOf("-Xmetadata-version=1.4.0")) + compileKotlin( + "source.kt", File(tmpdir, "usage.js"), listOf(library), K2JSCompiler(), + additionalOptions = listOf("-Xskip-metadata-version-check") + ) + } + /*test source mapping generation when source info is absent*/ fun testInlineFunWithoutDebugInfo() { compileKotlin("sourceInline.kt", tmpdir)