/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ ĊĊ Ċ package Ġcom . google . devtools . k sp . symbol Ċ Ċ /** Ċ Ġ* ĠA Ġproperty Ġdeclaration , Ġcan Ġalso Ġbe Ġused Ġto Ġden ote Ġa Ġvariable Ġdeclaration . Ċ Ġ*/ Ċ interface ĠK S Property Declaration Ġ: ĠK S Declaration Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGetter Ġof Ġthe Ġproperty . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġwhen ĠK S Property Declaration Ġis Ġused Ġto Ġmodel Ġa Ġvariable , Ġgetter Ġis Ġalways Ġnull , Ġas Ġa Ġvariable Ġcan 't Ġhave Ġa Ġgetter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġgetter : ĠK S Property Getter ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSetter Ġof Ġthe Ġproperty . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġwhen ĠK S Property Declaration Ġis Ġused Ġto Ġmodel Ġa Ġvariable , Ġsetter Ġis Ġalways Ġnull , Ġas Ġa Ġvariable Ġcan 't Ġhave Ġa Ġsetter . ĊĠĠĠĠ Ġ* ĠIf Ġa Ġproperty Ġis Ġimmutable , Ġsetter Ġis Ġalways Ġnull Ġas Ġwell , Ġas Ġan Ġimmutable Ġproperty Ġcan 't Ġhave Ġa Ġsetter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsetter : ĠK S Property Setter ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExtension Ġreceiver Ġif Ġthis Ġdeclaration Ġis Ġan Ġ[ extension Ġproperty ][ https :// kotlin lang . org / docs / reference / extensions . html # extension - properties ]. ĊĠĠĠĠ Ġ* ĠDispatch Ġreceiver Ġis Ġ[ parent Declaration ], Ġif Ġany . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġextension Receiver : ĠK S Type Reference ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġtype Ġof Ġthis Ġdeclaration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtype : ĠK S Type Reference ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrue Ġif Ġthis Ġproperty Ġis Ġmutable . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Mutable : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIndicates Ġwhether Ġthis Ġis Ġa Ġdeleg ated Ġproperty . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Deleg ated (): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġthe Ġclosest Ġoverride e Ġof Ġthis Ġproperty , Ġif Ġoverriding . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġthe Ġfollowing Ġinput : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġabstract Ġclass ĠA Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġopen Ġval Ġx : Int ĊĠĠĠĠ Ġ* ĠĠ Ġopen Ġval Ġy : Int ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġabstract Ġclass ĠB Ġ: ĠA () Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġoverride Ġval Ġx : Int ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġabstract Ġclass ĠC Ġ: ĠB () Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġoverride Ġval Ġx : Int ĊĠĠĠĠ Ġ* ĠĠ Ġoverride Ġval Ġy : Int ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠCalling Ġ` find Override e ` Ġon Ġ` C . x ` Ġwill Ġreturn Ġ` B . x `. ĊĠĠĠĠ Ġ* ĠCalling Ġ` find Override e ` Ġon Ġ` C . y ` Ġwill Ġreturn Ġ` A . y `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġthere Ġare Ġmultiple Ġsuper Ġclasses Ġ/ Ġinterfaces Ġwith Ġthe Ġproperty , Ġthe Ġclosest Ġdeclaration ĊĠĠĠĠ Ġ* Ġto Ġthe Ġcurrent Ġcontaining Ġdeclaration Ġis Ġselected . ĠIf Ġthey Ġare Ġin Ġthe Ġsame Ġlevel , Ġthe ĊĠĠĠĠ Ġ* Ġproperty Ġof Ġthe Ġfirst Ġspecified Ġinterface Ġ( in Ġsource ) Ġwill Ġbe Ġreturned . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ KS Property Declaration ] Ġfor Ġthe Ġoverridden Ġproperty , Ġif Ġoverriding , Ġotherwise Ġnull . ĊĠĠĠĠ Ġ* ĠCalling Ġ[ find Override e ] Ġis Ġexpensive Ġand Ġshould Ġbe Ġa vo ided Ġif Ġpossible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Override e (): ĠK S Property Declaration ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtype Ġof Ġthe Ġ[ property ] Ġwhen Ġit Ġis Ġviewed Ġas Ġmember Ġof Ġthe Ġ[ containing ] Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġinstance , Ġfor Ġthe Ġfollowing Ġinput : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġclass ĠBase < T >( val Ġx : T ) ĊĠĠĠĠ Ġ* Ġval Ġfoo : ĠBase < Int > ĊĠĠĠĠ Ġ* Ġval Ġbar : ĠBase < String > ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠWhen Ġ` x ` Ġis Ġviewed Ġas Ġmember Ġof Ġ` foo `, Ġthis Ġmethod Ġwill Ġreturn Ġthe Ġ[ KS Type ] Ġfor Ġ` Int ` ĊĠĠĠĠ Ġ* Ġwhereas Ġwhen Ġ` x ` Ġis Ġviewed Ġas Ġmember Ġof Ġ` bar `, Ġthis Ġmethod Ġwill Ġreturn Ġthe Ġ[ KS Type ] ĊĠĠĠĠ Ġ* Ġrepresenting Ġ` String `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġsubstitution Ġfails Ġ( e . g . Ġif Ġ[ containing ] Ġis Ġan Ġerror Ġtype , Ġa Ġ[ KS Type ] Ġwith Ġ[ KS Type . isError ] Ġ` true ` Ġis ĊĠĠĠĠ Ġ* Ġreturned . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontaining ĠThe Ġtype Ġthat Ġcontains Ġ[ property ] ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException ĠThrows Ġ[ IllegalArgumentException ] Ġwhen Ġ[ containing ] Ġdoes Ġnot Ġcontain ĊĠĠĠĠ Ġ* Ġ[ property ] Ġor Ġif Ġthe Ġ[ property ] Ġis Ġnot Ġdeclared Ġin Ġa Ġclass , Ġobject Ġor Ġinterface . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġas Member Of ( containing : ĠK S Type ): ĠK S Type Ċ } Ċ