|  | // 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 | 
|  |  | 
|  | private var privateProp: String = "privateProp" | 
|  | internal var internalProp: String = "internalProp" | 
|  | public var publicProp: String = "publicProp" | 
|  |  | 
|  | private lateinit var privateLateInitProp: String | 
|  | internal lateinit var internalLateInitProp: String | 
|  | public lateinit var publicLateInitProp: String | 
|  |  | 
|  | public var primitiveProp: Int = Int.MAX_VALUE | 
|  |  | 
|  | // Serves as intermediate to make sure the access to a property is done from a separate class. | 
|  | private object Intermediate { | 
|  | fun readPrivateProp() = privateProp | 
|  |  | 
|  | fun writePrivateProp(s: String) { | 
|  | privateProp = s | 
|  | } | 
|  |  | 
|  | fun readInternalProp() = internalProp | 
|  |  | 
|  | fun writeInternalProp(s: String) { | 
|  | internalProp = s | 
|  | } | 
|  |  | 
|  | fun readPublicProp() = publicProp | 
|  |  | 
|  | fun writePublicProp(s: String) { | 
|  | publicProp = s | 
|  | } | 
|  |  | 
|  | fun readPrimitiveProp() = primitiveProp | 
|  |  | 
|  | fun writePrimitiveProp(i: Int) { | 
|  | primitiveProp = i | 
|  | } | 
|  |  | 
|  | fun readLateInitPrivateProp() = privateLateInitProp | 
|  |  | 
|  | fun writeLateInitPrivateProp(s: String) { | 
|  | privateLateInitProp = s | 
|  | } | 
|  |  | 
|  | fun readLateInitInternalProp() = internalLateInitProp | 
|  |  | 
|  | fun writeLateInitInternalProp(s: String) { | 
|  | internalLateInitProp = s | 
|  | } | 
|  |  | 
|  | fun readLateInitPublicProp() = publicLateInitProp | 
|  |  | 
|  | fun writeLateInitPublicProp(s: String) { | 
|  | publicLateInitProp = s | 
|  | } | 
|  | } | 
|  |  | 
|  | fun doNotUseProperties(): String { | 
|  | return "doNotUseProperties" | 
|  | } | 
|  |  | 
|  | fun fileProperties_noUseOfProperties() { | 
|  | println(ObjectProperties.doNotUseProperties()) | 
|  | } | 
|  |  | 
|  | fun fileProperties_usePrivateProp() { | 
|  | Intermediate.writePrivateProp("foo") | 
|  | println(Intermediate.readPrivateProp()) | 
|  | } | 
|  |  | 
|  | fun fileProperties_useInternalProp() { | 
|  | Intermediate.writeInternalProp("foo") | 
|  | println(Intermediate.readInternalProp()) | 
|  | } | 
|  |  | 
|  | fun fileProperties_usePublicProp() { | 
|  | Intermediate.writePublicProp("foo") | 
|  | println(Intermediate.readPublicProp()) | 
|  | } | 
|  |  | 
|  | fun fileProperties_usePrimitiveProp() { | 
|  | Intermediate.writePrimitiveProp(Int.MIN_VALUE) | 
|  | println(Intermediate.readPrimitiveProp()) | 
|  | } | 
|  |  | 
|  | fun fileProperties_useLateInitPrivateProp() { | 
|  | Intermediate.writeLateInitPrivateProp("foo") | 
|  | println(Intermediate.readLateInitPrivateProp()) | 
|  | } | 
|  |  | 
|  | fun fileProperties_useLateInitInternalProp() { | 
|  | Intermediate.writeLateInitInternalProp("foo") | 
|  | println(Intermediate.readLateInitInternalProp()) | 
|  | } | 
|  |  | 
|  | fun fileProperties_useLateInitPublicProp() { | 
|  | Intermediate.writeLateInitPublicProp("foo") | 
|  | println(Intermediate.readLateInitPublicProp()) | 
|  | } |