class P {
  val x: Int
    field = x
    get

  val y: Int
    field = y
    get

  constructor(x: Int, y: Int) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  operator fun component1(): Int {
    return <this>.<get-x>()
  }

  operator fun component2(): Int {
    return <this>.<get-y>()
  }

}

class Q<T1 : Any?, T2 : Any?> {
  val x: T1
    field = x
    get

  val y: T2
    field = y
    get

  constructor(x: T1, y: T2) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  operator fun component1(): T1 {
    return <this>.<get-x>()
  }

  operator fun component2(): T2 {
    return <this>.<get-y>()
  }

}

fun test1() {
  val tmp_0: P = notNullP() /*!! P */
  val x: Int = tmp_0.component1()
  val y: Int = tmp_0.component2()
  use(x = x, y = y)
}

fun test2() {
  val tmp_1: @FlexibleNullability Q<@EnhancedNullability @NotNull String, @EnhancedNullability @NotNull String>? = notNullComponents()
  val x: @EnhancedNullability @NotNull String = tmp_1.component1() /*!! @NotNull String */
  val y: @EnhancedNullability @NotNull String = tmp_1.component2() /*!! @NotNull String */
  use(x = x, y = y)
}

fun test2Desugared() {
  val tmp: @FlexibleNullability Q<@EnhancedNullability @NotNull String, @EnhancedNullability @NotNull String>? = notNullComponents()
  val x: @NotNull String = tmp.component1() /*!! @NotNull String */
  val y: @NotNull String = tmp.component2() /*!! @NotNull String */
  use(x = x, y = y)
}

fun test3() {
  val tmp_2: Q<@EnhancedNullability @NotNull String, @EnhancedNullability @NotNull String> = notNullQAndComponents() /*!! Q<@EnhancedNullability @NotNull String, @EnhancedNullability @NotNull String> */
  val x: @EnhancedNullability @NotNull String = tmp_2.component1() /*!! @NotNull String */
  val y: @EnhancedNullability @NotNull String = tmp_2.component2() /*!! @NotNull String */
  use(x = x, y = y)
}

fun test4() {
  val tmp_3: IndexedValue<@EnhancedNullability @NotNull P> = listOfNotNull() /*!! @FlexibleMutability MutableList<@EnhancedNullability @NotNull P> */.withIndex<@EnhancedNullability @NotNull P>().first<IndexedValue<@EnhancedNullability @NotNull P>>()
  val x: Int = tmp_3.component1()
  val y: @EnhancedNullability @NotNull P = tmp_3.component2() /*!! @NotNull P */
  use(x = x, y = y)
}

fun use(x: Any, y: Any) {
}

