/* Ċ Ġ* ĠCopyright Ġ 2 0 1 3 - 2 0 2 0 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġorg . springframework . cloud . contract . spec . internal Ċ Ċ import Ġorg . springframework . cloud . contract . spec . Contract Ċ import Ġorg . springframework . cloud . contract . spec . Contract Converter Ċ import Ġjava . io . File Ċ import Ġjava . net . URL ClassLoader . newInstance Ċ import Ġjavax . script . Script Engine Manager Ċ Ċ /** Ċ Ġ* ĠConverter Ġthat Ġwill Ġconvert Ġthe ĠKotlin ĠDSL Ġto ĠJava ĠDSL . Ċ Ġ* Ċ Ġ* Ġ@ author ĠTim ĠY se w yn Ċ Ġ* Ġ@ since Ġ 2 . 2 . 0 Ċ Ġ*/ Ċ class ĠKotlin Contract Converter Ġ: ĠContract Converter < List < Contract >> Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġext Ġ= Ġ" k ts " ĊĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSets Ġan Ġ{@ code Ġidea . use . native . fs . for . win } Ġsystem Ġproperty Ġto Ġ{@ code Ġfalse } ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġdisable Ġa Ġnative Ġengine Ġdiscovery Ġfor ĠWindows : Ġmay Ġbe Ġresolved Ġin Ġthe Ġfuture ĠKotlin Ġversions . ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" idea . use . native . fs . for . win ", Ġ" false ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Accepted ( file : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġext Ġ== Ġfile . extension ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert From ( file : ĠFile ): ĠCollection < Contract > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeval Ġ= Ġwith Updated Class loader ( file ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . reader (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġnew Ġengine Ġevery Ġtime Ġwe Ġneed Ġto Ġprocess Ġa Ġfile . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe using Ġthe Ġscript Ġengine Ġcould Ġleak Ġcontext Ġand Ġwill Ġfail Ġsubsequent Ġe vals ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScript Engine Manager (). get Engine By Extension ( ext ). eval ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( eval ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract Ġ-> ĠlistOf ( eval ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIterable < *> Ġ-> Ġeval . filter Is Instance ( Contract :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArray < *> Ġ-> Ġeval . filter Is Instance ( Contract :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠconvertTo ( contract : ĠCollection < Contract >) Ġ= Ġcontract . toList () ĊĊĠĠĠ Ġprivate Ġfun Ġwith Updated Class loader ( file : ĠFile , Ġblock : ĠClassLoader . () Ġ-> ĠAny ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent ClassLoader Ġ= ĠThread . currentThread (). context ClassLoader ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp ClassLoader Ġ= Ġnew Instance ( array Of ( file . parent File . to URI (). to URL ()), Ġcurrent ClassLoader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . currentThread (). context ClassLoader Ġ= Ġtemp ClassLoader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtemp ClassLoader . block () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . currentThread (). context ClassLoader Ġ= Ġcurrent ClassLoader ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }