// 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 CompanionProperties {
  companion object {
    private var privateProp: String = "privateProp"
    internal var internalProp: String = "internalProp"
    public var publicProp: String = "publicProp"

    public var primitiveProp: Int = Int.MAX_VALUE

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

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

fun companionProperties_noUseOfProperties() {
  CompanionProperties()
  println("DONE")
}

fun companionProperties_usePrivateProp() {
  CompanionProperties.callSetterPrivateProp("foo")
  println(CompanionProperties.callGetterPrivateProp())
}

fun companionProperties_useInternalProp() {
  CompanionProperties.internalProp = "foo"
  println(CompanionProperties.internalProp)
}

fun companionProperties_usePublicProp() {
  CompanionProperties.publicProp = "foo"
  println(CompanionProperties.publicProp)
}

fun companionProperties_usePrimitiveProp() {
  CompanionProperties.primitiveProp = Int.MIN_VALUE
  println(CompanionProperties.primitiveProp)
}
