| // 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() |
| } |
| } |