// CHECK:
//   Mangled name: Ann
//   Public signature: /Ann|null[0]
open annotation class Ann : Annotation {
  // CHECK:
  //   Mangled name: Ann#<init>(){}
  //   Public signature: /Ann.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

}

// CHECK:
//   Mangled name: DFoo
//   Public signature: /DFoo|null[0]
class DFoo : IFoo {
  // CHECK:
  //   Mangled name: DFoo#<init>(IFoo){}
  //   Public signature: /DFoo.<init>|-657369904845510135[0]
  //   Public signature debug description: <init>(IFoo){}
  constructor(d: IFoo) /* primary */

  // CHECK:
  //   Mangled name: DFoo#testExtFun@kotlin.String(){}
  //   Public signature: /DFoo.testExtFun|-4671785829303171989[0]
  //   Public signature debug description: testExtFun@kotlin.String(){}
  @Ann
  override fun String.testExtFun(): Unit

  // CHECK:
  //   Mangled name: DFoo#testFun(){}
  //   Public signature: /DFoo.testFun|6322333980269160703[0]
  //   Public signature debug description: testFun(){}
  @Ann
  override fun testFun(): Unit

  // CHECK:
  //   Mangled name: DFoo@kotlin.String{}testExtVal
  //   Public signature: /DFoo.testExtVal|-6269693357376137188[0]
  //   Public signature debug description: @kotlin.String{}testExtVal
  override val String.testExtVal: String
    // CHECK JVM_IR:
    //   Mangled name: DFoo#<get-testExtVal>@kotlin.String(){}kotlin.String
    //   Public signature: /DFoo.testExtVal.<get-testExtVal>|4035393032845602237[0]
    //   Public signature debug description: <get-testExtVal>@kotlin.String(){}kotlin.String
    // CHECK JS_IR NATIVE:
    //   Mangled name: DFoo#<get-testExtVal>@kotlin.String(){}
    //   Public signature: /DFoo.testExtVal.<get-testExtVal>|8692242155954463066[0]
    //   Public signature debug description: <get-testExtVal>@kotlin.String(){}
    override get(): String

  // CHECK:
  //   Mangled name: DFoo{}testVal
  //   Public signature: /DFoo.testVal|2839078120601828782[0]
  //   Public signature debug description: {}testVal
  override val testVal: String
    // CHECK JVM_IR:
    //   Mangled name: DFoo#<get-testVal>(){}kotlin.String
    //   Public signature: /DFoo.testVal.<get-testVal>|-8940261368877498423[0]
    //   Public signature debug description: <get-testVal>(){}kotlin.String
    // CHECK JS_IR NATIVE:
    //   Mangled name: DFoo#<get-testVal>(){}
    //   Public signature: /DFoo.testVal.<get-testVal>|-3119877793352707332[0]
    //   Public signature debug description: <get-testVal>(){}
    override get(): String

}

// CHECK:
//   Mangled name: IFoo
//   Public signature: /IFoo|null[0]
interface IFoo {
  // CHECK:
  //   Mangled name: IFoo#testExtFun@kotlin.String(){}
  //   Public signature: /IFoo.testExtFun|-4671785829303171989[0]
  //   Public signature debug description: testExtFun@kotlin.String(){}
  @Ann
  abstract fun String.testExtFun(): Unit

  // CHECK:
  //   Mangled name: IFoo#testFun(){}
  //   Public signature: /IFoo.testFun|6322333980269160703[0]
  //   Public signature debug description: testFun(){}
  @Ann
  abstract fun testFun(): Unit

  // CHECK:
  //   Mangled name: IFoo@kotlin.String{}testExtVal
  //   Public signature: /IFoo.testExtVal|-6269693357376137188[0]
  //   Public signature debug description: @kotlin.String{}testExtVal
  @Ann
  abstract val String.testExtVal: String
    // CHECK JVM_IR:
    //   Mangled name: IFoo#<get-testExtVal>@kotlin.String(){}kotlin.String
    //   Public signature: /IFoo.testExtVal.<get-testExtVal>|4035393032845602237[0]
    //   Public signature debug description: <get-testExtVal>@kotlin.String(){}kotlin.String
    // CHECK JS_IR NATIVE:
    //   Mangled name: IFoo#<get-testExtVal>@kotlin.String(){}
    //   Public signature: /IFoo.testExtVal.<get-testExtVal>|8692242155954463066[0]
    //   Public signature debug description: <get-testExtVal>@kotlin.String(){}
    abstract get

  // CHECK:
  //   Mangled name: IFoo{}testVal
  //   Public signature: /IFoo.testVal|2839078120601828782[0]
  //   Public signature debug description: {}testVal
  @Ann
  abstract val testVal: String
    // CHECK JVM_IR:
    //   Mangled name: IFoo#<get-testVal>(){}kotlin.String
    //   Public signature: /IFoo.testVal.<get-testVal>|-8940261368877498423[0]
    //   Public signature debug description: <get-testVal>(){}kotlin.String
    // CHECK JS_IR NATIVE:
    //   Mangled name: IFoo#<get-testVal>(){}
    //   Public signature: /IFoo.testVal.<get-testVal>|-3119877793352707332[0]
    //   Public signature debug description: <get-testVal>(){}
    abstract get

}
