/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 - 2 0 2 2 ĠB os ch . IO ĠGmbH Ċ Ġ* Ċ Ġ* ĠLicensed Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġorg . oss review toolkit . helper . commands Ċ Ċ import Ġcom . github . aj alt . cli kt . core . Cli kt Command Ċ import Ġcom . github . aj alt . cli kt . core . Usage Error Ċ import Ġcom . github . aj alt . cli kt . parameters . options . convert Ċ import Ġcom . github . aj alt . cli kt . parameters . options . default Ċ import Ġcom . github . aj alt . cli kt . parameters . options . flag Ċ import Ġcom . github . aj alt . cli kt . parameters . options . option Ċ import Ġcom . github . aj alt . cli kt . parameters . options . required Ċ import Ġcom . github . aj alt . cli kt . parameters . types . enum Ċ import Ġcom . github . aj alt . cli kt . parameters . types . file Ċ Ċ import Ġjava . util . regex . Pattern Ċ Ċ import Ġorg . oss review toolkit . analyzer . Analyzer Result Builder Ċ import Ġorg . oss review toolkit . model . Analyzer Result Ċ import Ġorg . oss review toolkit . model . Or t Result Ċ import Ġorg . oss review toolkit . model . Project Analyzer Result Ċ import Ġorg . oss review toolkit . model . readValue Ċ import Ġorg . oss review toolkit . model . utils . Dependency Graph Converter Ċ import Ġorg . oss review toolkit . model . writeValue Ċ import Ġorg . oss review toolkit . model . yaml Mapper Ċ import Ġorg . oss review toolkit . utils . common . expand T ilde Ċ Ċ /** Ċ Ġ* ĠA Ġcommand Ġto Ġconvert Ġthe Ġdependency Ġrepresentation Ġin Ġan ĠOR T Ġresult Ġfile Ġbetween Ġthe Ġdifferent Ġsupported Ġformats . Ċ Ġ* Ċ Ġ* ĠThe Ġinput Ġfile Ġcan Ġcontain Ġthe Ġserialized Ġform Ġof Ġeither Ġa Ġfull Ġ[ Or t Result ], Ġan Ġ[ Analyzer Result ], Ġor Ġa Ġsingle Ċ Ġ* Ġ[ Project Analyzer Result ]. ĠIf Ġone Ġof Ġthe Ġsupported Ġresults Ġis Ġfound , Ġit Ġis Ġconverted Ġto Ġthe Ġspecified Ġtarget Ġformat . Ċ Ġ* ĠIf Ġthis Ġtarget Ġformat Ġis Ġalready Ġused , Ġthen Ġthis Ġcommand Ġdoes Ġnothing . Ċ Ġ* Ċ Ġ* ĠThis Ġcommand Ġis Ġalso Ġintended Ġto Ġbe Ġused Ġfor Ġconverting Ġfiles Ġwith Ġexpected Ġresults Ġfor ĠOR T Ġtests . ĠSuch Ġresult Ċ Ġ* Ġfiles Ġcan Ġcontain Ġplaceholders , Ġwhich Ġmake Ġthem Ġinvalid Ġ( e . g . Ġa Ġplaceholder Ġfor Ġa Ġnumeric Ġvalue Ġcauses Ġserialization Ċ Ġ* Ġto Ġfail ). ĠTherefore , Ġa Ġspecial Ġmode Ġcan Ġbe Ġenabled , Ġin Ġwhich Ġwell - known Ġplaceholders Ġare Ġhandled . Ċ Ġ*/ Ċ class ĠSet Dependency Representation Command Ġ: ĠCli kt Command ( ĊĠĠĠ Ġhelp Ġ= Ġ" Set Ġthe Ġdependency Ġrepresentation Ġof Ġan ĠOR T Ġresult Ġto Ġa Ġspecific Ġtarget Ġformat ." Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġenumeration Ġclass Ġrepresenting Ġthe Ġdifferent Ġsupported Ġformats Ġto Ġrepresent Ġdependencies Ġin Ġan ĠOR T Ġresult . ĊĠĠĠĠ Ġ* ĠIt Ġis Ġused Ġto Ġdefine Ġthe Ġtarget Ġformat Ġthat Ġshould Ġbe Ġset Ġby Ġthis Ġcommand . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠTarget Format Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġdependency Ġgraph Ġformat . Ġ*/ ĊĠĠĠĠĠĠĠ ĠGRAPH Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( result : ĠAnalyzer Result ): ĠAnalyzer Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Graph Converter . convert ( result ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġclassic Ġdependency Ġtree Ġformat . Ġ*/ ĊĠĠĠĠĠĠĠ ĠT REE Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( result : ĠAnalyzer Result ): ĠAnalyzer Result Ġ= Ġresult . with Resolved Scopes () ĊĠĠĠĠĠĠĠ Ġ}; ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConvert Ġthe Ġgiven Ġ[ result ] Ġto Ġthe Ġtarget Ġformat Ġdefined Ġby Ġthis Ġliteral . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġconvert ( result : ĠAnalyzer Result ): ĠAnalyzer Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġdata Ġclass Ġto Ġdescribe Ġthe Ġplaceholders Ġin Ġresult Ġfiles Ġthat Ġneeds Ġto Ġbe Ġhandled Ġby Ġthis Ġcommand . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġdata Ġclass ĠPlace holder Info ( ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġname Ġof Ġthe Ġproperty Ġwhose Ġvalue Ġis Ġa Ġplaceholder . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġproperty : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġname Ġof Ġthe Ġplaceholder . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġplaceholder : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġvalue Ġto Ġinsert Ġfor Ġthe Ġplaceholder Ġto Ġmake Ġthe Ġinput Ġfile Ġvalid ĠYAML . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġreplacement : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġlist Ġof Ġ[ Placeholder Info ] Ġobjects Ġthat Ġare Ġhandled Ġduring Ġprocessing . ĠThis Ġis Ġa Ġsubset Ġof Ġthe Ġplaceholders ĊĠĠĠĠ Ġ* Ġused Ġby Ġexpected Ġtest Ġresults Ġin Ġfunctional Ġtests . ĠIt Ġcontains Ġthose Ġplaceholders Ġthat Ġprevent Ġthe ĊĠĠĠĠ Ġ* Ġde serialization Ġof Ġa Ġresult Ġfile , Ġas Ġtheir Ġname Ġcannot Ġbe Ġassigned Ġto Ġthe Ġproperty Ġthey Ġare Ġassociated Ġwith . ĊĠĠĠĠ Ġ* Ġ( This Ġis Ġtypically Ġthe Ġcase Ġfor Ġnumeric Ġproperties Ġthat Ġcannot Ġhave Ġstring Ġvalues ; Ġbut Ġother Ġdata Ġtypes ĊĠĠĠĠ Ġ* Ġrequiring Ġa Ġspecial Ġsemantic Ġof Ġstring Ġvalues Ġmay Ġbe Ġaffected Ġas Ġwell .) ĠThe Ġplaceholders Ġlisted Ġhere Ġare ĊĠĠĠĠ Ġ* Ġreplaced Ġby Ġun problem atic Ġvalues Ġbefore Ġloading Ġthe Ġresult Ġfile Ġand Ġlater Ġrestored Ġagain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġtyped Place holders Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠPlace holder Info (" processors ", Ġ" REPLACE _ PROCESS ORS ", Ġ" 1 1 "), ĊĠĠĠĠĠĠĠ ĠPlace holder Info (" max _ memory ", Ġ" REPLACE _ MAX _ MEMORY ", Ġ" 1 2 3 4 ") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġort File Ġby Ġoption ( ĊĠĠĠĠĠĠĠ Ġ"-- ort - file ", Ġ"- i ", ĊĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" The ĠOR T Ġresult Ġfile Ġto Ġread Ġas Ġinput . ĠThis Ġcan Ġbe Ġthe Ġserialized Ġform Ġof Ġan ĠO rt Result , Ġan Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Analyzer Result , Ġor Ġa ĠProject Analyzer Result . ĠNOTE : ĠIf Ġno Ġoutput Ġfile Ġis Ġspecified , Ġthis Ġfile Ġis Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" over written ." ĊĠĠĠ Ġ). convert Ġ{ Ġit . expand T ilde () Ġ} ĊĠĠĠĠĠĠĠ Ġ. file ( must Exist Ġ= Ġtrue , Ġcan Be File Ġ= Ġtrue , Ġcan Be Dir Ġ= Ġfalse , Ġmust Be Writable Ġ= Ġfalse , Ġmust Be Readable Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ. convert Ġ{ Ġit . absolute File . normalize () Ġ} ĊĠĠĠĠĠĠĠ Ġ. required () ĊĊĠĠĠ Ġprivate Ġval ĠoutputFile Ġby Ġoption ( ĊĠĠĠĠĠĠĠ Ġ"-- output - file ", Ġ"- o ", ĊĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" The Ġfile Ġin Ġwhich Ġto Ġwrite Ġthe Ġresult Ġof Ġthe Ġconversion . ĠIf Ġmissing , Ġthe Ġinput Ġfile Ġis Ġoverwritten ." ĊĠĠĠ Ġ). convert Ġ{ Ġit . expand T ilde () Ġ} ĊĠĠĠĠĠĠĠ Ġ. file ( must Exist Ġ= Ġfalse , Ġcan Be File Ġ= Ġtrue , Ġcan Be Dir Ġ= Ġfalse , Ġmust Be Writable Ġ= Ġfalse , Ġmust Be Readable Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ. convert Ġ{ Ġit . absolute File . normalize () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtarget Format Ġby Ġoption ( ĊĠĠĠĠĠĠĠ Ġ"-- format ", Ġ"- f ", ĊĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" The Ġtarget Ġformat Ġfor Ġthe Ġconversion ." ĊĠĠĠ Ġ). enum < Target Format >(). default ( Target Format . GRAPH ) ĊĊĠĠĠ Ġprivate Ġval Ġhandle Place holders Ġby Ġoption ( ĊĠĠĠĠĠĠĠ Ġ"-- placeholders ", Ġ"- p ", ĊĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" Handles Ġspecial Ġplaceholders Ġin Ġthe Ġinput Ġfile Ġthat Ġare Ġused Ġby ĠOR T Ġfunctional Ġtests ." ĊĠĠĠ Ġ). flag ("-- no - placeholders ", Ġ"- P ") ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverter s Ġ= Ġsequence Of (:: convert Or t Result , Ġ:: convert Analyzer Result , Ġ:: convert Project Analyzer Result ) ĊĠĠĠĠĠĠĠ Ġconverter s . map NotNull Ġ{ Ġit () Ġ}. first OrNull ()?. let Ġ{ Ġwrite Result ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUsage Error ("$ ort File Ġdoes Ġnot Ġcontain Ġa Ġsupported Ġresult .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġa Ġfull ĠOR T Ġresult Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconvert Or t Result (): ĠAny ? Ġ= ĊĠĠĠĠĠĠĠ Ġconvert Result < Or t Result > Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Con verting Ġa Ġfull ĠOR T Ġresult Ġfile .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertTo Target ( result . analyzer ?. result )?. let Ġ{ Ġanalyzer Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer Ġ= Ġresult . analyzer ?. copy ( result Ġ= Ġanalyzer Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġan Ġ[ Analyzer Result ] Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconvert Analyzer Result (): ĠAny ? Ġ= ĊĠĠĠĠĠĠĠ Ġconvert Result < Analyzer Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Con verting Ġan Ġanalyzer Ġresult Ġfile .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertTo Target ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġa Ġ[ Project Analyzer Result ]. ĠIn Ġthis Ġcase , Ġthe Ġresult Ġfile Ġcontains Ġan Ġ[ Analyzer Result ], Ġas Ġa ĊĠĠĠĠ Ġ* Ġ[ Project Analyzer Result ] Ġdoes Ġnot Ġcontain Ġa Ġdependency Ġgraph . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconvert Project Analyzer Result (): ĠAny ? Ġ= ĊĠĠĠĠĠĠĠ Ġconvert Result < Project Analyzer Result > Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Con verting Ġa Ġproject Ġanalyzer Ġresult Ġfile .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalyzer Result Ġ= ĠAnalyzer Result Builder (). add Result ( result ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertTo Target ( analyzer Result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġa Ġresult Ġof Ġtype Ġ[ T ]. ĠRead Ġthis Ġresult Ġfrom Ġthe Ġinput Ġfile Ġand Ġinvoke Ġ[ block ] Ġwith Ġit . ĠReturn Ġ* false * ĊĠĠĠĠ Ġ* Ġif Ġthe Ġresult Ġfile Ġcould Ġnot Ġbe Ġloaded Ġ( which Ġprobably Ġmeans Ġthat Ġit Ġcontains Ġa Ġresult Ġof Ġa Ġdifferent Ġtype ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġconvert Result ( block : Ġ( T ) Ġ-> ĠAny ?): ĠAny ? Ġ= ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( read Input ()) ĊĠĠĠĠĠĠĠ Ġ}. get OrNull () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAttempt Ġto Ġdeserialize Ġthe Ġinput Ġfile Ġto Ġthe Ġresult Ġtype Ġ[ T ]. ĠHandle Ġplaceholders Ġif Ġenabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġread Input (): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( handle Place holders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Text Ġ= Ġreplace Place holders ( ort File . read Text (), Ġinput Placeholder Replacement s ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyaml Mapper . readValue ( result Text , ĠT :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġort File . readValue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġthe Ġgiven Ġ[ analyzer Result ] Ġto Ġthe Ġselected Ġtarget Ġformat Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠconvertTo Target ( analyzer Result : ĠAnalyzer Result ?): ĠAnalyzer Result ? Ġ= ĊĠĠĠĠĠĠĠ Ġanalyzer Result ?. let ( target Format :: convert ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrite Ġthe Ġresult Ġof Ġthe Ġconversion Ġto Ġthe Ġconfigured Ġoutput Ġfile . ĠIf Ġno Ġoutput Ġfile Ġwas Ġspecified , Ġoverwrite Ġthe ĊĠĠĠĠ Ġ* Ġinput Ġfile . ĠIf Ġnecessary , Ġrestore Ġplaceholders . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġwrite Result ( result : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget File Ġ= ĠoutputFile Ġ?: Ġort File ĊĊĠĠĠĠĠĠĠ Ġprintln (" Writing Ġconverted Ġresult Ġto Ġ$ target File .") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( handle Place holders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyaml Ġ= Ġyaml Mapper . writeValue AsString ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġreplace Place holders ( yaml , Ġoutput Placeholder Replacement s ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget File . write Text ( text ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget File . writeValue ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReplace Ġplaceholders Ġin Ġthe Ġgiven Ġ[ text ] Ġbased Ġon Ġthe Ġprovided Ġ[ replacement ] Ġinformation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġreplace Place holders ( text : ĠString , Ġreplacement : ĠCollection < Pair < Regex , ĠString >> ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġreplacement . fold ( text ) Ġ{ Ġs , Ġreplace Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs . replace ( replace . first , Ġreplace . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġa Ġcollection Ġwith Ġreplacement Ġinformation Ġto Ġreplace Ġcritical Ġplaceholders Ġin Ġthe Ġinput Ġfile Ġby Ġvalues ĊĠĠĠĠ Ġ* Ġthat Ġdo Ġnot Ġcause Ġproblems Ġduring Ġde serialization . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinput Placeholder Replacement s (): ĠList < Pair < Regex , ĠString >> Ġ= ĊĠĠĠĠĠĠĠ Ġtyped Place holders . map Ġ{ Ġreplacement ( it . property , Ġit . placeholder . to Placeholder (), Ġit . replacement ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġa Ġcollection Ġwith Ġreplacement Ġinformation Ġto Ġrestore Ġthe Ġoriginal Ġplaceholders Ġwhen Ġwriting Ġthe Ġprocessed ĊĠĠĠĠ Ġ* Ġresult Ġto Ġthe Ġoutput Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġoutput Placeholder Replacement s (): ĠList < Pair < Regex , ĠString >> Ġ= ĊĠĠĠĠĠĠĠ Ġtyped Place holders . map Ġ{ Ġreplacement ( it . property , Ġit . replacement , Ġit . placeholder . to Placeholder ()) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠQuote Ġthis Ġstring , Ġso Ġthat Ġit Ġcan Ġbe Ġused Ġsafely Ġin Ġa Ġregular Ġexpression . Ċ Ġ*/ Ċ private Ġfun ĠString . quote (): ĠString Ġ= ĠPattern . quote ( this ) Ċ Ċ /** Ċ Ġ* ĠConvert Ġthis Ġstring Ġto Ġa Ġplaceholder Ġfor Ġa Ġproperty Ġvalue Ġin Ġa ĠYAML Ġfile Ġwith Ġexpected Ġtest Ġresults . Ċ Ġ*/ Ċ private Ġfun ĠString . to Placeholder (): ĠString Ġ= Ġ"\" <$ this >\ "" Ċ Ċ /** Ċ Ġ* ĠGenerate Ġa Ġ[ Regex ] Ġthat Ġmatches Ġa Ġspecific Ġproperty Ġin Ġa ĠYAML Ġfile Ġwith Ġthe Ġgiven Ġ[ name ] Ġand Ġ[ expected Value ]. Ċ Ġ*/ Ċ private Ġfun Ġmatch Property ( name : ĠString , Ġexpected Value : ĠString ): ĠRegex Ġ= ĊĠĠĠ Ġ""" (${ name . quote ()} :\ s *) ${ expected Value . quote ()} """. to Regex () Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġ[ Pair ] Ġwith Ġa Ġ[ Regex ] Ġand Ġa Ġreplacement Ġstring Ġthat Ġcan Ġbe Ġused Ġto Ġreplace Ġthe Ġ[ oldValue ] Ġof Ġa Ġ[ property ] Ċ Ġ* Ġin Ġa ĠYAML Ġfile Ġwith Ġa Ġ[ newValue ]. Ċ Ġ*/ Ċ private Ġfun Ġreplacement ( property : ĠString , ĠoldValue : ĠString , ĠnewValue : ĠString ): ĠPair < Regex , ĠString > Ġ= ĊĠĠĠ Ġmatch Property ( property , ĠoldValue ) Ġto Ġ"$ 1 $ newValue " Ċ