// MODULE: separate
// MODULE: main
// FILE: 1.kt

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

  }

}

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

  }

}

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

  }

  override fun bar(): Int {
    return 1
  }

  override fun foo(t: Int?) {
  }

}

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

  }

  override fun bar(): Int {
    return 1
  }

  override fun foo(t: Int?) {
  }

}

fun test() {
  val k1: Int = A()(super<A>).#a /*!! Int */
  val k2: Unit = A().foo(t = 1)
  val k3: Int = A().bar() /*!! Int */
  val k4: Int = B()(super<B>).#a /*!! Int */
  val k5: Unit = B().foo(t = 2)
  val k6: Int = B().bar() /*!! Int */
  val k7: Int = C()(super<C>).#a /*!! Int */
  val k8: Unit = C().foo(t = 2)
  val k9: Int = C().bar()
  val k10: Int = D()(super<D>).#a /*!! Int */
  val k11: Unit = D().foo(t = 2)
  val k12: Int = D().bar()
}
