package foo fun box(): String { // in object assertEquals("Object.Object.a", Object.Object.a) assertEquals("Object.Object.b", Object.Object.b) assertEquals(123, Object.Object.test()) assertEquals("Object.Object.Class().a", Object.Object.Class("Object.Object.Class().a").a) assertEquals("Object.Object.Class().b", Object.Object.Class("something").b) assertEquals(42, Object.Object.Class("something").test()) assertEquals("Object.Object.Class.a", Object.Object.Class.a) assertEquals("Object.Object.Class.b", Object.Object.Class.b) assertEquals(142, Object.Object.Class.test()) assertEquals("Object.Class().a", Object.Class("Object.Class().a").a) assertEquals("Object.Class().b", Object.Class("something").b) assertEquals(42, Object.Class("something").test()) assertEquals("Object.Class.a", Object.Class.a) assertEquals("Object.Class.b", Object.Class.b) assertEquals(142, Object.Class.test()) assertEquals("Object.Trait.a", Object.Trait.a) assertEquals("Object.Trait.b", Object.Trait.b) assertEquals(324, Object.Trait.test()) assertEquals("Object.a.a", Object.a.a) assertEquals("Object.a.b", Object.a.b) assertEquals(34, Object.a.test()) assertEquals("Object.b", Object.b) assertEquals(23, Object.test()) // in class assertEquals("Class.Object.a", Class.Object.a) assertEquals("Class.Object.b", Class.Object.b) assertEquals(55, Class.Object.test()) assertEquals("Class.Class().a", Class.Class("Class.Class().a").a) assertEquals("Class.Class().b", Class.Class("something").b) assertEquals(66, Class.Class("something").test()) assertEquals("Class.Class.a", Class.Class.a) assertEquals("Class.Class.b", Class.Class.b) assertEquals(88, Class.Class.test()) assertEquals("Class.Trait.a", Class.Trait.a) assertEquals("Class.Trait.b", Class.Trait.b) assertEquals(55, Class.Trait.test()) assertEquals("Class.a.a", Class.a.a) assertEquals("Class.a.b", Class.a.b) assertEquals(22, Class.a.test()) assertEquals("Class.b", Class.b) assertEquals(77, Class.test()) // in trait assertEquals("Trait.Object.a", Trait.Object.a) assertEquals("Trait.Object.b", Trait.Object.b) assertEquals(90, Trait.Object.test()) assertEquals("Trait.Class().a", Trait.Class("Trait.Class().a").a) assertEquals("Trait.Class().b", Trait.Class("something").b) assertEquals(66, Trait.Class("something").test()) assertEquals("Trait.Class.a", Trait.Class.a) assertEquals("Trait.Class.b", Trait.Class.b) assertEquals(88, Trait.Class.test()) assertEquals("Trait.Trait.a", Trait.Trait.a) assertEquals("Trait.Trait.b", Trait.Trait.b) assertEquals(55, Trait.Trait.test()) assertEquals("Trait.a.a", Trait.a.a) assertEquals("Trait.a.b", Trait.a.b) assertEquals(22, Trait.a.test()) assertEquals("Trait.b", Trait.b) assertEquals(277, Trait.test()) return "OK"; } external object Object { object Object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl @JsName("AnotherClass") class Class(val a: String) { var b: String = noImpl fun test(): Int = noImpl companion object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } } } class Class(val a: String) { var b: String = noImpl fun test(): Int = noImpl companion object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } } interface Trait { val a: String var b: String fun test(): Int = noImpl companion object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } } val a: Trait = noImpl var b: String = noImpl fun test(): Int = noImpl } @JsName("SomeClass") external class Class { object Object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } class Class(val a: String) { var b: String = noImpl fun test(): Int = noImpl companion object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } } interface Trait { val a: String var b: String fun test(): Int = noImpl companion object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } } companion object { @JsName("aaa") val a: Trait = noImpl var b: String = noImpl fun test(): Int = noImpl } } external interface Trait { @JsName("SomeObject") object Object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } class Class(val a: String) { var b: String = noImpl fun test(): Int = noImpl companion object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } } @JsName("SomeTrait") interface Trait { val a: String var b: String fun test(): Int = noImpl companion object { val a: String = noImpl var b: String = noImpl fun test(): Int = noImpl } } companion object { val a: Trait = noImpl var b: String = noImpl fun test(): Int = noImpl } }