/* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġ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 Ġorg . apache . t inker pop 4 . gre mlin . js r 2 2 3 Ċ Ċ import Ġjava . lang . reflect . Field Ċ Ċ /** Ċ Ġ* ĠA Ġmodule Ġthat Ġallows Ġcustom Ġclass , Ġstatic Ġmethod Ġand Ġenum Ġimports Ġ( i . e . Ġthose Ġthat Ġare Ġstatic ally Ġdefined Ġby Ġa Ċ Ġ* Ġmodule Ġwithin Ġitself ). ĠA Ġuser Ġmight Ġutilize Ġthis Ġclass Ġto Ġsupply Ġtheir Ġown Ġimports . ĠThis Ġmodule Ġis Ġnot Ġspecific Ċ Ġ* Ġto Ġany Ġ[ G re mlin Script Engine ] Ġ- Ġthe Ġimports Ġare Ġsupplied Ġto Ġall Ġengines . ĠThis Ġ[ G re mlin Plugin ] Ġis Ġnot Ċ Ġ* Ġenabled Ġfor Ġthe Ġ` Service Loader `. ĠIt Ġis Ġdesigned Ġto Ġbe Ġinstantiated Ġmanually . Ċ Ġ* Ċ Ġ* Ġ@ author ĠSte phen ĠM allet te Ġ( http :// ste phen . gen op ri me . com ) Ċ Ġ*/ Ċ class ĠImport G re mlin Plugin Ġprivate Ġconstructor ( builder : ĠBuilder ?) Ġ: ĠAbstract G re mlin Plugin ( ĊĠĠĠ ĠNAME , Ġbuilder !!. app lies To , ĠDefault Import Customizer . build () ĊĠĠĠĠĠĠĠ Ġ. addClass Imports ( builder !!. class Imports ) ĊĠĠĠĠĠĠĠ Ġ. add Enum Imports ( builder . enum Imports ) ĊĠĠĠĠĠĠĠ Ġ. add Method Imports ( builder . method Imports ) ĊĠĠĠĠĠĠĠ Ġ. addField Imports ( builder . field Imports ). create () Ċ ) Ġ{ ĊĠĠĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Imports : ĠSet < Field ?> ? Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġval Ġclass Imports : ĠSet < Class ?> ? Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġval Ġmethod Imports : ĠSet < Method ?> ? Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġval Ġenum Imports : ĠSet < Enum ?> ? Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapplies To : ĠSet < String ?> ? Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġthe Ġ[ G re mlin Script Engine ] Ġthat Ġthis Ġmodule Ġwill Ġapply Ġto . ĠSetting Ġno Ġvalues Ġhere Ġwill ĊĠĠĠĠĠĠĠĠ Ġ* Ġmake Ġthe Ġmodule Ġavailable Ġto Ġall Ġthe Ġengines . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġapplies To ( script Engine Name : ĠCollection < String ?> ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplies To . addAll ( script Engine Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclass Imports ( var arg Ġclasses : ĠClass < *> ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Imports . addAll ( Arrays . asList ( classes )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclass Imports ( classes : ĠCollection < String ?> ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġclasses !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Imports . add ( Class . forName ( clazz )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmethod Imports ( methods : ĠCollection < String ?> ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġmethods !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method . endsWith ("# * ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass String : ĠString Ġ= Ġmethod . substring ( 0 , Ġmethod !!. length () Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= ĠClass . forName ( class String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Imports . addAll ( all Static Methods ( clazz )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher : ĠMatcher Ġ= ĠMETHOD _ PATTERN . matcher ( method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! matcher . matches ()) Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġread Ġmethod Ġdescriptor Ġ- Ġcheck Ġformat Ġof : Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass String : ĠString Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod String : ĠString Ġ= Ġmatcher . group ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg String : ĠString Ġ= Ġmatcher . group ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= ĠClass . forName ( class String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Imports . add ( clazz . getMethod ( method String , Ġparse ( arg String ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ia e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġi ae ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmethod Imports ( var arg Ġmethods : ĠMethod ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Imports . addAll ( Arrays . asList ( methods )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġenum Imports ( enums : ĠCollection < String ?> ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( enum Item Ġin Ġenums !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enum Item . endsWith ("# * ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass String : ĠString Ġ= Ġenum Item . substring ( 0 , Ġenum Item !!. length () Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= ĠClass . forName ( class String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum Imports . addAll ( all Enums ( clazz )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher : ĠMatcher Ġ= ĠEN UM _ PATTERN . matcher ( enum Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! matcher . matches ()) Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġread Ġenum Ġdescriptor Ġ- Ġcheck Ġformat Ġof : Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass String : ĠString Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenum Val String : ĠString Ġ= Ġmatcher . group ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= ĠClass . forName ( class String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStream . of ( clazz . get Enum Constants ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġe Ġ-> Ġ( e Ġas ĠEnum ). name (). equals ( enum Val String ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst (). if Present Ġ{ Ġe Ġ-> Ġenum Imports . add ( e Ġas ĠEnum ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ia e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġi ae ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġenum Imports ( var arg Ġenums : ĠEnum ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenum Imports . addAll ( Arrays . asList ( enums )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfields Imports ( fields : ĠCollection < String ?> ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Item Ġin Ġfields !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Item . endsWith ("# * ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass String : ĠString Ġ= Ġfield Item . substring ( 0 , Ġfield Item !!. length () Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= ĠClass . forName ( class String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Imports . addAll ( all StaticFields ( clazz )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher : ĠMatcher Ġ= ĠEN UM _ PATTERN . matcher ( field Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! matcher . matches ()) Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġread Ġfield Ġdescriptor Ġ- Ġcheck Ġformat Ġof : Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass String : ĠString Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName : ĠString Ġ= Ġmatcher . group ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= ĠClass . forName ( class String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Imports . add ( clazz . getField ( fieldName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ia e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġi ae ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfields Imports ( var arg Ġfields : ĠField ?): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Imports . addAll ( Arrays . asList ( fields )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate (): ĠImport G re mlin Plugin ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enum Imports !!. isEmpty () Ġ&& Ġclass Imports !!. isEmpty () Ġ&& Ġmethod Imports !!. isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġfield Imports !!. isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġthrow ĠIllegalStateException (" At Ġleast Ġone Ġimport Ġmust Ġbe Ġspecified ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠImport G re mlin Plugin ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠMETHOD _ PATTERN : ĠPattern ? Ġ= ĠPattern . compile ("( .* )# (.* )\\ (( .* )\\ )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠEN UM _ PATTERN : ĠPattern ? Ġ= ĠPattern . compile ("( .* )# (.* )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġall Enums ( clazz : ĠClass < *> ?): ĠList < Enum ?> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStream . of ( clazz . get Enum Constants ()). map Ġ{ Ġe Ġ-> Ġe Ġ}. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġall Static Methods ( clazz : ĠClass < *> ?): ĠList < Method ?> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStream . of ( clazz . get Methods ()). filter Ġ{ Ġm Ġ-> ĠModifier . is Static ( m . get Modifiers ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġall StaticFields ( clazz : ĠClass < *> ?): ĠList < Field ?> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStream . of ( clazz . get Fields ()). filter Ġ{ Ġf Ġ-> ĠModifier . is Static ( f . get Modifiers ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse ( arg String : ĠString ?): ĠArray < Class < *> ?> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġarg String Ġ|| Ġarg String . isEmpty ()) Ġreturn ĠarrayOf Null s < Class < *> ? >( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs : ĠList < String ?> Ġ= ĠStream . of ( arg String . split ("," )). map ( String :: trim ). collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclasses : ĠArray < Class < *> ?> Ġ= ĠarrayOf Null s < Class < *> ? >( args . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ix Ġin Ġ 0 Ġuntil Ġargs . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasses [ ix ] Ġ= ĠClass . forName ( args [ ix ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclasses ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNAME : ĠString ? Ġ= Ġ" t inker pop . import " ĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠBuilder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBuilder () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }