| // RUN_PIPELINE_TILL: CODEGEN | |
| // DUMP_CFG | |
| import kotlin.properties.ReadWriteProperty | |
| import kotlin.reflect.KProperty | |
| abstract class DelegateProvider<in Type> | |
| fun <Type : Base, Base : DelegateProvider<Base>, Target : Any> Type.delegate( | |
| factory: () -> ReadWriteProperty<Type, Target> | |
| ): ReadWriteProperty<Type, Target> = null!! | |
| class IssueListView : DelegateProvider<IssueListView>() { | |
| fun updateFrom(any: Any) {} | |
| } | |
| class IssuesListUserProfile : DelegateProvider<IssuesListUserProfile>() { | |
| var issueListView by delegate { | |
| object : ReadWriteProperty<IssuesListUserProfile, IssueListView> { | |
| override fun getValue(thisRef: IssuesListUserProfile, property: KProperty<*>): IssueListView { | |
| return IssueListView() | |
| } | |
| override fun setValue(thisRef: IssuesListUserProfile, property: KProperty<*>, value: IssueListView) { | |
| return IssueListView().updateFrom(value) | |
| } | |
| } | |
| } | |
| } | |
| /* GENERATED_FIR_TAGS: anonymousObjectExpression, checkNotNullCall, classDeclaration, funWithExtensionReceiver, | |
| functionDeclaration, functionalType, in, lambdaLiteral, nullableType, operator, override, propertyDeclaration, | |
| propertyDelegate, setter, starProjection, typeConstraint, typeParameter */ |