package Ġme . vin ic ius arn hold . alt aria . api Ċ Ċ import Ġcom . google . common . collect . Forwarding List Ċ import Ġcom . google . common . collect . ImmutableList Ċ import Ġjavax . annotation . concurrent . Immutable Ċ Ċ /** Ċ Ġ* Ġ@ author ĠV in ic ius ĠPe gor ini ĠAr n hold . Ċ Ġ*/ Ċ @ Immutable Ċ class ĠCommand Args ( args : ĠSequence < Arg >, Ġprivate Ġval Ġknown Parameters : ĠMap < String , ĠArg ?> ) Ġ: ĠForward ing List < Arg >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdelegate : ĠList < Arg > Ġ= ĠImmutableList . copyOf ( args . iterator ()) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( args : ĠSequence < Arg >): ĠCommand Args Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġknown Parameters Ġ= Ġmutable Map Of < String , ĠArg ?> () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġargs . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Parameter ( arg . value )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . hasNext () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Parameter ( next . value ) Ġ== Ġnull Ġ-> Ġknown Parameters . put ( it , Ġnext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġknown Parameters . put ( it , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġknown Parameters . put ( it , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCommand Args ( args , Ġknown Parameters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġto Parameter ( value : ĠString ): ĠString ? Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . startsWith ("-- ") Ġ-> Ġvalue . substring ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . startsWith ("- ") Ġ-> Ġvalue . substring ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelegate (): ĠList < Arg > Ġ= Ġdelegate ĊĊĠĠĠ Ġfun Ġhas Parameter ( parameter : ĠString ): ĠBoolean Ġ= Ġknown Parameters . containsKey ( parameter ) ĊĊĠĠĠ Ġfun Ġget Parameter Value ( parameter : ĠString ): ĠArg ? Ġ= Ġknown Parameters [ parameter ] Ċ }