// TARGET_BACKEND: JVM // FILE: A.java abstract public class A extends B { public Integer removeAt(int x) { return 0; } public boolean remove(Integer x) { return false; } } // FILE: main.kt import java.util.*; abstract class B : MutableList, AbstractList() { override fun removeAt(index: Int): Int = null!! override fun remove(element: Int): Boolean = null!! } abstract class D : AbstractList() { // removeAt() doesn't exist in java/util/AbstractList, it's a // fake override of the method from kotlin/collections/MutableList override fun removeAt(index: Int): Int = 0 // AbstractList::remove() should return Int here. No fake overrides created. // This may be a bug because the old compiler doesn't report a diagnostic here. override fun remove(element: Int): Boolean = false } fun testABD(a: A, b: B, d: D) { a.remove(1) a.removeAt(0) b.remove(1) b.removeAt(0) d.remove(1) d.removeAt(0) } fun testArrayList(c: ArrayList) { c.remove(1) c.removeAt(0) } class AImpl : A() { override fun get(index: Int): Int = 0 override val size: Int get() = 0 } class DImpl : D() { override fun get(index: Int): Int = 0 override val size: Int get() = 0 } fun box(): String { testABD(AImpl(), AImpl(), DImpl()) val c = ArrayList() c.add(1) c.add(1) testArrayList(c) return "OK" }