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

  }

}

class B : Java1 {
  override var b: Int
    field = 19
    override get
    override set(value: Int) {
      <this>.#b = 20
    }

  override var d: Int
    field = 22
    override get
    override set(value: Int) {
      <this>.#d = 23
    }

  override var j: Int
    field = 24
    override get
    open set

  override var k: Int
    field = 25
    override get(): Int {
      return 26
    }
    protected override set(value: Int) {
      <this>.#k = 27
    }

  override var l: Boolean
    field = true
    override get
    override set(value: Boolean) {
      <this>.#l = false
    }

  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  override val a: Int
    override get(): Int {
      return 18
    }

  override val c: Int
    override get(): Int {
      return 21
    }

}

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

  }

}

class D : Java2 {
  override var b: Int
    field = 42
    override get(): Int {
      return 43
    }
    override set(value: Int) {
      <this>.#b = value.plus(other = 1)
    }

  override var d: Int
    field = 45
    override get
    override set(value: Int) {
      <this>.#d = 46
    }

  constructor() /* primary */ {
    super/*Java2*/()
    /* <init>() */

  }

  override val a: Int
    override get(): Int {
      return 41
    }

  override val c: Int
    override get(): Int {
      return 44
    }

}

open class KotlinClass {
  open val a: Int
    field = 1
    open get

  open var b: Int
    field = 2
    open get
    open set

  open var d: Int
    field = 4
    open get
    open set(value: Int) {
      <this>.#d = value.plus(other = 1)
    }

  var e: Int
    field = 5
    get(): Int {
      return 6
    }
    private set(value: Int) {
      <this>.#e = value.plus(other = 1)
    }

  protected var f: Int
    field = 7
    protected get(): Int {
      return 8
    }
    protected set(value: Int) {
      <this>.#f = value.plus(other = 1)
    }

  private var g: Int
    field = 9
    private get(): Int {
      return 10
    }
    private set(value: Int) {
      <this>.#g = value.plus(other = 1)
    }

  internal var h: Int
    field = 11
    internal get(): Int {
      return 12
    }
    internal set(value: Int) {
      <this>.#h = value.plus(other = 1)
    }

  protected var i: Int
    field = 13
    protected get(): Int {
      return 14
    }
    private set(value: Int) {
      <this>.#i = value.plus(other = 1)
    }

  open var k: Int
    field = 16
    open get
    protected open set

  open var l: Boolean
    field = false
    open get
    open set

  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  open val c: Int
    open get(): Int {
      return 3
    }

  open val j: Int
    open get(): Int {
      return 15
    }

}

fun test(a: A, b: B, c: C, d: D) {
  a.<get-a>() /*~> Unit */
  a.<get-b>() /*~> Unit */
  a.<get-c>() /*~> Unit */
  a.<get-d>() /*~> Unit */
  a.<get-e>() /*~> Unit */
  a.<get-j>() /*~> Unit */
  a.<get-k>() /*~> Unit */
  a.<get-l>() /*~> Unit */
  b.<get-a>() /*~> Unit */
  b.<get-b>() /*~> Unit */
  b.<get-c>() /*~> Unit */
  b.<get-d>() /*~> Unit */
  b.<get-e>() /*~> Unit */
  b.<get-j>() /*~> Unit */
  b.<get-k>() /*~> Unit */
  b.<get-l>() /*~> Unit */
  c(super<C>).#a /*~> Unit */
  c.<get-b>() /*~> Unit */
  c(super<C>).#c /*~> Unit */
  c(super<C>).#d /*~> Unit */
  c(super<C>).#e /*~> Unit */
  c(super<C>).#j /*~> Unit */
  c(super<C>).#k /*~> Unit */
  c(super<C>).#l /*~> Unit */
  d(super<D>).#a /*~> Unit */
  d.<get-b>() /*~> Unit */
  d(super<D>).#c /*~> Unit */
  d(super<D>).#e /*~> Unit */
}
