package Ġorg . jetbrains . kotlin . gradle . plugin Ċ Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . compile . Abstract Compile Ċ import Ġorg . jetbrains . kotlin . cli . common . arguments . Common Compiler Arguments Ċ import Ġorg . jetbrains . kotlin . gradle . logging . kotlin Debug Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . Abstract Kotlin Compile Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . Compiler Plugin Options Ċ import Ġjava . util .* Ċ Ċ class ĠSub plugin Environment ( ĊĠĠĠ Ġprivate Ġval Ġsub plugins : ĠList < Kotlin Gradle Sub plugin < Abstract Compile >>, ĊĠĠĠ Ġprivate Ġval Ġkotlin Plugin Version : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġload Sub plugins ( project : ĠProject , Ġkotlin Plugin Version : ĠString ): ĠSub plugin Environment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass Ġ= ĠKotlin Gradle Sub plugin :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild script Class loader Ġ= Ġproject . build script . class Loader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass From Build script Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild script Class loader . load Class ( klass . canonical Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass loader Ġ= Ġif Ġ( klass Ġ== Ġklass From Build script ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild script Class loader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġklass . class Loader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub plugins Ġ= ĠService Loader . load ( Kotlin Gradle Sub plugin :: class . java , Ġclass loader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġ( it Ġas ĠKotlin Gradle Sub plugin < Abstract Compile >) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSub plugin Environment ( sub plugins , Ġkotlin Plugin Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNo Class Def Found Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġplugin Ġloading Ġif ĠKotlin Gradle Sub plugin Ġis Ġnot Ġdefined . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt Ġis Ġtrue Ġnow Ġfor Ġtests Ġin Ġkotlin - gradle - plugin - core . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . error (" Could Ġnot Ġload Ġsub plugins ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSub plugin Environment ( listOf (), Ġkotlin Plugin Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< C Ġ: ĠCommon Compiler Arguments > Ġadd Sub plugin Options ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġkotlin Task : ĠAbstract Kotlin Compile < C >, ĊĠĠĠĠĠĠĠ Ġjava Task : ĠAbstract Compile ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvariant Data : ĠAny ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġandroid Project Handler : ĠAbstract Android Project Handler < out ĠAny ?> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkotlin Compilation : ĠKotlin Compilation < *> ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠList < Kotlin Gradle Sub plugin < Abstract Kotlin Compile < C >>> Ġ= Ġadd Sub plugin Options ( ĊĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠ Ġkotlin Task , ĊĠĠĠĠĠĠĠ Ġkotlin Task . plugin Options , ĊĠĠĠĠĠĠĠ Ġjava Task , ĊĠĠĠĠĠĠĠ Ġvariant Data , ĊĠĠĠĠĠĠĠ Ġandroid Project Handler , ĊĠĠĠĠĠĠĠ Ġkotlin Compilation ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġadd Sub plugin Options ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġkotlin Task : ĠAbstract Compile , ĊĠĠĠĠĠĠĠ Ġplugin Options : ĠCompiler Plugin Options , ĊĠĠĠĠĠĠĠ Ġjava Task : ĠAbstract Compile ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvariant Data : ĠAny ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġandroid Project Handler : ĠAbstract Android Project Handler < out ĠAny ?> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkotlin Compilation : ĠKotlin Compilation < *> ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠList < Kotlin Gradle Sub plugin < Abstract Compile >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapplied Sub plugins Ġ= Ġsub plugins . filter Ġ{ Ġit . is Applicable ( project , Ġkotlin Task ) Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sub plugin Ġin Ġapplied Sub plugins ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! sub plugin . is Applicable ( project , Ġkotlin Task )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplugin Id Ġ= Ġsub plugin . get Compiler Plugin Id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . kotlin Debug Ġ{ Ġ" Loading Ġsub plugin Ġ$ plugin Id " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub plugin . get Plugin Artifact (). let Ġ{ Ġartifact Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . add Maven Dependency ( PLUGIN _ CLAS SPATH _ CONFIGURATION _ NAME , Ġartifact ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub plugin . get Native Compiler Plugin Artifact ()?. let Ġ{ Ġartifact Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . add Maven Dependency ( NATIVE _ COMPILER _ PLUGIN _ CLAS SPATH _ CONFIGURATION _ NAME , Ġartifact ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub plugin Options Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub plugin . apply ( project , Ġkotlin Task , Ġjava Task , Ġvariant Data , Ġandroid Project Handler , Ġkotlin Compilation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub plugin Id Ġ= Ġsub plugin . get Compiler Plugin Id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Task . register Sub plugin Options As Inputs ( sub plugin Id , Ġsub plugin Options ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( option Ġin Ġsub plugin Options ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Options . add Plugin Argument ( sub plugin Id , Ġoption ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . kotlin Debug (" Sub plugin Ġ$ plugin Id Ġloaded ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġapplied Sub plugins ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . add Maven Dependency ( configuration : ĠString , Ġartifact : ĠSub plugin Artifact ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġartifact Version Ġ= Ġartifact . version Ġ?: Ġkotlin Plugin Version ĊĠĠĠĠĠĠĠ Ġval Ġmaven Coordinate Ġ= Ġ"${ artifact . groupId }:${ artifact . artifactId }: $ artifact Version " ĊĠĠĠĠĠĠĠ Ġproject . logger . kotlin Debug Ġ{ Ġ" Adding Ġ'$ maven Coordinate ' Ġto Ġ'$ configuration ' Ġconfiguration " Ġ} ĊĠĠĠĠĠĠĠ Ġproject . dependencies . add ( configuration , Ġmaven Coordinate ) ĊĠĠĠ Ġ} Ċ }