abstract class A1 : MutableCollection { override fun contains(o: Q): Boolean { throw UnsupportedOperationException() } override fun containsAll(c: Collection): Boolean { throw UnsupportedOperationException() } } abstract class A2 : MutableCollection { override fun contains(o: String): Boolean { throw UnsupportedOperationException() } override fun containsAll(c: Collection): Boolean { throw UnsupportedOperationException() } } abstract class A3 : java.util.AbstractList() abstract class A4 : java.util.AbstractList() { override fun contains(o: W): Boolean { throw UnsupportedOperationException() } override fun containsAll(c: Collection): Boolean { throw UnsupportedOperationException() } } abstract class A5 : java.util.AbstractList() abstract class A6 : java.util.AbstractList() { override fun contains(o: String): Boolean { throw UnsupportedOperationException() } override fun containsAll(c: Collection): Boolean { throw UnsupportedOperationException() } } interface I1 : MutableSet { override fun contains(o: R): Boolean { throw UnsupportedOperationException() } override fun containsAll(c: Collection): Boolean { throw UnsupportedOperationException() } } interface I2 : MutableSet { override fun contains(o: String): Boolean { throw UnsupportedOperationException() } override fun containsAll(c: Collection): Boolean { throw UnsupportedOperationException() } } abstract class A7 : MutableCollection { override fun contains(o: Int): Boolean { throw UnsupportedOperationException() } } abstract class A8 : MutableCollection { override fun contains(o: Any?): Boolean { throw UnsupportedOperationException() } } fun foo( a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, i1: I1, i2: I2, c: Collection ) { a1.contains("") a2.contains("") a3.contains("") a4.contains("") a5.contains("") a6.contains("") a7.contains(1) i1.contains("") i2.contains("") c.contains("") } /* * Calls to a1-a7, i1-i2, c in foo */ // 7 INVOKEVIRTUAL A[0-9]\.contains \(Ljava/lang/Object;\)Z // 1 INVOKEVIRTUAL A7\.contains \(I\)Z // 1 INVOKEINTERFACE java/util/Collection.contains \(Ljava/lang/Object;\)Z // 2 INVOKEINTERFACE I[1-2].contains \(Ljava/lang/Object;\)Z