class A : LinkedList<Int>, List<Int> {
  constructor() /* primary */ {
    super/*LinkedList*/<@FlexibleNullability Int?>()
    /* <init>() */

  }

}

class B : LinkedList<Int>, List<Int> {
  constructor() /* primary */ {
    super/*LinkedList*/<@FlexibleNullability Int?>()
    /* <init>() */

  }

  override fun addFirst(e: Int?) {
  }

  override fun remove(): Int {
    return 1
  }

  override fun remove(element: Int): Boolean {
    return true
  }

  override fun removeAt(index: Int): Int {
    return 1
  }

  override val size: Int
    override get(): Int {
      return 2
    }

}

class C : LinkedList<Int?>, MutableList<Int?> {
  constructor() /* primary */ {
    super/*LinkedList*/<@FlexibleNullability Int?>()
    /* <init>() */

  }

}

class D : LinkedList<Int?>, MutableList<Int?> {
  constructor() /* primary */ {
    super/*LinkedList*/<@FlexibleNullability Int?>()
    /* <init>() */

  }

  override fun addLast(e: Int?) {
  }

  override operator fun get(index: Int): Int? {
    return 2
  }

  override fun remove(): Int? {
    return 2
  }

  override fun remove(element: Int?): Boolean {
    return true
  }

  override fun removeAt(index: Int): Int? {
    return 2
  }

}

fun test(a: A, b: B, c: C, d: D) {
  a.<get-size>() /*~> Unit */
  a.add(element = 1) /*~> Unit */
  a.get(index = 0) /*~> Unit */
  a.remove() /*~> Unit */
  a.removeAt(p0 = 1) /*~> Unit */
  a.remove(element = 1) /*~> Unit */
  a.addFirst(p0 = 1)
  a.addLast(p0 = null)
  a.removeFirst() /*~> Unit */
  a.removeLast() /*~> Unit */
  b.<get-size>() /*~> Unit */
  b.add(element = 1) /*~> Unit */
  b.get(index = 0) /*~> Unit */
  b.remove() /*~> Unit */
  b.removeAt(index = 1) /*~> Unit */
  b.remove(element = 1) /*~> Unit */
  b.addFirst(e = 1)
  b.addLast(p0 = null)
  b.removeFirst() /*~> Unit */
  b.removeLast() /*~> Unit */
  c.<get-size>() /*~> Unit */
  c.add(element = 1) /*~> Unit */
  c.get(index = 0) /*~> Unit */
  c.remove() /*~> Unit */
  c.removeAt(p0 = 1) /*~> Unit */
  c.remove(element = 1) /*~> Unit */
  c.addFirst(p0 = 1)
  c.addLast(p0 = null)
  c.removeFirst() /*~> Unit */
  c.removeLast() /*~> Unit */
  d.<get-size>() /*~> Unit */
  d.add(element = 1) /*~> Unit */
  d.get(index = 0) /*~> Unit */
  d.remove() /*~> Unit */
  d.removeAt(index = 1) /*~> Unit */
  d.remove(element = 1) /*~> Unit */
  d.addFirst(p0 = 1)
  d.addLast(e = null)
  d.removeFirst() /*~> Unit */
  d.removeLast() /*~> Unit */
}
