open class BaseEmptyList : List { override val size: Int = 0 override fun contains(element: T): Boolean = false override fun containsAll(elements: Collection): Boolean = false override fun get(index: Int): T = error("Do not call") override fun indexOf(element: T): Int = -1 override fun isEmpty(): Boolean = true override fun iterator(): Iterator = emptyIterator() override fun lastIndexOf(element: T): Int = -1 override fun listIterator(): ListIterator = emptyIterator() override fun listIterator(index: Int): ListIterator = emptyIterator() override fun subList(fromIndex: Int, toIndex: Int): List = this private fun emptyIterator() = object : ListIterator { override fun hasNext(): Boolean = false override fun next(): T = error("Do not call") override fun hasPrevious(): Boolean = false override fun nextIndex(): Int = 0 override fun previous(): T = error("Do not call") override fun previousIndex(): Int = 0 } } class DerivedEmptyList : BaseEmptyList(), List // add() stub should be generated for BaseEmptyList, but not for DerivedEmptyList // 1 public add\(ILjava/lang/Object;\)V