package Ġarrow . meta . plugin . gradle Ċ Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . Kotlin Compile Ċ import Ġio . github . class graph . Class Graph Ċ import Ġorg . gradle . api . Invalid UserData Exception Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . get Kotlin Plugin Version Ċ import Ġjava . util . Properties Ċ Ċ abstract Ġclass ĠArrow Meta Gradle Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠVERSION _ KEY Ġ= Ġ" COMPILER _ PLUGIN _ VERSION " ĊĠ Ġ} ĊĠ Ġprivate Ġval Ġproperties Ġ= ĠProperties () ĊĊĠ Ġoverride Ġfun Ġapply ( project : ĠProject ): ĠUnit Ġ{ ĊĠĠĠ Ġproperties . load ( this . java Class . getResource AsStream (" plugin . properties ")) ĊĠĠĠ Ġval Ġkotlin Version Ġ= Ġproperties . getProperty (" K OT LIN _ VERSION ") ĊĠĠĠ Ġif Ġ( kotlin Version Ġ!= Ġproject . get Kotlin Plugin Version ()) ĊĠĠĠĠĠ Ġthrow ĠInvalid UserData Exception (" Use ĠKotlin Ġ$ kotlin Version Ġfor Ġthis ĠGradle ĠPlugin ") ĊĊĠĠĠ Ġ// ĠTo Ġadd Ġits Ġtrans itive Ġdependencies ĊĠĠĠ Ġadd Meta Dependency ( project , Ġ" kotlin Compiler Classpath ", Ġ" io . arrow - kt : arrow - meta ") ĊĊĠĠĠ Ġproject . after Evaluate Ġ{ Ġp Ġ-> ĊĠĠĠĠĠ Ġp . tasks . with Type ( Kotlin Compile :: class . java ). configure Each Ġ{ ĊĠĠĠĠĠĠĠ Ġit . kotlin Options . free Compiler Args Ġ+= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠ Ġ"- X plugin =${ classpath Of (" arrow - meta ") }", ĊĠĠĠĠĠĠĠĠĠ Ġ"- P ", Ġ" plugin : arrow . meta . plugin . compiler : generated Src Output Dir =${ p . build Dir . absolute Path }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġadd Meta Dependency ( project : ĠProject , Ġconfiguration : ĠString , Ġdependency : ĠString ) Ġ= ĊĠĠĠ Ġproject . after Evaluate Ġ{ Ġp Ġ-> ĊĠĠĠĠĠ Ġp . dependencies . add ( configuration , Ġ"$ dependency :${ properties . getProperty ( VERSION _ KEY )} ") ĊĠĠĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġadd Arrow Dependency ( project : ĠProject , Ġconfiguration : ĠString , Ġdependency : ĠString ) Ġ= ĊĠĠĠ Ġproject . after Evaluate Ġ{ Ġp Ġ-> ĊĠĠĠĠĠ Ġp . dependencies . add ( configuration , Ġ"$ dependency :${ properties . getProperty (" ARROW _ VERSION ") }") ĊĠĠĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġadd Compiler Plugin ( project : ĠProject , Ġplugin : ĠString ) Ġ= ĊĠĠĠ Ġproject . after Evaluate Ġ{ Ġp Ġ-> ĊĠĠĠĠĠ Ġprintln (" Apply ing Ġ$ plugin Ġfor Ġ${ project . name } Ġ... ") ĊĠĠĠĠĠ Ġp . tasks . with Type ( Kotlin Compile :: class . java ). configure Each Ġ{ ĊĠĠĠĠĠĠĠ Ġit . kotlin Options . free Compiler Args Ġ+= ĠlistOf ("- X plugin =${ classpath Of ( plugin )} ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġclasspath Of ( dependency : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġcompiler Plugin Version Ġ= Ġproperties . getProperty ( VERSION _ KEY ) ĊĠĠĠĠĠ Ġval Ġregex Ġ= ĠRegex (" .* $ dependency -$ compiler Plugin Version .* ") ĊĠĠĠĠĠ Ġreturn ĠClass Graph (). classpath Files . first Ġ{ Ġclasspath Ġ-> Ġclasspath . name . matches ( regex ) Ġ}. toString () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch ElementException ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠInvalid UserData Exception ("$ dependency Ġnot Ġfound ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ