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

  }

}

class B : A {
  constructor() /* primary */ {
    super/*A*/()
    /* <init>() */

  }

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

}

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

  }

}

class D : C {
  constructor() /* primary */ {
    super/*C*/()
    /* <init>() */

  }

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

}

abstract class E : Java1, Java2 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

abstract class F : E {
  constructor() /* primary */ {
    super/*E*/()
    /* <init>() */

  }

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

}

abstract class G : Java2, KotlinInterface2 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

abstract class H : G {
  override val size: Int
    field = size
    override get

  constructor(size: Int) /* primary */ {
    super/*G*/()
    /* <init>() */

  }

  override operator fun contains(element: Int): Boolean {
    return false
  }

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

}

abstract class I : Java3, KotlinInterface3 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

abstract class J : Java4, Java3 {
  constructor() /* primary */ {
    super/*Java4*/()
    /* <init>() */

  }

}

interface KotlinInterface {
  abstract fun remove(i: Int): Boolean

}

interface KotlinInterface2 : MutableCollection<Int> {
}

interface KotlinInterface3 : List<Int> {
}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J) {
  a.<get-size>() /*~> Unit */
  a.add(element = 1) /*~> Unit */
  a.add(index = 1, element = 2)
  a.removeAt(p0 = 1) /*~> Unit */
  a.remove() /*~> Unit */
  a.remove(element = 2) /*~> Unit */
  b.<get-size>() /*~> Unit */
  b.add(element = 1) /*~> Unit */
  b.add(index = 1, element = 2)
  b.removeAt(p0 = 1) /*~> Unit */
  b.remove() /*~> Unit */
  b.remove(element = 2) /*~> Unit */
  c.<get-size>() /*~> Unit */
  c.add(element = 1) /*~> Unit */
  c.add(index = 1, element = 2)
  c.removeAt(p0 = 1) /*~> Unit */
  c.remove() /*~> Unit */
  c.remove(element = 2) /*~> Unit */
  d.<get-size>() /*~> Unit */
  d.add(element = 1) /*~> Unit */
  d.add(index = 1, element = 2)
  d.removeAt(p0 = 1) /*~> Unit */
  d.remove() /*~> Unit */
  d.remove(element = 2) /*~> Unit */
  e.<get-size>() /*~> Unit */
  e.add(element = 1) /*~> Unit */
  e.add(index = 1, element = 2)
  e.removeAt(index = 1) /*~> Unit */
  e.remove(i = 2) /*~> Unit */
  f.<get-size>() /*~> Unit */
  f.add(element = 1) /*~> Unit */
  f.add(index = 1, element = 2)
  f.removeAt(index = 1) /*~> Unit */
  f.remove(element = 2) /*~> Unit */
  g.<get-size>() /*~> Unit */
  g.add(element = 1) /*~> Unit */
  g.contains(element = 4) /*~> Unit */
  g.remove(element = 2) /*~> Unit */
  h.<get-size>() /*~> Unit */
  h.add(element = 1) /*~> Unit */
  h.contains(element = 1) /*~> Unit */
  h.remove(element = 2) /*~> Unit */
  i.<get-size>() /*~> Unit */
  i.add(element = 1) /*~> Unit */
  i.add(p0 = 1, p1 = 2)
  i.remove(p0 = 2) /*~> Unit */
  j.<get-size>() /*~> Unit */
  j.add(element = 1) /*~> Unit */
  j.add(index = 1, element = 2)
  j.get(index = 1) /*~> Unit */
  j.remove(i = 1) /*~> Unit */
  j.removeAt(p0 = 2) /*~> Unit */
}
