// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package class_staticizer

private var COUNT = 0

fun next() = "${COUNT++}".padStart(3, '0')

fun main(args: Array<String>) {
  println(Regular.foo)
  println(Regular.bar)
  println(Regular.blah(next()))
  println(Derived.foo)
  println(Derived.bar)
  println(Derived.blah(next()))
  println(Util.foo)
  println(Util.bar)
  println(Util.blah(next()))
}

open class Regular {
  companion object {
    var foo: String = "Regular::CC::foo[${next()}]"
    var bar: String = blah(next())

    fun blah(p: String) = "Regular::CC::blah($p)[${next()}]"
  }
}

open class Derived : Regular() {
  companion object {
    var foo: String = "Derived::CC::foo[${next()}]"
    var bar: String = blah(next())

    fun blah(p: String) = "Derived::CC::blah($p)[${next()}]"
  }
}

object Util {
  var foo: String = "Util::foo[${next()}]"
  var bar: String = Regular.blah(next()) + Derived.blah(next())

  fun blah(p: String) = "Util::blah($p)[${next()}]"
}
