/* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠDe fl ated Pick le Ġunder Ġthe ĠMIT Ġlicense Ġ*/ Ċ Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġcom . def lated pickle . mar vin . dsl Ċ Ċ import Ġcom . def lated pickle . mar vin . builder . Builder Ċ import Ġcom . def lated pickle . mar vin . builder . File Builder Ċ import Ġcom . def lated pickle . mar vin . builder . Node Holder Ċ import Ġjava . io . File Ċ Ċ @ Dsl Marker Ċ @ Target ( Annotation Target . TYPE , ĠAnnotation Target . CLASS ) Ċ annotation Ġclass ĠFile DSL Ċ Ċ data Ġclass ĠDSL File Node ( ĊĠĠĠ Ġprivate Ġvar Ġfile : ĠFile Ċ ) Ġ: ĠBuilder . Node < File > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget (): ĠFile Ġ= Ġthis . file ĊĊĠĠĠ Ġoperator Ġfun ĠString . unary Plus (): ĠFile Ġ= Ġfile . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("${ this @ unary Plus }\ n ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun ĠByteArray . unary Minus (): ĠFile Ġ= Ġfile . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Bytes ( this @ unary Minus ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFile Builder . file Node ( name : ĠString ): ĠDSL File Node Ġ= ĊĠĠĠ ĠDSL File Node ( ĊĠĠĠĠĠĠĠ ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Node . get (). absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} /$ name " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġnode List . add ( this ) ĊĠĠĠ Ġ} Ċ Ċ fun ĠFile Builder . dir Node ( name : ĠString ): ĠFile Builder . Directory Node Ġ= Ġdir ( name ). first Node Ċ Ċ fun Ġcab inet ( ĊĠĠĠ Ġdir : ĠString , ĊĠĠĠ Ġbuild : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġblock : Ġ(@ File DSL ĠFile Builder ). () Ġ-> ĠUnit Ċ ) Ġ= ĠFile Builder ( dir ). apply ( block ). apply Ġ{ ĊĠĠĠ Ġif Ġ( build ) Ġbuild () ĊĠĠĠ Ġelse Ġmake less Build () Ċ } Ċ Ċ fun ĠNode Holder < File , ĠFile Builder >. file ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġblock : Ġ(@ File DSL ĠDSL File Node ). () Ġ-> ĠUnit Ċ ) Ġ= Ġthis . builder . file Node ( name ). apply ( block ) Ċ Ċ fun ĠNode Holder < File , ĠFile Builder >. dir ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġbuild : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġblock : Ġ(@ File DSL ĠFile Builder . Directory Node ). () Ġ-> ĠUnit Ċ ) Ġ= Ġthis . builder . dir Node ( name ). apply ( block ). builder . apply Ġ{ ĊĠĠĠ Ġif Ġ( build ) Ġbuild () ĊĠĠĠ Ġelse Ġmake less Build () Ċ } Ċ