interface IFoo {
  abstract fun foo(): String

}

class K1 : JFoo {
  constructor() /* primary */ {
    super/*JFoo*/()
    /* <init>() */

  }

}

class K2 : JFoo {
  constructor() /* primary */ {
    super/*JFoo*/()
    /* <init>() */

  }

  override fun foo(): String {
    return super.foo() /*!! String */
  }

}

class K3 : JUnrelatedFoo, IFoo {
  constructor() /* primary */ {
    super/*JUnrelatedFoo*/()
    /* <init>() */

  }

}

class K4 : JUnrelatedFoo, IFoo {
  constructor() /* primary */ {
    super/*JUnrelatedFoo*/()
    /* <init>() */

  }

  override fun foo(): @FlexibleNullability String? {
    return super.foo()
  }

}

class TestJFoo : IFoo {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  private /* final field */ val $$delegate_0: JFoo = JFoo()
  override fun foo(): String {
    return <this>.#$$delegate_0.foo() /*!! String */
  }

}

class TestK1 : IFoo {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  private /* final field */ val $$delegate_0: K1 = K1()
  override fun foo(): String {
    return <this>.#$$delegate_0.foo() /*!! String */
  }

}

class TestK2 : IFoo {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  private /* final field */ val $$delegate_0: K2 = K2()
  override fun foo(): String {
    return <this>.#$$delegate_0.foo()
  }

}

class TestK3 : IFoo {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  private /* final field */ val $$delegate_0: K3 = K3()
  override fun foo(): String {
    return <this>.#$$delegate_0.foo()
  }

}

class TestK4 : IFoo {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  private /* final field */ val $$delegate_0: K4 = K4()
  override fun foo(): String {
    return <this>.#$$delegate_0.foo() /*!! String */
  }

}
