abstract enum class A : Enum, Java1 { private constructor() /* primary */ { super/*Enum*/() /* () */ } fun valueOf(value: String): A /* Synthetic body for ENUM_VALUEOF */ fun values(): Array /* Synthetic body for ENUM_VALUES */ val entries: EnumEntries get(): EnumEntries /* Synthetic body for ENUM_ENTRIES */ } open enum class B : Enum, Java1 { FIRST = FIRST() private enum entry class FIRST : B { private constructor() /* primary */ { super/*B*/() /*~> Unit */ /* () */ } override fun foo(i: Int) { } } SECOND = B() private constructor() /* primary */ { super/*Enum*/() /* () */ } fun valueOf(value: String): B /* Synthetic body for ENUM_VALUEOF */ fun values(): Array /* Synthetic body for ENUM_VALUES */ override fun foo(i: Int) { } val entries: EnumEntries get(): EnumEntries /* Synthetic body for ENUM_ENTRIES */ } enum class C : Enum, Java2 { private constructor() /* primary */ { super/*Enum*/() /* () */ } fun valueOf(value: String): C /* Synthetic body for ENUM_VALUEOF */ fun values(): Array /* Synthetic body for ENUM_VALUES */ val entries: EnumEntries get(): EnumEntries /* Synthetic body for ENUM_ENTRIES */ } open enum class D : Enum, Java2 { FIRST = FIRST() private enum entry class FIRST : D { private constructor() /* primary */ { super/*D*/() /*~> Unit */ /* () */ } override fun foo(i: Int) { } } private constructor() /* primary */ { super/*Enum*/() /* () */ } fun valueOf(value: String): D /* Synthetic body for ENUM_VALUEOF */ fun values(): Array /* Synthetic body for ENUM_VALUES */ override fun foo(i: Int) { } val entries: EnumEntries get(): EnumEntries /* Synthetic body for ENUM_ENTRIES */ } abstract enum class E : Enum, Java1, Java3 { private constructor() /* primary */ { super/*Enum*/() /* () */ } fun valueOf(value: String): E /* Synthetic body for ENUM_VALUEOF */ fun values(): Array /* Synthetic body for ENUM_VALUES */ val entries: EnumEntries get(): EnumEntries /* Synthetic body for ENUM_ENTRIES */ } abstract enum class F : Enum, Java1, Java3 { FIRST = FIRST() private enum entry class FIRST : F { private constructor() /* primary */ { super/*F*/() /*~> Unit */ /* () */ } override fun foo(i: Int?) { } } private constructor() /* primary */ { super/*Enum*/() /* () */ } fun valueOf(value: String): F /* Synthetic body for ENUM_VALUEOF */ fun values(): Array /* Synthetic body for ENUM_VALUES */ override fun foo(i: Any) { } val entries: EnumEntries get(): EnumEntries /* Synthetic body for ENUM_ENTRIES */ } interface KotlinInterface { fun foo(i: Int) { } } fun test() { B.FIRST.foo(i = 1) B.SECOND.foo(i = 1) B.FIRST.() /*~> Unit */ D.FIRST.foo(i = 1) D.FIRST.() /*~> Unit */ F.FIRST.foo(i = 1) F.FIRST.foo(i = "") F.FIRST.foo(i = null) F.FIRST.() /*~> Unit */ }