// 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 properties

class CompanionLateInitProperties {
  companion object {
    private lateinit var privateLateInitProp: String
    internal lateinit var internalLateInitProp: String
    public lateinit var publicLateInitProp: String

    fun callSetterPrivateProp(v: String) {
      privateLateInitProp = v
    }

    fun callGetterPrivateProp(): String {
      return privateLateInitProp
    }
  }
}

fun companionLateInitProperties_noUseOfProperties() {
  CompanionLateInitProperties()
  println("DONE")
}

fun companionLateInitProperties_usePrivateLateInitProp() {
  CompanionLateInitProperties.callSetterPrivateProp("foo")
  println(CompanionLateInitProperties.callGetterPrivateProp())
}

fun companionLateInitProperties_useInternalLateInitProp() {
  CompanionLateInitProperties.internalLateInitProp = "foo"
  println(CompanionLateInitProperties.internalLateInitProp)
}

fun companionLateInitProperties_usePublicLateInitProp() {
  CompanionLateInitProperties.publicLateInitProp = "foo"
  println(CompanionLateInitProperties.publicLateInitProp)
}
