data class A : Java1 { val a: Int field = a get constructor(a: Int) /* primary */ { super/*Java1*/() /* () */ } override operator fun component1(): Int { return .#a } fun copy(a: Int = .#a): A { return A(a = a) } override operator fun equals(other: Any?): Boolean { when { EQEQEQ(arg0 = , arg1 = other) -> return true } when { other !is A -> return false } val tmp_0: A = other as A when { EQEQ(arg0 = .#a, arg1 = tmp_0.#a).not() -> return false } return true } override fun hashCode(): Int { return .#a.hashCode() } override fun toString(): String { return "A(" + "a=" + .#a + ")" } override fun foo(i: Int?) { } } data class B : Java1, Java2 { val a: Int field = a get constructor(a: Int) /* primary */ { super/*Java1*/() /* () */ } override operator fun component1(): Int { return .#a } fun copy(a: Int = .#a): B { return B(a = a) } override operator fun equals(other: Any?): Boolean { when { EQEQEQ(arg0 = , arg1 = other) -> return true } when { other !is B -> return false } val tmp_1: B = other as B when { EQEQ(arg0 = .#a, arg1 = tmp_1.#a).not() -> return false } return true } override fun hashCode(): Int { return .#a.hashCode() } override fun toString(): String { return "B(" + "a=" + .#a + ")" } override fun foo(i: Any?) { } } data class C : Java1, KotlinInterface { val a: Int field = a get constructor(a: Int) /* primary */ { super/*Java1*/() /* () */ } override operator fun component1(): Int { return .#a } fun copy(a: Int = .#a): C { return C(a = a) } override operator fun equals(other: Any?): Boolean { when { EQEQEQ(arg0 = , arg1 = other) -> return true } when { other !is C -> return false } val tmp_2: C = other as C when { EQEQ(arg0 = .#a, arg1 = tmp_2.#a).not() -> return false } return true } override fun hashCode(): Int { return .#a.hashCode() } override fun toString(): String { return "C(" + "a=" + .#a + ")" } override fun foo(i: Any) { } } data class D : Java3 { val a: Int field = a get constructor(a: Int) /* primary */ { super/*Any*/() /* () */ } override operator fun component1(): Int { return .#a } fun copy(a: Int = .#a): D { return D(a = a) } override operator fun equals(other: Any?): Boolean { when { EQEQEQ(arg0 = , arg1 = other) -> return true } when { other !is D -> return false } val tmp_3: D = other as D when { EQEQ(arg0 = .#a, arg1 = tmp_3.#a).not() -> return false } return true } override fun hashCode(): Int { return .#a.hashCode() } override fun toString(): String { return "D(" + "a=" + .#a + ")" } override fun foo(i: Any) { } } interface KotlinInterface { abstract fun component1(): Int abstract fun foo(i: Any) } fun test() { val k: Int = A(a = 1).component1() A(a = 1).foo(i = 1) A(a = 1).foo(i = null) val k2: Int = B(a = 1).component1() B(a = 1).foo(i = 1) B(a = 1).foo(i = null) val k3: Int = C(a = 1).component1() C(a = 1).foo(i = 1) C(a = 1).foo(i = null) val k4: Int = D(a = 1).component1() D(a = 1).foo(i = 1) }