/* Ċ Ġ* ĠĠĠĠĠ ĠK W Commands Ġ- ĠNew Ġgeneration Ġof ĠW Commands Ġwritten Ġin ĠKotlin Ġ< https :// github . com / Jon athan xD / KW Commands > Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠJon athan xD Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* ĠĠĠĠĠ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* ĠĠĠĠĠ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* ĠĠĠĠĠ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* ĠĠĠĠĠ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* ĠĠĠĠĠ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* ĠĠĠĠĠ Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠĠĠĠĠ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠĠĠĠĠ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠĠĠĠĠ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠĠĠĠĠ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠĠĠĠĠ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . github . jon athan xd . kw commands . reflect . annotation Ċ Ċ import Ġcom . github . jon athan xd . kw commands . argument . Argument Handler Ċ import Ġcom . github . jon athan xd . kw commands . argument . Argument Type Ċ import Ġcom . github . jon athan xd . kw commands . reflect . None Argument Handler Ċ import Ġcom . github . jon athan xd . kw commands . reflect . None Argument Type Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠArgument Ġspecification . Ċ Ġ* Ċ Ġ* ĠBy Ġdefault , Ġ[ argument Type ] Ġis Ġdetermined Ġdepending Ġon Ġtype Ġof Ġannotated Ġelement Ċ Ġ* Ġand Ġ[ handler ] Ġis Ġdetermined Ġby Ġdefault Ġby Ġthe Ġreflection Ġsystem Ġbased Ġon Ġtype Ġand Ġin Ġregistered . Ċ Ġ* Ċ Ġ* ĠWhen Ġadded Ġto Ġa Ġfield , Ġthe Ġfield Ġvalue Ġwill Ġbe Ġreplaced Ġby Ġthe Ġvalue Ġparsed Ġfrom Ġdis patched Ġcommands . Ċ Ġ* ĠThis Ġannotation Ġonly Ġhave Ġeffects Ġin Ġfields Ġwhen Ġthe Ġen closing Ġclass Ġis Ġannotated Ġwith Ġ[ Cmd ] Ġand Ġthere Ġis Ċ Ġ* Ġno Ġfunction Ġannotated Ġwith Ġ[ Cmd Handler ] Ġin Ġthe Ġclass . Ċ Ġ* Ċ Ġ* Ġ@ property Ġvalue ĠIdent ification Ġand Ġname Ġof Ġargument . Ġ( defaults Ġto Ġannotated Ġelement Ġname ) Ċ Ġ* Ġ@ property Ġalias ĠAlias Ġto Ġargument . Ċ Ġ* Ġ@ property Ġdescription ĠArgument Ġdescription . Ċ Ġ* Ġ@ property Ġoptional ĠWhether Ġthis Ġargument Ġis Ġoptional Ċ Ġ* Ġ@ property Ġrequirements ĠRequirements Ġof Ġthe Ġargument . Ċ Ġ* Ġ@ property Ġargument Type ĠType Ġof Ġargument . Ġ( by Ġdefault Ġis Ġdetermined Ġby ĠReflection ĠEnvironment ) Ċ Ġ* Ġ@ property Ġhandler ĠArgument Ġhandler Ġ( if Ġthis Ġannotated Ġelement Ġis Ġa Ġfield , Ġan Ġfield Ġsetter Ġhandler Ġwill Ċ Ġ* Ġbe Ġused Ġas Ġdefault Ġhandler Ġinstead Ġof Ġ[ None Argument Handler ]) Ġ(** this Ġproperty Ġoverrides Ġdefault Ġhandler ** ). Ċ Ġ*/ Ċ @ Retention ( Annotation Retention . RUNTIME ) Ċ @ Target ( Annotation Target . VALUE _ PARAMETER , ĠAnnotation Target . FIELD ) Ċ annotation Ġclass ĠArg ( ĊĠĠĠ Ġval Ġvalue : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġname Component : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġalias : ĠArray < String > Ġ= Ġ[], ĊĠĠĠ Ġval Ġalias Component : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġdescription : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġoptional : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġrequirements : ĠArray < Require > Ġ= Ġ[], ĊĠĠĠ Ġval Ġargument Type : ĠK Class < out Ġ() Ġ-> ĠArgument Type < *, Ġ* >> Ġ= ĠNone Argument Type :: class , ĊĠĠĠ Ġval Ġhandler : ĠK Class < out ĠArgument Handler <* >> Ġ= ĠNone Argument Handler :: class Ċ ) Ċ