/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin Ċ Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* ĠCreates Ġfiles Ġfrom Ġthe Ġgiven Ġsource Ġfile Ġthat Ġmay Ġcontain Ġdifferent Ġtest Ġdirectives . Ċ Ġ* Ċ Ġ* Ġ@ return Ġlist Ġof Ġfile Ġnames Ġto Ġbe Ġcompiled Ċ Ġ*/ Ċ fun ĠKon an Test . build Compile List ( output Directory : ĠString ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġval Ġsrc File Ġ= Ġproject . file ( source ) ĊĠĠĠ Ġ// ĠRemove Ġdiagnostic Ġparameters Ġin Ġexternal Ġtests . ĊĠĠĠ Ġval Ġsrc Text Ġ= Ġsrc File . read Text (). replace ( Regex (" <! .*? ! >( .* ?) <! > ")) Ġ{ Ġmatch Ġ-> Ġmatch . group Values [ 1 ] Ġ} ĊĊĠĠĠ Ġif Ġ( src Text . contains ("// ĠWITH _ COR OUT IN ES ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoroutine Helpers FileName Ġ= Ġ"$ output Directory / helpers . kt " ĊĠĠĠĠĠĠĠ Ġcreate File ( coroutine Helpers FileName , Ġcreate Text For Helpers ( true )) ĊĠĠĠĠĠĠĠ Ġresult . add ( coroutine Helpers FileName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfile Pattern Ġ= ĠPattern . compile (" (? m )// Ġ* FILE : Ġ*( .* )") ĊĠĠĠ Ġval Ġmatcher Ġ= Ġfile Pattern . matcher ( src Text ) ĊĊĠĠĠ Ġif Ġ(! matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThere Ġis Ġonly Ġone Ġfile Ġin Ġthe Ġinput ĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ"$ output Directory /${ src File . name }" ĊĠĠĠĠĠĠĠ Ġregister Kt File ( result , ĠfilePath , Ġsrc Text ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThere Ġare Ġseveral Ġfiles ĊĠĠĠĠĠĠĠ Ġvar Ġprocessed Chars Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ"$ output Directory /${ matcher . group ( 1 )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġprocessed Chars ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext File Exists Ġ= Ġmatcher . find () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġif Ġ( next File Exists ) Ġmatcher . start () Ġelse Ġsrc Text . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġsrc Text . substring ( start , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Chars Ġ= Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Kt File ( result , ĠfilePath , Ġfile Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! next File Exists ) Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ internal Ġfun Ġcreate File ( file : ĠString , Ġtext : ĠString ) Ġ= ĠPaths . get ( file ). run Ġ{ ĊĠĠĠ Ġparent . to File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Unless Ġ{ Ġit . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . mkdir s () ĊĠĠĠ Ġto File (). write Text ( text ) Ċ } Ċ Ċ internal Ġfun Ġregister Kt File ( source Files : ĠMutable List < String >, Ġnew FilePath : ĠString , Ġnew FileContent : ĠString ) Ġ{ ĊĠĠĠ Ġcreate File ( new FilePath , Ġnew FileContent ) ĊĠĠĠ Ġif Ġ( new FilePath . endsWith (". kt ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Files . add ( new FilePath ) ĊĠĠĠ Ġ} Ċ } Ċ