package Ġkim . je ong hy eon . simple architecture . plugin . model Ċ Ċ import Ġkotlin . reflect . K Class Ċ Ċ interface ĠShared Kt File Ġ{ ĊĠĠĠ Ġfun Ġget Children Of Kt Class (): ĠArray < Shared Kt Class > ĊĠĠĠ Ġval Ġpackage Fq Name : ĠString ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġhas Import ( clazz : ĠK Class < T >): ĠBoolean Ċ } Ċ Ċ interface ĠShared Kt Class Ġ{ ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġfun Ġis Interface (): ĠBoolean ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Annotation String ( clazz : ĠK Class < T >): ĠString ? // ex ) Ġ@ Api (" ds fd sf ") ĊĠĠĠ Ġval ĠpackageName : ĠString ? Ġ// Ġex ) Ġkim . je ong hy eon . test ĊĠĠĠ Ġval Ġimport Source Code : ĠString ĊĊĠĠĠ Ġval Ġfunctions : ĠList < Shared Kt Named Function > ĊĠĠĠ Ġval Ġproperties : ĠList < Shared Kt Property > ĊĠĠĠ Ġval Ġsuper Type Text : ĠString ? ĊĊĠĠĠ Ġval Ġcontaining Kt File : ĠShared Kt File ĊĊĠĠĠ Ġfun Ġhas Companion PropertyName ( propertyName : ĠString ): ĠBoolean ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġhas Annotation ( clazz : ĠK Class < T >): ĠBoolean Ġ= Ġget Annotation String ( clazz ) Ġ!= Ġnull Ċ } Ċ Ċ interface ĠShared Kt Named Function Ġ{ ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġval Ġkt Class : ĠShared Kt Class ? ĊĠĠĠ Ġval Ġname And Prefix : ĠString ĊĠĠĠ Ġval Ġparameters : ĠArray < Shared Kt Parameter > ĊĠĠĠ Ġfun Ġhas Body (): ĠBoolean ĊĠĠĠ Ġfun Ġis Suspend (): ĠBoolean ĊĠĠĠ Ġval Ġreturn TypeName : ĠString ? ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Annotation String ( clazz : ĠK Class < T >): ĠString ? // ex ) Ġ@ Api (" ds fd sf ") Ċ } Ċ Ċ interface ĠShared Kt Property Ġ{ ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġval Ġkt Class : ĠShared Kt Class ? ĊĠĠĠ Ġfun Ġhas Body (): ĠBoolean ĊĠĠĠ Ġval Ġreturn TypeName : ĠString ? ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Annotation String ( clazz : ĠK Class < T >): ĠString ? // ex ) Ġ@ Api (" ds fd sf ") Ċ } Ċ Ċ interface ĠShared Kt Parameter Ġ{ ĊĠĠĠ Ġval Ġtype : ĠString ĊĠĠĠ Ġval Ġname : ĠString ? ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Annotation String ( clazz : ĠK Class < T >): ĠString ? // ex ) Ġ@ Api (" ds fd sf ") Ċ Ċ } ĊĊĊ Ċ /** Ċ Ġ* Ġ@ Api (" dd sf ", Ġtrue ) Ġ==> Ġ" dd sf ", Ġtrue Ċ Ġ*/ Ċ fun ĠString . trim Parent hesis (): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġparent hesis StartIndex Ġ= ĠindexOf (" (" ) ĊĠĠĠ Ġval Ġparent hesis End Index Ġ= Ġlast IndexOf (" )") ĊĠĠĠ Ġif Ġ( parent hesis StartIndex Ġ== Ġ- 1 Ġ|| Ġparent hesis End Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġsubstring ( parent hesis StartIndex Ġ+ Ġ 1 , Ġparent hesis End Index ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ 1 . Ġ" ddd ", Ġtrue Ġ=> Ġ" ddd " Ċ Ġ* Ġ 2 . Ġpath : Ġ" ddd ", Ġencoded : Ġtrue Ċ Ġ* Ċ Ġ* Ġtodo Ġfrom Ġ 1 . 4 , ĠMix ing Ġnamed Ġand Ġpositional Ġarguments Ġis Ġsupported .( https :// kotlin lang . org / docs / reference / whats new 1 4 . html # mix ing - named - and - positional - arguments ) Ċ Ġ*/ Ċ fun ĠString . getParameter String ( name : ĠString , Ġindex : ĠInt ): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġparams Ġ= Ġsplit (",") // todo Ġneed Ġto Ġimprove Ġlogic Ġto Ġsplit Ġparams ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . trim () Ġ} ĊĊĠĠĠ Ġval Ġnamed Parameter Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġ// has Ġparameter Ġname . Ġtodo Ġneed Ġto Ġimprove Ġlogic Ġto Ġdetect Ġname Ġexists ĊĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . startsWith ( name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġit . trim ParameterName () Ġ} ĊĊĠĠĠ Ġif Ġ( named Parameter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnamed Parameter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġindex Name Exists Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġ// has Ġother Ġparameter Ġname . Ġtodo Ġneed Ġto Ġimprove Ġlogic Ġto Ġdetect Ġname Ġexists ĊĠĠĠĠĠĠĠ Ġ. indexOf First Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠindexOf Equal Ġ= Ġit . indexOf (" =") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġif Ġ'=' Ġexists Ġbefore Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠindexOf Equal Ġ!= Ġ- 1 Ġ Ġ&& ĠindexOf Equal Ġ< Ġit . indexOf ("\" ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( it Ġ== Ġ- 1 ) Ġparams . size Ġelse Ġit Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( index Ġ< Ġindex Name Exists ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( params [ index ]. isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġnull Ċ } Ċ Ċ /** Ċ Ġ* Ġpath : Ġ" ddd " Ġ=> Ġ" ddd " Ċ Ġ*/ Ċ fun ĠString . trim ParameterName (): ĠString Ġ= Ġsubstring After (" =" ). trim () Ċ Ċ /** Ċ Ġ* Ġ@ Api (" dd sf ", Ġtrue ) Ġ==> ĠApi Ċ Ġ*/ Ċ fun ĠString . getAnnotation Name (): ĠString Ġ{ ĊĠĠĠ Ġval Ġstart IndexOf Name Ġ= ĠindexOf ("@ ") ĊĠĠĠ Ġval Ġend IndexOf Name Ġ= Ġif Ġ( indexOf (" (" ) Ġ== Ġ- 1 ) Ġlength Ġelse ĠindexOf (" (" ) ĊĠĠĠ Ġif Ġ( start IndexOf Name Ġ== Ġ- 1 ) Ġerror (" annotation Ġstring Ġdoesn 't Ġcontains Ġ@ ") ĊĊĠĠĠ Ġreturn Ġsubstring ( start IndexOf Name Ġ+ Ġ 1 , Ġend IndexOf Name ). trim () Ċ }