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

  }

}

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

  }

}

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

  }

}

class D : Java2, Java3 {
  constructor() /* primary */ {
    super/*Java2*/()
    /* <init>() */

  }

}

class E : A, Java3 {
  constructor() /* primary */ {
    super/*A*/()
    /* <init>() */

  }

}

fun A.foo(a: Int) {
}

fun Java2.foo(a: Int) {
}

fun Java3.foo(a: Any) {
}

fun test(b: B, c: C, d: D, e: E) {
  b.<set-a>(value = 10)
  b.foo(a = 1)
  c.<set-a>(value = "3")
  c.foo(a = 1)
  d.foo(a = "")
  e.foo(a = "")
}

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

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

var Java3.a: String
  get(): String {
    return "java3"
  }
  set(value: String) {
  }
