package Ġcom . next f aze . dev fun . gradle . plugin Ċ Ċ import Ġcom . next f aze . dev fun . compiler . Dev Fun Processor Ċ import Ġcom . next f aze . dev fun . compiler . PACKAGE _ OVERRIDE Ċ import Ġcom . next f aze . dev fun . compiler . PACKAGE _ ROOT Ċ import Ġcom . next f aze . dev fun . compiler . PACKAGE _ SUFFIX Ċ import Ġcom . next f aze . dev fun . compiler . PACKAGE _ SUFFIX _ DEFAULT Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . logging . LogLevel Ċ import Ġorg . gradle . internal . class loader . ClassLoader Hierarchy Ċ import Ġorg . gradle . internal . class loader . ClassLoader Visitor Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Gradle Sub plugin Ċ import Ġjava . io . File Ċ import Ġjava . net . URL Ċ import Ġjava . net . URL ClassLoader Ċ Ċ /** Ċ Ġ* ĠGradle ĠDSL Ġfor Ġconfiguring ĠDev Fun . Ċ Ġ* Ċ Ġ* ĠValues Ġprovided Ġvia ĠGradle Ġplugin Ġconfig Ġcan / will Ġbe Ġoverridden Ġby Ġvalues Ġprovided Ġvia . ĠA PT Ġoptions . Ċ Ġ* Ċ Ġ* Ġ@ see ĠDev Fun Processor Ċ Ġ* Ġ@ see ĠPACK AGE _ SUFFIX Ċ Ġ* Ġ@ see ĠPACK AGE _ ROOT Ċ Ġ* Ġ@ see ĠPACK AGE _ OVERRIDE Ċ Ġ*/ Ċ open Ġclass ĠDev Fun Extension Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġpackage Ġsuffix Ġfor Ġthe Ġgenerated Ġcode . Ġ_( default : Ġ` dev fun _ generated `) _ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġis Ġprimarily Ġfor Ġtesting Ġpurposes Ġto Ġallow Ġmultiple Ġgener ations Ġin Ġthe Ġsame Ġclasspath . ĊĠĠĠĠ Ġ* Ġ- ĠIf Ġthis Ġis Ġnull Ġ( unset ) Ġ[ PACKAGE _ SUFFIX _ DEFAULT ] Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* Ġ- ĠIf Ġthis Ġis Ġempty Ġthe Ġsuffix Ġwill Ġbe Ġomitted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFinal Ġoutput Ġpackage Ġwill Ġbe : Ġ[ package Root ]. `< variant ?> `. [ package Suffix ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ`< variant ?> ` Ġwill Ġbe Ġomitted Ġif Ġboth Ġ` package Root ` Ġand Ġ` package Suffix ` Ġare Ġprovided . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpackage Suffix : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġpackage Ġroot Ġfor Ġthe Ġgenerated Ġcode . Ġ_( default : Ġ`< application Ġpackage > `) _ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAt tempts Ġwill Ġbe Ġmade Ġto Ġauto - detect Ġthe Ġproject Ġpackage Ġby Ġusing Ġthe Ġclass Ġoutput Ġdirectory Ġand Ġknown / standard ĊĠĠĠĠ Ġ* Ġrelative Ġpaths Ġto Ġvarious Ġbuild Ġfiles , Ġbut Ġif Ġnecessary Ġthis Ġoption Ġcan Ġbe Ġset Ġinstead . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFinal Ġoutput Ġpackage Ġwill Ġbe : Ġ[ package Root ]. `< variant ?> `. [ package Suffix ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ`< variant ?> ` Ġwill Ġbe Ġomitted Ġif Ġboth Ġ` package Root ` Ġand Ġ` package Suffix ` Ġare Ġprovided . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpackage Root : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġpackage Ġfor Ġthe Ġgenerated Ġcode . Ġ_( default : Ġ`< none > `) _ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġoverride Ġ[ package Root ] Ġand Ġ[ package Suffix ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpackage Override : ĠString ? Ġ= Ġnull Ċ } Ċ Ċ /** Ċ Ġ* ĠThe ĠDev Fun ĠGradle Ġplugin . ĠAllows Ġuse Ġof Ġthe Ġscript Ġconfiguration ĠDSL . Ċ Ġ* Ċ Ġ* Ġ@ see ĠDev Fun Extension Ċ Ġ*/ Ċ class ĠDev Fun Gradle Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġadd Url Method Ġ= ĠURL ClassLoader :: class . java . getDeclared Method (" add URL ", ĠURL :: class . java ). apply Ġ{ Ġis Accessible Ġ= Ġtrue Ġ} ĊĊĠĠĠ Ġ/** ĠApply Ġthis Ġgradle Ġplugin Ġto Ġthe Ġ[ project ] Ġregistering Ġ[ Dev Fun Extension ] Ġas Ġ` dev Fun `. Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . extensions . create (" dev Fun ", ĠDev Fun Extension :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Kotlin Plugin To Class Path ( project ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . warn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" Failed Ġto Ġinject ĠKotlin Gradle Sub plugin . Ċ Dev Fun ĠGradle Ġplugin Ġoptions Ġnot Ġapplied . Ċ Fall ing Ġback Ġto Ġcompile - time Ġpath Ġint rospection . """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠJar Version ( val Ġkotlin Version : ĠKotlin Version , Ġval Ġversion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠJ AR _ 1 2 5 1 ( Kotlin Version ( 1 , Ġ 2 , Ġ 5 0 ), Ġ" 1 2 5 1 "), ĊĠĠĠĠĠĠĠ ĠJ AR _ 1 2 6 1 ( Kotlin Version ( 1 , Ġ 2 , Ġ 6 0 ), Ġ" 1 2 6 1 "), ĊĠĠĠĠĠĠĠ ĠJ AR _ 1 2 7 1 ( Kotlin Version ( 1 , Ġ 2 , Ġ 7 0 ), Ġ" 1 2 7 1 "), ĊĠĠĠĠĠĠĠ ĠJ AR _ 1 3 0 0 ( Kotlin Version ( 1 , Ġ 3 , Ġ 0 ), Ġ" 1 3 0 0 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Kotlin Plugin To Class Path ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Version Ġ= ĠPlugin ApiVersion From Class Path . try Get Version ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠPlugin ApiVersion From Signatures . try Get Version ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . warn (" Failed Ġto Ġdetermine ĠKotlin ĠGradle ĠPlugin ĠAPI Ġversion Ġ- Ġassuming Ġbuiltin : Ġ${ Kotlin Version . CURRENT }. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Version . CURRENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject . logger . log ( logLevel , Ġ" Ass uming ĠKotlin ĠGradle ĠPlugin ĠAPI Ġversion : Ġ$ kotlin Version ") ĊĊĠĠĠĠĠĠĠ Ġval Ġjar Versions Ġ= ĠJar Version . values (). reversed () ĊĠĠĠĠĠĠĠ Ġval Ġjar Version Ġ= Ġjar Versions . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Version . is At Least ( it . kotlin Version . major , Ġit . kotlin Version . minor , Ġit . kotlin Version . patch ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . warn (" Failed Ġto Ġidentify Ġsuitable ĠKotlin Ġversion Ġ- Ġassuming Ġlatest .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjar Versions . first () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Jar To ClassLoader ( project , Ġjar Version . version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUnfortunately Ġwe Ġneed Ġto Ġadd Ġit Ġto Ġthe Ġclass loader Ġdirectly Ġas Ġwe Ġcan 't Ġmodify Ġthe Ġ` project . build script . dependencies ` ĊĠĠĠĠ Ġ* Ġafter Ġthey 've Ġbeen Ġresolved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Jar To ClassLoader ( project : ĠProject , Ġversion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjar FileName Ġ= Ġ" kotlin - plugin -$ version . jar " ĊĠĠĠĠĠĠĠ Ġval Ġjar Stream Ġ= Ġthis :: class . java . getResource AsStream ("/ $ jar FileName ") ĊĠĠĠĠĠĠĠ Ġval Ġtmp Dir Ġ= ĠFile ( System . getProperty (" java . io . tmpdir ", Ġ". "), Ġ" df "). apply Ġ{ Ġmkdir s () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjar File Ġ= ĠFile ( tmp Dir , Ġ" kotlin - plugin -$ version . jar ") ĊĠĠĠĠĠĠĠ Ġjar File . output Stream (). use Ġ{ Ġjar Stream . copy To ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġadd Url Method . invoke ( Thread . currentThread (). context ClassLoader , Ġjar File . to URI (). to URL ()) ĊĠĠĠĠĠĠĠ Ġproject . logger . log ( logLevel , Ġ" Added Ġto Ġclass - loader : Ġjar File =$ jar FileName ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġobject ĠPlugin ApiVersion From Class Path Ġ{ ĊĠĠĠ Ġprivate Ġval Ġplugin Api Jar Name Regex Ġ= ĠRegex (""" kotlin - gradle - plugin - api - (\ d +)\ . (\ d +)\ . (\ d + ). * \. jar """) ĊĊĠĠĠ Ġfun Ġtry Get Version ( project : ĠProject ): ĠKotlin Version ? Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . logger . log ( logLevel , Ġ" At tempting Ġto Ġresolve Ġversion Ġfrom Ġclasspath ...") ĊĠĠĠĠĠĠĠ Ġvar Ġkotlin Version : ĠKotlin Version ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext ClassLoader Ġ= ĠThread . currentThread (). context ClassLoader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context ClassLoader Ġis ĠClassLoader Hierarchy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ClassLoader . visit ( object Ġ: ĠClassLoader Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Class Path ( class Path : ĠArray < out ĠURL > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kotlin Version Ġ!= Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Path ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Snapshot Ġ&& Ġit . toString (). contains (" kotlin - gradle - plugin - api ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . log ( logLevel , Ġ" Kotlin ĠGradle ĠPlugin ĠAPI ĠJ AR : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġplugin Api Jar Name Regex . find ( it . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Ġ!= Ġnull Ġ&& Ġmatch . groups . size Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġmatch . groups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Version Ġ= ĠKotlin Version ( g [ 1 ] !!. value . toInt (), Ġg [ 2 ] !!. value . toInt (), Ġg [ 3 ] !!. value . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . log ( logLevel , Ġ" Exception Ġduring Ġsearch Ġfrom Ġclass Ġpath .", Ġt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkotlin Version ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġobject ĠPlugin ApiVersion From Signatures Ġ{ ĊĠĠĠ Ġ// Ġremoved Ġat ĠKotlin Ġ 1 . 2 . 6 x Ġ( true Ġfor ĠKotlin Ġ<= Ġ 1 . 2 . 5 x ) ĊĠĠĠ Ġprivate Ġval Ġhas GroupName Method Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Gradle Sub plugin :: class . java . getDeclared Method (" get GroupName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġapply Method Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Gradle Sub plugin :: class . java . declared Methods . single OrNull Ġ{ Ġit . name Ġ== Ġ" apply " Ġ} ?. toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġchanged Ġafter Ġ 1 . 2 . 6 x Ġ( true Ġfor ĠKotlin Ġ<= Ġ 1 . 2 . 6 x ) ĊĠĠĠ Ġprivate Ġval Ġapply Uses Source Set Ġby Ġlazy Ġ{ Ġapply Method ?. contains (" Source Set ") Ġ== Ġtrue Ġ} ĊĊĠĠĠ Ġ// Ġpresent Ġfrom Ġ 1 . 2 . 7 x + Ġ( true Ġfor ĠKotlin Ġ<= Ġ 1 . 2 . 7 x ) ĊĠĠĠ Ġprivate Ġval Ġapply Uses Kotlin Compilation Ġby Ġlazy Ġ{ Ġapply Method ?. contains (" Kotlin Compilation ") Ġ== Ġtrue Ġ} ĊĊĠĠĠ Ġ// Ġadded Ġversion Ġ 1 . 3 . 0 ĊĠĠĠ Ġprivate Ġval Ġhas Get Native Compiler Plugin Artifact Method Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Gradle Sub plugin :: class . java . getDeclared Method (" get Native Compiler Plugin Artifact ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtry Get Version ( project : ĠProject ): ĠKotlin Version ? Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . logger . log ( logLevel , Ġ" At tempting Ġto Ġresolve Ġversion Ġfrom Ġsignatures ...") ĊĠĠĠĠĠĠĠ Ġif Ġ( is Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Level , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" { ĊĠ Ġhas GroupName Method : Ġ$ has GroupName Method , ĊĠ Ġapply Method : Ġ$ apply Method , ĊĠ Ġapply Uses Source Set : Ġ$ apply Uses Source Set , ĊĠ Ġapply Uses Kotlin Compilation : Ġ$ apply Uses Kotlin Compilation , ĊĠ Ġhas Get Native Compiler Plugin Artifact Method : Ġ$ has Get Native Compiler Plugin Artifact Method Ċ } """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( has Get Native Compiler Plugin Artifact Method ) Ġreturn ĠKotlin Version ( 1 , Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( has GroupName Method ) Ġreturn ĠKotlin Version ( 1 , Ġ 2 , Ġ 5 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( apply Uses Source Set ) Ġreturn ĠKotlin Version ( 1 , Ġ 2 , Ġ 6 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( apply Uses Kotlin Compilation ) Ġreturn ĠKotlin Version ( 1 , Ġ 2 , Ġ 7 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġis Snapshot Ġby Ġlazy Ġ{ Ġversion Name . endsWith ("- SNAPSHOT ") Ġ} Ċ private Ġval Ġlog Level Ġby Ġlazy Ġ{ Ġif Ġ( is Snapshot ) ĠLogLevel . LI FE CYCLE Ġelse ĠLogLevel . DEBUG Ġ} Ċ