package Ġcom . ka u fl and . model . source Ċ Ċ import Ġcom . ka u fl and . Logger Ċ import Ġcom . ka u fl and . java To Kotlin Type Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . TypeName Ċ import Ġcom . squareup . kotlin po et . as TypeName Ċ import Ġcom . sun . tools . javac . code . Symbol Ċ import Ġk au fl and . com . co ach base binder api . Based On Ċ import Ġk au fl and . com . co ach base binder api . Comment Ċ import Ġk au fl and . com . co ach base binder api . Doc Id Ċ import Ġk au fl and . com . co ach base binder api . Doc Id Segment Ċ import Ġk au fl and . com . co ach base binder api . Entity Ċ import Ġk au fl and . com . co ach base binder api . Field Ċ import Ġk au fl and . com . co ach base binder api . Fields Ċ import Ġk au fl and . com . co ach base binder api . Generate Accessor Ċ import Ġk au fl and . com . co ach base binder api . Map Wrapper Ċ import Ġk au fl and . com . co ach base binder api . Reduce Ċ import Ġk au fl and . com . co ach base binder api . Reduc es Ċ import Ġk au fl and . com . co ach base binder api . deprecated . Deprecated Ċ import Ġk au fl and . com . co ach base binder api . query . Queries Ċ import Ġk au fl and . com . co ach base binder api . query . Query Ċ import Ġorg . apache . commons . lang 3 . text . Word Utils Ċ import Ġorg . jetbrains . annotations . Nullable Ċ import Ġjavax . lang . model . element . Element Ċ import Ġjavax . lang . model . element . Element Kind Ċ import Ġjavax . lang . model . element . Executable Element Ċ import Ġjavax . lang . model . element . Modifier Ċ import Ġjavax . lang . model . element . Variable Element Ċ import Ġjavax . lang . model . type . Type Mirror Ċ import Ġkotlin . coroutines . Continuation Ċ Ċ data Ġclass ĠSource Model ( private Ġval Ġsource Element : ĠElement ) Ġ: ĠI Source Model , ĠI Class Model Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġsource Clazz Simple Name : ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġ( source Element Ġas ĠSymbol . Class Symbol ). simple Name . toString () ĊĠĠĠ Ġoverride Ġval Ġsource Package : ĠString Ġ= Ġ( source Element Ġas ĠSymbol . Class Symbol ). pack ge (). toString () ĊĊĠĠĠ Ġoverride Ġval Ġsource Clazz TypeName : ĠType Name Ġ= ĠClass Name ( source Package , Ġsource Clazz Simple Name ) ĊĊĠĠĠ Ġoverride Ġval Ġentity Annotation : ĠEntity ? Ġ= Ġsource Element . getAnnotation ( Entity :: class . java ) ĊĠĠĠ Ġoverride Ġval ĠtypeName : ĠType Name Ġ= Ġsource Element . as Type (). as TypeName () ĊĠĠĠ Ġoverride Ġval Ġmap Wrapper Annotation : ĠMap Wrapper ? Ġ= ĊĠĠĠĠĠĠĠ Ġsource Element . getAnnotation ( Map Wrapper :: class . java ) ĊĠĠĠ Ġoverride Ġval Ġcomment Annotation : ĠComment ? Ġ= Ġsource Element . getAnnotation ( Comment :: class . java ) ĊĠĠĠ Ġoverride Ġval Ġdeprecated Annotation : ĠDeprecated ? Ġ= ĊĠĠĠĠĠĠĠ Ġsource Element . getAnnotation ( Deprecated :: class . java ) ĊĠĠĠ Ġoverride Ġval Ġdoc Id Annotation : ĠDoc Id ? Ġ= Ġsource Element . getAnnotation ( Doc Id :: class . java ) ĊĠĠĠ Ġoverride Ġval Ġbased On Annotation : ĠBased On ? Ġ= Ġsource Element . getAnnotation ( Based On :: class . java ) ĊĊĠĠĠ Ġoverride Ġval Ġreduce Annotations : ĠList < Reduce > Ġ= ĊĠĠĠĠĠĠĠ Ġsource Element . getAnnotation ( Reduc es :: class . java )?. value ?. toList () Ġ?: Ġempty List () ĊĠĠĠ Ġoverride Ġval Ġfield Annotations : ĠList < Field > Ġ= ĊĠĠĠĠĠĠĠ Ġsource Element . getAnnotation ( Fields :: class . java )?. value ?. toList () Ġ?: Ġempty List () ĊĠĠĠ Ġoverride Ġval Ġquery Annotations : ĠList < Query > Ġ= ĊĠĠĠĠĠĠĠ Ġsource Element . getAnnotation ( Queries :: class . java )?. value ?. toList () Ġ?: Ġempty List () ĊĊĠĠĠ Ġoverride Ġval Ġabstract Parts : ĠSet < String > ĊĊĠĠĠ Ġoverride Ġfun Ġlog Error ( logger : ĠLogger , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error ( message , Ġsource Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġrelevant Static Functions : ĠList < Source Member Function > ĊĊĠĠĠ Ġoverride Ġval Ġrelevant StaticFields : ĠList < Source Member Field > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġabstract Parts Ġ= Ġfind Possible Overrides ( source Element ) ĊĠĠĠĠĠĠĠ Ġval Ġrelevant Statics Fields Ġ= Ġmutable ListOf < Source Member Field >() ĊĠĠĠĠĠĠĠ Ġval Ġrelevant Statics Functions Ġ= Ġmutable ListOf < Source Member Function >() ĊĠĠĠĠĠĠĠ Ġparse Statics From Structure ( source Element ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccessor Ġ= Ġit . getAnnotation ( Generate Accessor :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Segment Ġ= Ġit . getAnnotation ( Doc Id Segment :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accessor Ġ!= Ġnull Ġ|| Ġdoc Segment Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠElement Kind . FIELD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelevant Statics Fields . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSource Member Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . simple Name . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevaluate TypeName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getAnnotation ( Nullable :: class . java ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Segment , Ġaccessor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠElement Kind . METHOD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġas ? ĠExec utable Element )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Suspend Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= Ġmutable ListOf < Parameter >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parameters . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Suspend Function ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Suspend Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . simple Name . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevaluate TypeName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getAnnotation ( Nullable :: class . java ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelevant Statics Functions . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSource Member Function ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . simple Name . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Suspend Ġ= Ġis Suspend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= Ġparameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Accessor Ġ= Ġaccessor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Id Segment Ġ= Ġdoc Segment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn TypeName Ġ= Ġit . returnType . as TypeName ()?. java To Kotlin Type () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrelevant Static Functions Ġ= Ġrelevant Statics Functions ĊĠĠĠĠĠĠĠ Ġrelevant StaticFields Ġ= Ġrelevant Statics Fields ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Suspend Function ( var Element : ĠVariable Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvar Element . as Type (). toString (). contains ( Continuation :: class . qualified Name . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġevaluate TypeName ( type Mirror : ĠType Mirror , Ġnullable : ĠBoolean ): ĠType Name Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtype Mirror . as TypeName (). java To Kotlin Type (). copy ( nullable Ġ= Ġnullable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Statics From Structure ( c bl Entity Element : ĠElement , Ġmapper : Ġ( Element ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Element Ġin Ġc bl Entity Element . enc losed Elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Element . modifiers . contains ( Modifier . STATIC )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Element . kind Ġ== ĠElement Kind . CLASS Ġ&& Ġchild Element . simple Name . toString () Ġ== Ġ" Companion ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( comp anion Members Ġin Ġchild Element . enc losed Elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . invoke ( comp anion Members ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . invoke ( child Element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Possible Overrides ( c bl Entity Element : ĠElement ): ĠHashSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġabstract Set Ġ= ĠHashSet < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( enc losed Element Ġin Ġc bl Entity Element . enc losed Elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enc losed Element . modifiers . contains ( Modifier . AB STR ACT ) Ġ&& Ġ( enc losed Element . kind Ġ== ĠElement Kind . FIELD Ġ|| Ġen closed Element . kind Ġ== ĠElement Kind . METHOD )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname Ġ= Ġen closed Element . simple Name . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . startsWith (" set ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Set . add ( Word Utils . unc ap ital ize ( name . replace (" set ", Ġ" "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( name . startsWith (" get ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Set . add ( Word Utils . unc ap ital ize ( name . replace (" get ", Ġ" "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Set . add ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġabstract Set ĊĠĠĠ Ġ} Ċ } Ċ