/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . gradle . plugin . mpp Ċ Ċ import Ġgro ovy . lang . Closure Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . api . attributes . Attribute Container Ċ import Ġorg . gradle . api . execution . Task Execution Listener Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . plugins . Extra Properties Extension Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġorg . gradle . api . tasks . Task State Ċ import Ġorg . jetbrains . kotlin . gradle . dsl .* Ċ import Ġorg . jetbrains . kotlin . gradle . plugin .* Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . pm 2 0 .* Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . sources . with Dep ends On Closure Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . Abstract Kotlin Compile Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . locate Task Ċ import Ġorg . jetbrains . kotlin . gradle . utils .* Ċ import Ġorg . jetbrains . kotlin . project . model . Language Settings Ċ import Ġorg . jetbrains . kotlin . tool ing . core . closure Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Callable Ċ Ċ internal Ġfun ĠKotlin Compilation <* >. compose Name ( prefix : ĠString ? Ġ= Ġnull , Ġsuffix : ĠString ? Ġ= Ġnull ): ĠString Ġ{ ĊĠĠĠ Ġval Ġcompilation Name Part Ġ= Ġcompilation Name . take If Ġ{ Ġit Ġ!= ĠKotlin Compilation . MAIN _ COMPI L ATION _ NAME Ġ} ĊĠĠĠ Ġval Ġtarget Name Part Ġ= Ġtarget . dis amb ig uation Classifier ĊĊĠĠĠ Ġreturn Ġlower Camel Case Name ( prefix , Ġtarget Name Part , Ġcompilation Name Part , Ġsuffix ) Ċ } Ċ Ċ internal Ġfun ĠKotlin Compilation <* >. is Main (): ĠBoolean Ġ= ĊĠĠĠ Ġname Ġ== ĠKotlin Compilation . MAIN _ COMPI L ATION _ NAME Ċ Ċ /** Ċ Ġ* Ġsee Ġhttps :// yout rack . jetbrains . com / issue / KT - 4 5 4 1 2 Ċ Ġ* ĠSome Ġimplementations Ġof Ġ[ Kotlin Compilation ] Ġare Ġnot Ġincluding Ġtheir Ġ[ Kotlin Compilation . default Source Set ] Ġinto Ġ[ kotlin Source Set ] s Ċ Ġ* ĠThis Ġhelper Ġfunction Ġmight Ġdis appear Ġin Ġthe Ġfuture , Ġonce Ġthe Ġbehaviour Ġof Ġthose Ġ[ Kotlin Compilation ] Ġimplementations Ġis Ġstream lined . Ċ Ġ* Ġ@ return Ġ[ Kotlin Compilation . kotlin Source Sets ] Ġ+ Ġ[ Kotlin Compilation . default Source Set ] Ċ Ġ*/ Ċ internal Ġval ĠKotlin Compilation <* >. kotlin Source Sets In cluding Default : ĠSet < Kotlin Source Set > Ġget () Ġ= Ġkotlin Source Sets Ġ+ Ġdefault Source Set Ċ Ċ abstract Ġclass ĠAbstract Kotlin Compilation < T Ġ: ĠKotlin Common Options >( ĊĠĠĠ Ġinternal Ġopen Ġval Ġcompilation Details : ĠCompilation Details < T >, Ċ ) Ġ: ĠKotlin Compilation < T >, ĊĠĠĠ ĠHas Kotlin Dependencies , ĊĠĠĠ ĠKotlin Compilation Data < T > Ġ{ ĊĊĠĠĠ Ġ// region ĠHas Kotlin Dependencies Ġdeleg ation : Ġdelegate Ġmembers Ġmanually Ġfor Ġbetter Ġcontrol Ġand Ġpre vention Ġof Ġaccident al Ġoverrides ĊĠĠĠ Ġprivate Ġval Ġkotlin Dependencies Holder Ġget () Ġ= Ġcompilation Details . kotlin Dependencies Holder ĊĠĠĠ Ġoverride Ġval Ġapi Configuration Name : ĠString Ġget () Ġ= Ġkotlin Dependencies Holder . api Configuration Name ĊĠĠĠ Ġoverride Ġval Ġimplementation Configuration Name : ĠString Ġget () Ġ= Ġkotlin Dependencies Holder . implementation Configuration Name ĊĠĠĠ Ġoverride Ġval Ġcompile Only Configuration Name : ĠString Ġget () Ġ= Ġkotlin Dependencies Holder . compile Only Configuration Name ĊĠĠĠ Ġoverride Ġval Ġruntime Only Configuration Name : ĠString Ġget () Ġ= Ġkotlin Dependencies Holder . runtime Only Configuration Name ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġdependencies ( configure : ĠKotlin Dependency Handler . () Ġ-> ĠUnit ) Ġ= Ġkotlin Dependencies Holder . dependencies ( configure ) ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġdependencies ( configure Closure : ĠClosure < Any ?> ) Ġ= Ġkotlin Dependencies Holder . dependencies ( configure Closure ) ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġ// region ĠKotlin Compilation Data Ġdeleg ation : Ġdelegate Ġmembers Ġmanually Ġfor Ġbetter Ġcontrol Ġand Ġpre vention Ġof Ġaccident al Ġoverrides ĊĠĠĠ Ġprivate Ġval Ġcompilation Data Ġget () Ġ= Ġcompilation Details . compilation Data ĊĠĠĠ Ġoverride Ġval Ġcompile All Task Name : ĠString Ġget () Ġ= Ġcompilation Data . compile All Task Name ĊĠĠĠ Ġfinal Ġoverride Ġval Ġcompilation Purpose : ĠString Ġget () Ġ= Ġcompilation Data . compilation Purpose ĊĠĠĠ Ġfinal Ġoverride Ġval Ġcompilation Classifier : ĠString ? Ġget () Ġ= Ġcompilation Data . compilation Classifier ĊĠĠĠ Ġfinal Ġoverride Ġval Ġlanguage Settings : ĠLanguage Settings Ġget () Ġ= Ġcompilation Data . language Settings ĊĠĠĠ Ġfinal Ġoverride Ġval Ġown ModuleName : ĠString Ġget () Ġ= Ġcompilation Data . own ModuleName ĊĠĠĠ Ġfinal Ġoverride Ġval ĠmoduleName : ĠString Ġget () Ġ= Ġcompilation Data . moduleName ĊĠĠĠ Ġfinal Ġoverride Ġval Ġfriend Paths : ĠIterable < File Collection > Ġget () Ġ= Ġcompilation Data . friend Paths ĊĠĠĠ Ġfinal Ġoverride Ġval Ġplatform Type : ĠKotlin Platform Type Ġget () Ġ= Ġcompilation Data . platform Type ĊĠĠĠ Ġfinal Ġoverride Ġval Ġoutput : ĠKotlin Compilation Output Ġget () Ġ= Ġcompilation Data . output ĊĠĠĠ Ġfinal Ġoverride Ġval Ġcompile Kotlin Task Name : ĠString Ġget () Ġ= Ġcompilation Data . compile Kotlin Task Name ĊĠĠĠ Ġfinal Ġoverride Ġval Ġkotlin Options : ĠT Ġget () Ġ= Ġcompilation Data . kotlin Options ĊĠĠĠ Ġfinal Ġoverride Ġval Ġkotlin Source Directories By Fragment Name Ġget () Ġ= Ġcompilation Data . kotlin Source Directories By Fragment Name ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġoverride Ġval Ġtarget : ĠKotlin Target Ġget () Ġ= Ġcompilation Details . target ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġcompile Dependency Configuration Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompilation Details . compile Dependency Files Holder . dependency Configuration Name ĊĊĠĠĠ Ġfinal Ġoverride Ġvar Ġcompile Dependency Files : ĠFile Collection ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompilation Details . compile Dependency Files Holder . dependency Files ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġcompilation Details . compile Dependency Files Holder . dependency Files Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġkotlin Source Sets : ĠMutable Set < Kotlin Source Set > Ġget () Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġdetails Ġ= Ġcompilation Details ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDefault Compilation Details Ġ-> Ġdetails . direct ly Included Kotlin Source Sets Ġ// Ġmutable Ġin Ġthat Ġsubtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġdeprec ate Ġmut ability Ġof Ġthis Ġset . ĠWe Ġshouldn 't Ġallow Ġmut ating Ġit Ġdirectly Ġanyway ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdetails . direct ly Included Kotlin Source Sets . to Mutable Set () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġdefault Source SetName : ĠString Ġget () Ġ= Ġcompilation Details . default Source SetName ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġcompilation Name : ĠString Ġget () Ġ= Ġcompilation Details . compilation Data . compilation Purpose ĊĊĠĠĠ Ġoverride Ġfun Ġkotlin Options ( configure : ĠT . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġconfigure ( kotlin Options ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġval Ġcompile Kotlin Task : ĠKotlin Compile < T > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompile Kotlin Task Provider . get () ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġval Ġcompile Kotlin Task Provider : ĠTask Provider < out ĠKotlin Compile < T >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget . project . locate Task ( compile Kotlin Task Name ) Ġ?: Ġthrow ĠGradle Exception (" Couldn 't Ġlocate Ġ Ġtask Ġ$ compile Kotlin Task Name ") ĊĊĠĠĠ Ġprivate Ġval Ġattribute Container Ġby Ġlazy Ġ{ ĠH ierarchy Attribute Container ( target . attributes ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Attributes (): ĠAttribute Container Ġ= Ġattribute Container ĊĊĠĠĠ Ġoverride Ġval Ġdefault Source Set : ĠKotlin Source Set ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget . project . kotlin Extension . source Sets . get ByName ( default Source SetName ) ĊĊĠĠĠ Ġoverride Ġfun Ġdefault Source Set ( configure : ĠKotlin Source Set . () Ġ-> ĠUnit ) Ġ= Ġdefault Source Set . configure () ĊĊĠĠĠ Ġoverride Ġfun Ġsource ( source Set : ĠKotlin Source Set ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompilation Details . source ( source Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" compilation Ġ'$ name ' Ġ($ target )" ĊĊĠĠĠ Ġoverride Ġfun Ġassociate With ( other : ĠKotlin Compilation <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompilation Details . associate With (( other Ġas ĠAbstract Kotlin Compilation < *> ). compilation Details ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġassociate With : ĠList < Kotlin Compilation <* >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠCollections . unmodifiable List ( compilation Details . associate Comp il ations . map Ġ{ Ġit . compilation Ġ}) ĊĊĠĠĠ Ġoverride Ġval Ġproject : ĠProject ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget . project ĊĊĠĠĠ Ġoverride Ġval Ġowner : ĠKotlin Target ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget ĊĊĠĠĠ Ġoverride Ġval Ġall Kotlin Source Sets : ĠSet < Kotlin Source Set > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompilation Details . direct ly Included Kotlin Source Sets . with Dep ends On Closure ĊĊĠĠĠ Ġoverride Ġval Ġrelated Configuration Names : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompilation Details . kotlin Dependencies Holder . related Configuration Names Ġ+ Ġcompile Dependency Configuration Name Ċ } Ċ Ċ internal Ġfun Ġadd Common Sources To Kotlin Compile Task ( ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġtask Name : ĠString , ĊĠĠĠ Ġsource File Extensions : ĠIterable < String >, ĊĠĠĠ Ġsources : Ġ() Ġ-> ĠAny Ċ ) Ġ= Ġadd Sources To Kotlin Compile Task ( project , Ġtask Name , Ġsource File Extensions , Ġlazy Of ( true ), Ġsources ) Ċ Ċ // ĠFIXME Ġthis Ġfunction Ġdangerous ly Ġignores Ġan Ġincorrect Ġtype Ġof Ġthe Ġtask Ġ( e . g . Ġif Ġthe Ġactual Ġtask Ġis Ġa ĠK / N Ġone ); Ġconsider Ġreporting Ġa Ġfailure Ċ internal Ġfun Ġadd Sources To Kotlin Compile Task ( ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġtask Name : ĠString , ĊĠĠĠ Ġsource File Extensions : ĠIterable < String >, ĊĠĠĠ Ġadd As Common Sources : ĠLazy < Boolean > Ġ= Ġlazy Of ( false ), ĊĠĠĠ Ġ/** ĠEvalu ated Ġas Ġproject . files (...) Ġ*/ ĊĠĠĠ Ġsources : Ġ() Ġ-> ĠAny Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠAbstract Kotlin Compile <* >. configure Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthis Ġcall , Ġthe Ġsuper - implementation Ġof Ġ` source ` Ġadds Ġthe Ġdirectories Ġfiles Ġto Ġthe Ġroots Ġof Ġthe Ġunion Ġfile Ġtree , ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġit 's ĠOK Ġto Ġpass Ġjust Ġthe Ġsource Ġroots . ĊĠĠĠĠĠĠĠ Ġsource ( Callable ( sources )) ĊĠĠĠĠĠĠĠ Ġsource Files Extensions . addAll ( source File Extensions ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġ` common Source Set ` Ġis Ġpassed Ġto Ġthe Ġcompiler Ġas - is , Ġconverted Ġwith Ġto List ĊĠĠĠĠĠĠĠ Ġcommon Source Set . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCallable < Any > Ġ{ Ġif Ġ( add As Common Sources . value ) Ġsources Ġelse Ġempty List < Any >() Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġproject . tasks ĊĠĠĠĠĠĠĠ Ġ// ĠTo Ġconfigure Ġa Ġtask Ġthat Ġmay Ġhave Ġnot Ġyet Ġbeen Ġcreated Ġat Ġthis Ġpoint , Ġuse Ġ' with Type - matching - configure Each `: ĊĠĠĠĠĠĠĠ Ġ. with Type ( Abstract Kotlin Compile :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. matching Ġ{ Ġit . name Ġ== Ġtask Name Ġ} ĊĠĠĠĠĠĠĠ Ġ. configure Each Ġ{ Ġcompile Kotlin Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Kotlin Task . configure Action () ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġval ĠKotlin Compilation <* >. associate With Closure : ĠIterable < Kotlin Compilation <* >> ĊĠĠĠ Ġget () Ġ= Ġthis . closure Ġ{ Ġit . associate With Ġ} Ċ Ċ abstract Ġclass ĠAbstract Kotlin Compilation To Runnable Files < T Ġ: ĠKotlin Common Options >( ĊĠĠĠ Ġoverride Ġval Ġcompilation Details : ĠCompilation Details With Runtime < T >, Ċ ) Ġ: ĠAbstract Kotlin Compilation < T >( compilation Details ), ĊĠĠĠ ĠKotlin Compilation To Runnable Files < T > Ġ{ ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġruntime Dependency Configuration Name : ĠString Ġget () Ġ= Ġcompilation Details . runtime Dependency Files Holder . dependency Configuration Name ĊĠĠĠ Ġfinal Ġoverride Ġvar Ġruntime Dependency Files : ĠFile Collection ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompilation Details . runtime Dependency Files Holder . dependency Files ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation Details . runtime Dependency Files Holder . dependency Files Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġrelated Configuration Names : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsuper < Abstract Kotlin Compilation >. related Configuration Names Ġ+ Ġruntime Dependency Configuration Name Ċ } Ċ Ċ internal Ġfun ĠKotlin Compilation <* >. dis amb igu ate Name ( simple Name : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġlower Camel Case Name ( ĊĠĠĠĠĠĠĠ Ġtarget . dis amb ig uation Classifier , ĊĠĠĠĠĠĠĠ Ġcompilation Name . take If Ġ{ Ġit Ġ!= ĠKotlin Compilation . MAIN _ COMPI L ATION _ NAME Ġ}, ĊĠĠĠĠĠĠĠ Ġsimple Name ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġtype alias ĠComp il ations By Source Set Ġ= ĠMap < Kotlin Source Set , ĠSet < Kotlin Compilation <* >>> Ċ Ċ internal Ġobject ĠCompilation Source Set Util Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠEXT _ NAME Ġ= Ġ" kotlin . comp il ations . by Source Sets " ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġget OrCreate Property ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġinitialize : ĠProperty < Comp il ations By Source Set >. () Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠProperty < Comp il ations By Source Set > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġext Ġ= Ġproject . extensions . getBy Type ( Extra Properties Extension :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! ext . has ( EXT _ NAME )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġext . set ( EXT _ NAME , Ġproject . objects . property ( Any :: class . java Ġas ĠClass < Comp il ations By Source Set >). also ( initialize )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġext . get ( EXT _ NAME ) Ġas ĠProperty < Comp il ations By Source Set > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFIXME : Ġthe Ġresults Ġinclude Ġthe Ġcompil ations Ġof Ġthe Ġmetadata Ġtarget ; Ġthe Ġcall ers Ġshould Ġcare Ġabout Ġfiltering Ġthem Ġout ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġthey Ġneed Ġonly Ġthe Ġplatform Ġcompil ations ĊĠĠĠ Ġ// ĠTODO : Ġcreate Ġa Ġseparate Ġutil Ġfunction : Ġ` platform Comp il ations By Source Sets ` ĊĠĠĠ Ġ// ĠTODO : Ġvisit Ġall Ġcall Ġsites , Ġcheck Ġif Ġthey Ġhandle Ġthe Ġmetadata Ġcompil ations Ġcorrectly ĊĠĠĠ Ġfun Ġcompil ations By Source Sets ( project : ĠProject ): ĠComp il ations By Source Set Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Names By Source SetName Ġ= Ġget OrCreate Property ( project ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshould Finalize Value Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( project . provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Extension Ġ= Ġproject . kotlin Extension ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtargets Ġ= Ġwhen Ġ( kotlin Extension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKotlin Multi platform Extension Ġ-> Ġkotlin Extension . targets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKotlin Single Target Extension Ġ-> ĠlistOf ( kotlin Extension . target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompil ations Ġ= Ġtargets . flatMap Ġ{ Ġit . comp il ations Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable Map Of < Kotlin Source Set , ĠMutable Set < Kotlin Compilation <* >>> (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompil ations . forEach Ġ{ Ġcompilation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . all Kotlin Source Sets . forEach Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Or Put ( source Set ) Ġ{ Ġmutable Set Of () Ġ}. add ( compilation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Extension . source Sets . forEach Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġsource Ġsets Ġnot Ġtaking Ġpart Ġin Ġany Ġcompilation , Ġkeep Ġan Ġempty Ġset Ġto Ġavoid Ġerrors Ġon Ġaccess Ġby Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Or Put ( source Set ) Ġ{ Ġmutable Set Of () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Finalize Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ provider Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . gradle . task Graph . when Ready Ġ{ Ġshould Finalize Value Ġ= Ġtrue Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġcase Ġthe Ġvalue Ġis Ġfirst Ġqueried Ġafter Ġthe Ġtask Ġgraph Ġhas Ġbeen Ġcalculated , Ġfinalize Ġthe Ġvalue Ġas Ġsoon Ġas Ġa Ġtask Ġexecutes : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠTask Execution Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Execute ( task : ĠTask ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Execute ( task : ĠTask , Ġstate : ĠTask State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Finalize Value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcompilation Names By Source SetName . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsource Sets In Multiple Comp il ations ( project : ĠProject ) Ġ= ĊĠĠĠĠĠĠĠ Ġcompil ations By Source Sets ( project ). map NotNull To ( mutable Set Of ()) Ġ{ Ġ( source Set , Ġcompil ations ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name . take If Ġ{ Ġcompil ations . size Ġ> Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġinvalid ModuleName Characters Regex Ġ= Ġ""" [ \\ /\ r \ n \ t ] """. to Regex () Ċ Ċ internal Ġfun Ġfilter ModuleName ( moduleName : ĠString ): ĠString Ġ= ĊĠĠĠ ĠmoduleName . replace ( invalid ModuleName Characters Regex , Ġ"_ ") Ċ