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

  }

  open fun Java2.bar(a: Int) {
  }

  open fun A.foo(a: Int) {
  }

  open var A.a: Int
    open get(): Int {
      return 1
    }
    open set(value: Int) {
    }

  open var Java2.b: String
    open get(): String {
      return "java2"
    }
    open set(value: String) {
    }

}

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

  }

  fun test() {
    (<this>, A()).<get-a>() /*~> Unit */
    (<this>, Java2()).<get-b>() /*~> Unit */
    (<this>, A()).foo(a = 1)
    (<this>, Java2()).bar(a = 1)
  }

}

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

  }

  override fun Java2.bar(a: Int) {
  }

  override fun A.foo(a: Int) {
  }

  fun test() {
    (<this>, A()).<get-a>() /*~> Unit */
    (<this>, Java2()).<get-b>() /*~> Unit */
    (<this>, A()).foo(a = 1)
    (<this>, Java2()).bar(a = 1)
  }

  override var A.a: Int
    override get(): Int {
      return 2
    }
    override set(value: Int) {
    }

  override var Java2.b: String
    override get(): String {
      return "C.java2"
    }
    override set(value: String) {
    }

}
