|  | // 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 accessors | 
|  |  | 
|  | class PropertyAccessorForLambda { | 
|  | private var property: String = "foo" | 
|  | get() = { field }() | 
|  | set(v) = { field = v }() | 
|  |  | 
|  | // Causes a class initializer to be added to the class. | 
|  | companion object { | 
|  | public var companionProperty = "static" | 
|  | } | 
|  |  | 
|  | fun accessPropertyOfOuterClass() { | 
|  | // Access to the property requires to go through an accessor method, respectively | 
|  | // named "access$getProperty$lp" for getter and "access$setProperty$lp" for setter). | 
|  | property = "bar" | 
|  | println(property) | 
|  | } | 
|  | } | 
|  |  | 
|  | fun noUseOfPropertyAccessorFromLambda() { | 
|  | // Create instance of class to keep them after tree shaking. | 
|  | PropertyAccessorForLambda() | 
|  | } | 
|  |  | 
|  | fun usePropertyAccessorFromLambda() { | 
|  | PropertyAccessorForLambda.companionProperty = "fake" | 
|  | PropertyAccessorForLambda().accessPropertyOfOuterClass() | 
|  | } |