/* Ċ Ġ* Ġ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 . processing Ċ Ċ import Ġcom . google . devtools . k sp . K sp Experimental Ċ import Ġcom . google . devtools . k sp . symbol .* Ċ Ċ /** Ċ Ġ* Ġ[ Resolver ] Ġprovides Ġ[ Symbol Processor ] Ġwith Ġaccess Ġto Ġcompiler Ġdetails Ġsuch Ġas ĠS ymbols . Ċ Ġ*/ Ċ interface ĠResolver Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġnew Ġfiles Ġin Ġthe Ġmodule Ġ/ Ġcompilation Ġunit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġnew Ġfiles Ġgenerated Ġfrom Ġlast Ġlast Ġround Ġof Ġprocessing Ġin Ġthe Ġmodule . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget New Files (): ĠList < KS File > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġfiles Ġin Ġthe Ġmodule Ġ/ Ġcompilation Ġunit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġall Ġfiles Ġgenerated Ġfrom Ġlast Ġlast Ġround Ġof Ġprocessing Ġin Ġthe Ġmodule . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetAll Files (): ĠList < KS File > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġsymbols Ġwith Ġspecified Ġannotation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġannotation Name Ġis Ġthe Ġfully Ġqualified Ġname Ġof Ġthe Ġannotation ; Ġusing Ġ'.' Ġas Ġseparator . ĊĠĠĠĠ Ġ* Ġ@ param Ġin Depth Ġwhether Ġto Ġcheck Ġsymbols Ġin Ġdepth , Ġi . e . Ġcheck Ġsymbols Ġfrom Ġlocal Ġdeclarations . ĠOperation Ġcan Ġbe Ġexpensive Ġif Ġtrue . ĊĠĠĠĠ Ġ* Ġ@ return ĠElements Ġannotated Ġwith Ġthe Ġspecified Ġannotation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Symbols With Annotation ( annotation Name : ĠString , Ġin Depth : ĠBoolean Ġ= Ġfalse ): ĠList < KS Annotated > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġa Ġclass Ġin Ġthe Ġcompilation Ġclasspath Ġfor Ġthe Ġgiven Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġfully Ġqualified Ġname Ġof Ġthe Ġclass Ġto Ġbe Ġloaded ; Ġusing Ġ'.' Ġas Ġseparator . ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠK S Class Declaration , Ġor Ġnull Ġif Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetClass Declaration ByName ( name : ĠK S Name ): ĠK S Class Declaration ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCompose Ġa Ġtype Ġargument Ġout Ġof Ġa Ġtype Ġreference Ġand Ġa Ġvariance ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ref Ġa Ġtype Ġreference Ġto Ġbe Ġused Ġin Ġtype Ġargument ĊĠĠĠĠ Ġ* Ġ@ param Ġvariance Ġspecifies Ġa Ġuse - site Ġvariance ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġtype Ġargument Ġwith Ġuse - site Ġvariance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetType Argument ( type Ref : ĠK S Type Reference , Ġvariance : ĠVari ance ): ĠK S Type Argument ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġ[ KS Name ] Ġfrom Ġa ĠString . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget KS Name FromString ( name : ĠString ): ĠK S Name ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġ[ KS Type Reference ] Ġfrom Ġa Ġ[ KS Type ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate KS Type Reference From KS Type ( type : ĠK S Type ): ĠK S Type Reference ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġbuilt Ġin Ġtypes Ġfor Ġconvenience . ĠFor Ġexample , Ġ[ KS Built ins . any Type ] Ġis Ġthe ĠK S Type Ġinstance Ġfor Ġclass Ġ' kotlin . Any '. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġbuilt Ins : ĠK S Built Ins ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmap Ġa Ġdeclaration Ġto Ġj vm Ġsignature . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ K sp Experimental ĊĠĠĠ Ġfun Ġmap To Jvm Signature ( declaration : ĠK S Declaration ): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġover r ider Ġthe Ġcandidate Ġoverriding Ġdeclaration Ġbeing Ġchecked . ĊĠĠĠĠ Ġ* Ġ@ param Ġoverride e Ġthe Ġcandidate Ġoverridden Ġdeclaration Ġbeing Ġchecked . ĊĠĠĠĠ Ġ* Ġ@ return Ġboolean Ġvalue Ġindicating Ġwhether Ġ[ over r ider ] Ġoverrides Ġ[ override e ] ĊĠĠĠĠ Ġ* ĠCalling Ġ[ overrides ] Ġis Ġexpensive Ġand Ġshould Ġbe Ġa vo ided Ġif Ġpossible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġoverrides ( over r ider : ĠK S Declaration , Ġoverride e : ĠK S Declaration ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 Ġproperty ĠThe Ġproperty Ġwhose Ġtype Ġwill Ġbe Ġ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 ( ĊĠĠĠĠĠĠĠ Ġproperty : ĠK S Property Declaration , ĊĠĠĠĠĠĠĠ Ġcontaining : ĠK S Type ĊĠĠĠ Ġ): ĠK S Type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtype Ġof Ġthe Ġ[ function ] Ġwhen Ġit Ġis Ġviewed Ġas Ġmember Ġof Ġthe Ġ[ containing ] Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġinstance , Ġfor Ġthe Ġfollowing Ġinput : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġinterface ĠBase < T > Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġfun Ġf ( t : T ?): T ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġval Ġfoo : ĠBase < Int > ĊĠĠĠĠ Ġ* Ġval Ġbar : ĠBase < String > ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠWhen Ġ` f ()` Ġis Ġviewed Ġas Ġmember Ġof Ġ` foo `, Ġthis Ġmethod Ġwill Ġreturn Ġa Ġ[ KS Function ] Ġwhere ĊĠĠĠĠ Ġ* Ġthe Ġ[ KS Function . returnType ] Ġis Ġ` Int ` Ġand Ġthe Ġparameter Ġ` t ` Ġis Ġof Ġtype Ġ` Int ? `. ĊĠĠĠĠ Ġ* ĠWhen Ġ` f ()` Ġis Ġviewed Ġas Ġmember Ġof Ġ` bar `, Ġthis Ġmethod Ġwill Ġreturn Ġa Ġ[ KS Function ] ĊĠĠĠĠ Ġ* Ġwhere Ġthe Ġ[ KS Function . returnType ] Ġis Ġ` String ` Ġand Ġthe Ġparameter Ġ` t ` Ġis Ġof Ġtype Ġ` String ? `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġfunction Ġhas Ġtype Ġparameters , Ġthey 'll Ġnot Ġbe Ġresolved Ġand Ġcan Ġbe Ġread Ġfrom ĊĠĠĠĠ Ġ* Ġ[ KS Function . type Parameters ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġsubstitution Ġfails Ġ( e . g . Ġif Ġ[ containing ] Ġis Ġan Ġerror Ġtype , Ġa Ġ[ KS Function ] Ġwith Ġ[ KS Function . isError ] Ġ` true ` ĊĠĠĠĠ Ġ* Ġis Ġreturned . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfunction ĠThe Ġfunction Ġwhose Ġtypes Ġwill Ġbe Ġresolved ĊĠĠĠĠ Ġ* Ġ@ param Ġcontaining ĠThe Ġtype Ġthat Ġcontains Ġ[ function ]. ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException ĠThrows Ġ[ IllegalArgumentException ] Ġwhen Ġ[ containing ] Ġdoes Ġnot Ġcontain Ġ[ function ] ĊĠĠĠĠ Ġ* Ġor Ġif Ġthe Ġ[ function ] Ġis Ġnot Ġdeclared Ġin Ġa Ġclass , Ġobject Ġor Ġinterface . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġas Member Of ( ĊĠĠĠĠĠĠĠ Ġfunction : ĠK S Function Declaration , ĊĠĠĠĠĠĠĠ Ġcontaining : ĠK S Type ĊĠĠĠ Ġ): ĠK S Function ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġj vm Ġname Ġof Ġthe Ġgiven Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġj vm Ġname Ġof Ġa Ġfunction Ġmight Ġdepend Ġon Ġthe ĠKotlin ĠCompiler Ġversion Ġhence Ġit Ġis Ġnot Ġguaranteed Ġto Ġbe ĊĠĠĠĠ Ġ* Ġcompatible Ġbetween Ġdifferent Ġcompiler Ġversions Ġexcept Ġfor Ġthe Ġrules Ġoutlined Ġin Ġthe ĠJava Ġinter oper ability ĊĠĠĠĠ Ġ* Ġdocumentation : Ġhttps :// kotlin lang . org / docs / reference / java - to - kotlin - interop . html . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġ[ declaration ] Ġis Ġannotated Ġwith Ġ[ Jvm Name ], Ġthat Ġname Ġwill Ġbe Ġreturned Ġfrom Ġthis Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġmight Ġbe Ġdifferent Ġfrom Ġthe Ġname Ġdeclared Ġin Ġthe ĠKotlin Ġsource Ġcode Ġin Ġtwo Ġcases : ĊĠĠĠĠ Ġ* Ġa ) ĠIf Ġthe Ġfunction Ġreceives Ġor Ġreturns Ġan Ġinline Ġclass , Ġits Ġname Ġwill Ġbe Ġm angled Ġaccording Ġto ĊĠĠĠĠ Ġ* Ġhttps :// kotlin lang . org / docs / reference / inline - classes . html # m angling . ĊĠĠĠĠ Ġ* Ġb ) ĠIf Ġthe Ġfunction Ġis Ġdeclared Ġas Ġinternal , Ġit Ġwill Ġinclude Ġa Ġsuffix Ġwith Ġthe Ġmodule Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : ĠAs Ġinline Ġclasses Ġare Ġan Ġexperimental Ġfeature , Ġthe Ġresult Ġof Ġthis Ġfunction Ġmight Ġchange Ġbased Ġon Ġthe ĊĠĠĠĠ Ġ* Ġkotlin Ġversion Ġused Ġin Ġthe Ġproject . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ K sp Experimental ĊĠĠĠ Ġfun Ġget Jvm Name ( declaration : ĠK S Function Declaration ): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġj vm Ġname Ġof Ġthe Ġgiven Ġproperty Ġaccessor . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġj vm Ġname Ġof Ġan Ġaccessor Ġmight Ġdepend Ġon Ġthe ĠKotlin ĠCompiler Ġversion Ġhence Ġit Ġis Ġnot Ġguaranteed Ġto Ġbe ĊĠĠĠĠ Ġ* Ġcompatible Ġbetween Ġdifferent Ġcompiler Ġversions Ġexcept Ġfor Ġthe Ġrules Ġoutlined Ġin Ġthe ĠJava Ġinter oper ability ĊĠĠĠĠ Ġ* Ġdocumentation : Ġhttps :// kotlin lang . org / docs / reference / java - to - kotlin - interop . html . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġ[ accessor ] Ġis Ġannotated Ġwith Ġ[ Jvm Name ], Ġthat Ġname Ġwill Ġbe Ġreturned Ġfrom Ġthis Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠBy Ġdefault , Ġthis Ġname Ġwill Ġmatch Ġthe Ġname Ġcalculated Ġaccording Ġto ĊĠĠĠĠ Ġ* Ġhttps :// kotlin lang . org / docs / reference / java - to - kotlin - interop . html # properties . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthe Ġresult Ġof Ġthis Ġfunction Ġmight Ġbe Ġdifferent Ġfrom Ġthat Ġname Ġin Ġtwo Ġcases : ĊĠĠĠĠ Ġ* Ġa ) ĠIf Ġthe Ġproperty 's Ġtype Ġis Ġan Ġinternal Ġclass , Ġaccessor 's Ġname Ġwill Ġbe Ġm angled Ġaccording Ġto ĊĠĠĠĠ Ġ* Ġhttps :// kotlin lang . org / docs / reference / inline - classes . html # m angling . ĊĠĠĠĠ Ġ* Ġb ) ĠIf Ġthe Ġfunction Ġis Ġdeclared Ġas Ġinternal , Ġit Ġwill Ġinclude Ġa Ġsuffix Ġwith Ġthe Ġmodule Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : ĠAs Ġinline Ġclasses Ġare Ġan Ġexperimental Ġfeature , Ġthe Ġresult Ġof Ġthis Ġfunction Ġmight Ġchange Ġbased Ġon Ġthe ĊĠĠĠĠ Ġ* Ġkotlin Ġversion Ġused Ġin Ġthe Ġproject . ĊĠĠĠĠ Ġ* Ġsee : Ġhttps :// kotlin lang . org / docs / reference / java - to - kotlin - interop . html # properties ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ K sp Experimental ĊĠĠĠ Ġfun Ġget Jvm Name ( accessor : ĠK S Property Accessor ): ĠString Ċ } Ċ