compiler/testData/diagnostics/testsWithJsStdLib/name/builtinClash.kt (158 lines of code) (raw):

// RUN_PIPELINE_TILL: FRONTEND // OPT_IN: kotlin.js.ExperimentalJsExport, kotlin.js.ExperimentalJsStatic // FILE: f0.kt class C { class prototype class length class `$metadata$` fun constructor() {} } class D { private class prototype private class length private class `$metadata$` private fun constructor() {} } class E { @JsName("prototype") class <!JS_BUILTIN_NAME_CLASH!>D<!> <!JS_BUILTIN_NAME_CLASH!>@JsName("constructor") fun f()<!> {} } class F { @JsName("A") class prototype @JsName("B") class length @JsName("f") fun constructor() {} } class G { val x: String <!JS_BUILTIN_NAME_CLASH!>@JsName("constructor") get()<!> { return "1" } } class H { var x: String = "1" <!JS_BUILTIN_NAME_CLASH!>@JsName("constructor") set(v)<!> { field = v } @JsName("getter") get() { return "1" } } class I { val constructor = 1 } class prototype class length fun constructor() { } fun f() { class prototype class length fun constructor() {} } external interface Object { val constructor: Any? } external interface ExternalInterface { fun constructor() } class NonExternalChild : ExternalInterface { <!JS_BUILTIN_NAME_CLASH!>override fun constructor()<!> {} } // JsStatic: previously prohibited static names as companion members @JsExport class ExportedStaticByJsStatic { companion object { <!JS_BUILTIN_NAME_CLASH!>@JsStatic fun prototype()<!> {} <!JS_BUILTIN_NAME_CLASH!>@JsStatic fun length()<!> {} <!JS_BUILTIN_NAME_CLASH!>@JsStatic fun `$metadata$`()<!> {} } } external interface SymbolHolder { fun Symbol() fun DefaultImpls() } // Interface-specific forbidden static name: Symbol interface InterfaceWithForbiddenStaticSymbol { // Static via class-like member inside interface @JsName("Symbol") class <!JS_BUILTIN_NAME_CLASH!>SomeSymbol<!> @JsName("DefaultImpls") class <!JS_BUILTIN_NAME_CLASH!>SomeDefaultImpls<!> companion object : SymbolHolder { // Static via @JsStatic companion member <!JS_BUILTIN_NAME_CLASH!>@JsStatic override fun Symbol()<!> {} // Static via @JsStatic companion member <!JS_BUILTIN_NAME_CLASH!>@JsStatic override fun DefaultImpls()<!> {} } } class NotExportedStaticByJsStatic { companion object { @JsStatic fun prototype() {} @JsStatic fun length() {} @JsStatic fun `$metadata$`() {} } } // JsStatic combined with prohibited @JsName class StaticByJsStaticWithJsName { companion object { <!JS_BUILTIN_NAME_CLASH!>@JsStatic @JsName("prototype") fun f1()<!> {} <!JS_BUILTIN_NAME_CLASH!>@JsStatic @JsName("length") fun f2()<!> {} <!JS_BUILTIN_NAME_CLASH!>@JsStatic @JsName("\$metadata$") fun f3()<!> {} } } // Ensure interface-only rule for "Symbol": using it in classes/top-levels should NOT trigger class ClassWithSymbolStatics { // class-like member inside class: allowed class Symbol class DefaultImpls companion object { // @JsStatic member in class companion: allowed @JsStatic fun Symbol() {} // @JsStatic member in class companion: allowed @JsStatic fun DefaultImpls() {} } } // Top-level declarations named Symbol: allowed class Symbol class DefaultImpls fun Symbol(foo: Int) {} fun DefaultImpls(foo: Int) {} interface InterfaceWithCompanionSymbolStatics { companion object { // companion member in : allowed fun Symbol() {} fun DefaultImpls() {} } } // FILE: f1.kt package foo1 class prototype { companion object { fun test() {} } } class length { companion object { fun test() {} } } @JsExport class C { class <!JS_BUILTIN_NAME_CLASH!>prototype<!> class <!JS_BUILTIN_NAME_CLASH!>length<!> class <!JS_BUILTIN_NAME_CLASH!>`$metadata$`<!> <!JS_BUILTIN_NAME_CLASH!>fun constructor()<!> {} } // FILE: f2.kt package foo2 external class prototype { companion object { fun test() } } external class length { companion object { fun test() } }