// MODULE: separate
// FILE: KotlinInternalSeparate.kt

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

  }

  @PublishedApi
  internal open fun foo() {
  }

  @PublishedApi
  internal open val a: Int
    internal open get(): Int {
      return 1
    }

}

// MODULE: main
// FILE: test.kt

class A : InternalVisibility, JavaDefault {
  constructor() /* primary */ {
    super/*InternalVisibility*/()
    /* <init>() */

  }

  override fun foo() {
  }

  internal override val a: Int
    internal override get(): Int {
      return 10
    }

}

class B : InternalVisibility, JavaPublic {
  constructor() /* primary */ {
    super/*InternalVisibility*/()
    /* <init>() */

  }

  override fun foo() {
  }

  internal override val a: Int
    internal override get(): Int {
      return 10
    }

}

abstract class C : KotlinInternalSeparate, JavaDefault {
  constructor() /* primary */ {
    super/*KotlinInternalSeparate*/()
    /* <init>() */

  }

}

class D : KotlinInternalSeparate, JavaDefault {
  constructor() /* primary */ {
    super/*KotlinInternalSeparate*/()
    /* <init>() */

  }

  override fun foo() {
  }

}

abstract class E : KotlinInternalSeparate, JavaPublic {
  constructor() /* primary */ {
    super/*KotlinInternalSeparate*/()
    /* <init>() */

  }

}

class F : KotlinInternalSeparate, JavaPublic {
  constructor() /* primary */ {
    super/*KotlinInternalSeparate*/()
    /* <init>() */

  }

  override fun foo() {
  }

}

open class InternalVisibility {
  @PublishedApi
  internal open val a: Int
    field = 4
    internal open get

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

  }

  @PublishedApi
  internal open fun foo() {
  }

}

fun test(a: A, b: B, c: C, d: D, e: E, f: F) {
  a.foo()
  a.<get-a>() /*~> Unit */
  b.foo()
  b.<get-a>() /*~> Unit */
  c.foo()
  d.foo()
  f.foo()
}
