/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// 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 . gradle . script . lang . kotlin . access ors Ċ Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . internal . project . Project Internal Ċ Ċ import Ġorg . gradle . cache . internal . CacheKey Builder . CacheKey Spec Ċ Ċ import Ġorg . gradle . internal . classpath . Class Path Ċ import Ġorg . gradle . internal . classpath . Default Class Path Ċ Ċ import Ġorg . gradle . script . lang . kotlin . cache . Script Cache Ċ import Ġorg . gradle . script . lang . kotlin . codegen . file Header Ċ import Ġorg . gradle . script . lang . kotlin . support . compile To Jar Ċ import Ġorg . gradle . script . lang . kotlin . support . logger For Ċ import Ġorg . gradle . script . lang . kotlin . support . service Of Ċ Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . File ĊĊ Ċ fun Ġaccessors Class Path For ( project : ĠProject , Ġclass Path : ĠClass Path ) Ġ= ĊĠĠĠ Ġproject . get OrCreate Singleton Property Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Accessors Class Path For ( project , Ġclass Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠAccess ors Class Path ( Class Path . EMPTY , ĠClass Path . EMPTY ) ĊĠĠĠ Ġ} ĊĊ Ċ data Ġclass ĠAccess ors Class Path ( val Ġbin : ĠClass Path , Ġval Ġsrc : ĠClass Path ) ĊĊ Ċ private Ċ fun Ġbuild Accessors Class Path For ( project : ĠProject , Ġclass Path : ĠClass Path ) Ġ= ĊĠĠĠ Ġconfigured Project Schema Of ( project )?. let Ġ{ Ġproject Schema Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcache Dir Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript Cache Of ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cacheDir For ( cacheKey For ( project Schema )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Accessors Jar For ( project Schema , Ġclass Path , Ġoutput Dir Ġ= Ġbase Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAccess ors Class Path ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Class Path ( access ors Jar ( cacheDir )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Class Path ( access ors Source Dir ( cacheDir ))) ĊĠĠĠ Ġ} ĊĊ Ċ private Ċ fun Ġconfigured Project Schema Of ( project : ĠProject ) Ġ= ĊĠĠĠ Ġa ot Project Schema Of ( project ) Ġ?: Ġjit Project Schema Of ( project ) ĊĊ Ċ private Ċ fun Ġa ot Project Schema Of ( project : ĠProject ) Ġ= ĊĠĠĠ Ġproject ĊĠĠĠĠĠĠĠ Ġ. root Project ĊĠĠĠĠĠĠĠ Ġ. get OrCreate Singleton Property Ġ{ Ġmulti Project Schema Snapshot Of ( project ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. schema ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġit [ project . path ] Ġ} ĊĊ Ċ private Ċ fun Ġjit Project Schema Of ( project : ĠProject ) Ġ= ĊĠĠĠ Ġproject . take If (:: enabled J it Accessors )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( class Loader Scope Of ( project ). is Locked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" project . class Loader Scope Ġmust Ġbe Ġlocked Ġbefore Ġquerying Ġthe Ġproject Ġschema " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġschema For ( project ). with Kotlin Type Strings () ĊĠĠĠ Ġ} ĊĊ Ċ private Ċ fun Ġscript Cache Of ( project : ĠProject ) Ġ= Ġproject . service Of < Script Cache >() ĊĊ Ċ private Ċ fun Ġbuild Accessors Jar For ( project Schema : ĠProject Schema < String >, Ġclass Path : ĠClass Path , Ġoutput Dir : ĠFile ) Ġ{ ĊĠĠĠ Ġval Ġsource File Ġ= ĠFile ( access ors Source Dir ( output Dir ), Ġ" org / gradle / script / lang / kotlin / access ors . kt ") ĊĠĠĠ Ġwrite Accessors To ( source File , Ġproject Schema ) ĊĠĠĠ Ġcompile To Jar ( access ors Jar ( output Dir ), ĠlistOf ( source File ), Ġlogger , Ġclass Path . as Files ) Ċ } Ċ Ċ private Ċ val Ġlogger Ġby Ġlazy Ġ{ Ġlogger For < Accessors Class Path >() Ġ} ĊĊ Ċ private Ċ fun Ġaccessors Source Dir ( base Dir : ĠFile ) Ġ= ĠFile ( base Dir , Ġ" src ") ĊĊ Ċ private Ċ fun Ġaccessors Jar ( base Dir : ĠFile ) Ġ= ĠFile ( base Dir , Ġ" gradle - script - kotlin - access ors . jar ") ĊĊ Ċ private Ċ fun Ġmulti Project Schema Snapshot Of ( project : ĠProject ) Ġ= ĊĠĠĠ ĠMulti Project Schema Snapshot ( ĊĠĠĠĠĠĠĠ Ġproject Schema Snapshot File Of ( project )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Multi Project Schema From ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊ Ċ private Ċ data Ġclass ĠMulti Project Schema Snapshot ( val Ġschema : ĠMap < String , ĠProject Schema < String >> ?) ĊĊ Ċ private Ċ fun Ġproject Schema Snapshot File Of ( project : ĠProject ): ĠFile ? Ġ= ĊĠĠĠ Ġproject ĊĠĠĠĠĠĠĠ Ġ. root Project ĊĠĠĠĠĠĠĠ Ġ. file ( PROJECT _ SCHEMA _ RESOURCE _ PATH ) ĊĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isFile Ġ} ĊĊ Ċ private Ċ fun Ġclass Loader Scope Of ( project : ĠProject ) Ġ= ĊĠĠĠ Ġ( project Ġas ĠProject Internal ). class Loader Scope ĊĊ Ċ private Ċ fun Ġcache Key For ( project Schema : ĠProject Schema < String >): ĠCache KeySpec Ġ= ĊĠĠĠ ĠCache KeySpec . with Prefix (" gradle - script - kotlin - access ors ") Ġ+ Ġproject Schema . to CacheKey String () ĊĊ Ċ private Ċ fun ĠProject Schema < String >. to CacheKey String (): ĠString Ġ= ĊĠĠĠ Ġ( extensions . entries . as Sequence () Ġ+ Ġconventions . entries . as Sequence ()) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ"${ it . key } =${ it . value }" Ġ} ĊĠĠĠĠĠĠĠ Ġ. sorted () ĊĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ": ") ĊĊ Ċ private Ċ fun Ġenabled J it Accessors ( project : ĠProject ) Ġ= ĊĠĠĠ Ġproject . find Property (" org . gradle . script . lang . kotlin . access ors . auto ") Ġ== Ġ" true " ĊĊ Ċ private Ċ fun Ġwrite Accessors To ( outputFile : ĠFile , Ġproject Schema : ĠProject Schema < String >): ĠFile Ġ= ĊĠĠĠ ĠoutputFile . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġparent File . mkdir s () ĊĠĠĠĠĠĠĠ Ġbuffered Writer (). use Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Accessors For ( project Schema , Ġwriter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ private Ċ fun Ġwrite Accessors For ( project Schema : ĠProject Schema < String >, Ġwriter : ĠBuffered Writer ) Ġ{ ĊĠĠĠ Ġwriter . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite ( file Header ) ĊĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠ Ġappend ln (" import Ġorg . gradle . api . Project ") ĊĠĠĠĠĠĠĠ Ġappend ln (" import Ġorg . gradle . script . lang . kotlin .* ") ĊĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠ Ġproject Schema . forEach Accessor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠLocation Ġof Ġthe Ġproject Ġschema Ġsnapshot Ġtaken Ġby Ġthe Ġ_ g sk Generate Accessors _ Ġtask Ġrelative Ġto Ġthe Ġroot Ġproject . Ċ Ġ* Ċ Ġ* Ġ@ see Ġorg . gradle . script . lang . kotlin . access ors . tasks . Generate Project Schema Ċ Ġ*/ Ċ internal Ċ const Ġval ĠPROJECT _ SCHEMA _ RESOURCE _ PATH Ġ= Ġ" build Src / src / gradle - script - kotlin / resources / project - schema . json " Ċ