package Ġorg . jl le its ch uh . gradle . kt lint Ċ Ċ import Ġcom . android . build . gradle . Base Extension Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . file . File Tree Ċ import Ġorg . gradle . api . logging . configuration . Console Output Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġorg . gradle . language . base . plugins . Lifecycle Base Plugin Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . Kotlin Multi platform Extension Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . Kotlin Project Extension Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Platform Type Ċ import Ġjava . util . concurrent . Callable Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠPlugin Ġthat Ġprovides Ġa Ġwrapper Ġover Ġthe Ġ` kt lint ` Ġproject . Ċ Ġ*/ Ċ @ Suppress (" Un stable Api Usage ") Ċ open Ġclass ĠK tl int Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( target : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠPlugin Holder ( target ) ĊĠĠĠĠĠĠĠ Ġ// ĠApply Ġthe Ġidea Ġplugin ĊĠĠĠĠĠĠĠ Ġtarget . plugins . apply ( K tl int Ide a Plugin :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġholder . add Kt Lint Tasks To Kotlin Plugin () ĊĠĠĠĠĠĠĠ Ġholder . add Kotlin Script Tasks () ĊĠĠĠĠĠĠĠ Ġholder . add Git Hook Tasks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . add Kt Lint Tasks To Kotlin Plugin () Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" kotlin ", Ġapply Kt Lint ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" kotlin 2 js ", Ġapply Kt Lint ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" org . jetbrains . kotlin . js ", Ġapply Kt Lint ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" kotlin - platform - common ", Ġapply Kt Lint ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" kotlin - android ", Ġapply Kt Lint To Android ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" org . jetbrains . kotlin . multi platform ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply K tl int Multi platform () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . apply K tl int Multi platform (): Ġ( Plugin < in ĠAny >) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmulti platform Extension Ġ= Ġtarget . extensions . getBy Type ( Kotlin Multi platform Extension :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġmulti platform Extension . source Sets . all Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Task Ġ= Ġcreate Check Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . kotlin . source Directories ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd K tl int Check Task To Project Meta Check Task ( check Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Check Task Dep ends On K tl int Check Task ( target , Ġcheck Task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tl int Source Set Format Task Ġ= Ġcreate Format Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . kotlin . source Directories ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd K tl int Format Task To Project Meta Format Task ( kt lint Source Set Format Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmulti platform Extension . targets . all Ġ{ Ġkotlin Target Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( kotlin Target . platform Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Platform Type . android Jvm Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Configure Action : Ġ( Plugin < Any >) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . extensions . configure ( Base Extension :: class . java ) Ġ{ Ġext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġext . add Variants Meta Tasks ( target , Ġkotlin Target . target Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . application ", Ġandroid Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . library ", Ġandroid Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . instant app ", Ġandroid Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . feature ", Ġandroid Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . test ", Ġandroid Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . dynamic - feature ", Ġandroid Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . apply Kt Lint (): Ġ( Plugin < in ĠAny >) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Sets Ġ= Ġtarget . the Helper < Kotlin Project Extension >(). source Sets ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sets . all Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Source Directories Ġ= Ġsource Set . kotlin . source Directories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Task Ġ= Ġcreate Check Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Source Directories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd K tl int Check Task To Project Meta Check Task ( check Task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Check Task Dep ends On K tl int Check Task ( target , Ġcheck Task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tl int Source Set Format Task Ġ= Ġcreate Format Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Source Directories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd K tl int Format Task To Project Meta Format Task ( kt lint Source Set Format Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . apply Kt Lint To Android (): Ġ( Plugin < in ĠAny >) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources : ĠFile Collection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Task Ġ= Ġcreate Check Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd K tl int Check Task To Project Meta Check Task ( check Task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Check Task Dep ends On K tl int Check Task ( target , Ġcheck Task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tl int Source Set Format Task Ġ= Ġcreate Format Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd K tl int Format Task To Project Meta Format Task ( kt lint Source Set Format Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠVariant Ġmanager Ġreturns Ġall Ġsources Ġfor Ġvariant , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġso Ġmost Ġprobably Ġmain Ġsource Ġset Ġmaybe Ġchecked Ġseveral Ġtimes . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġapproach Ġcreates Ġone Ġcheck Ġtasks Ġper Ġone Ġsource Ġset . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplugin Configure Action : Ġ( Plugin < Any >) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . extensions . configure ( Base Extension :: class . java ) Ġ{ Ġext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġext . source Sets Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . all Ġ{ Ġandroid Source Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPass ing ĠCallable , Ġso Ġreturned ĠFile Collection , Ġwill Ġlazy Ġevaluate Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġwhen Ġtask Ġwill Ġneed Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSol ves Ġthe Ġproblem Ġof Ġhaving Ġadditional Ġsource Ġdirs Ġin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcurrent ĠAndroid Source Set , Ġthat Ġare Ġnot Ġavailable Ġon Ġeager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġevaluation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Source Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . files ( Callable Ġ{ Ġandroid Source Set . java . src Dirs Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġext . add Variants Meta Tasks ( target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . application ", Ġplugin Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . library ", Ġplugin Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . instant app ", Ġplugin Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . feature ", Ġplugin Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . test ", Ġplugin Configure Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" com . android . dynamic - feature ", Ġplugin Configure Action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . add K tl int Check Task To Project Meta Check Task ( ĊĠĠĠĠĠĠĠ Ġcheck Task : ĠTask Provider < K tl int Check Task > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmeta K tl int Check Task . configure Ġ{ Ġit . depends On ( check Task ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . add K tl int Format Task To Project Meta Format Task ( ĊĠĠĠĠĠĠĠ Ġformat Task : ĠTask Provider < K tl int Format Task > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmeta K tl int Format Task . configure Ġ{ Ġit . depends On ( format Task ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Format Task ( ĊĠĠĠĠĠĠĠ Ġplugin Holder : ĠPlugin Holder , ĊĠĠĠĠĠĠĠ Ġsource SetName : ĠString , ĊĠĠĠĠĠĠĠ Ġkotlin Source Directories : ĠIterable < *> ĊĠĠĠ Ġ): ĠTask Provider < K tl int Format Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplugin Holder . target . register Task ( source SetName . source Set Format Task Name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Runs Ġa Ġcheck Ġagainst Ġall Ġ. kt Ġfiles Ġto Ġensure Ġthat Ġthey Ġare Ġformatted Ġaccording Ġto Ġk tl int ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Plugin Task ( plugin Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Source ( kotlin Source Directories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Check Task ( ĊĠĠĠĠĠĠĠ Ġplugin Holder : ĠPlugin Holder , ĊĠĠĠĠĠĠĠ Ġsource SetName : ĠString , ĊĠĠĠĠĠĠĠ Ġkotlin Source Directories : ĠIterable < *> ĊĠĠĠ Ġ): ĠTask Provider < K tl int Check Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplugin Holder . target . register Task ( source SetName . source Set Check Task Name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Runs Ġa Ġcheck Ġagainst Ġall Ġ. kt Ġfiles Ġto Ġensure Ġthat Ġthey Ġare Ġformatted Ġaccording Ġto Ġk tl int ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Plugin Task ( plugin Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Source ( kotlin Source Directories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBase K tl int Check Task . configure Plugin Task ( ĊĠĠĠĠĠĠĠ Ġplugin Holder : ĠPlugin Holder , ĊĠĠĠĠĠĠĠ Ġadditional Task Config : ĠBase K tl int Check Task . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclasspath . set From ( plugin Holder . kt lint Configuration ) ĊĠĠĠĠĠĠĠ Ġk tl int Version . set ( plugin Holder . extension . version ) ĊĠĠĠĠĠĠĠ Ġverbose . set ( plugin Holder . extension . verbose ) ĊĠĠĠĠĠĠĠ Ġadditional Editor configFile . set ( plugin Holder . extension . additional Editor configFile ) ĊĠĠĠĠĠĠĠ Ġdebug . set ( plugin Holder . extension . debug ) ĊĠĠĠĠĠĠĠ Ġignore Failures . set ( plugin Holder . extension . ignore Failures ) ĊĠĠĠĠĠĠĠ Ġoutput To Console . set ( plugin Holder . extension . output To Console ) ĊĠĠĠĠĠĠĠ Ġcolored Output . set ( plugin Holder . extension . colored Output . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plugin Holder . target . is Console Plain ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Holder . target . logger . info (" Console Ġtype Ġis Ġplain : Ġdisabling Ġcolored Ġoutput ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġrule Sets Classpath . set From ( plugin Holder . kt lint Rule set Configuration ) ĊĠĠĠĠĠĠĠ Ġreport ers . set ( plugin Holder . extension . report ers ) ĊĠĠĠĠĠĠĠ Ġandroid . set ( plugin Holder . extension . android ) ĊĠĠĠĠĠĠĠ Ġenable Experimental Rules . set ( plugin Holder . extension . enable Experimental Rules ) ĊĠĠĠĠĠĠĠ Ġdisabled Rules . set ( plugin Holder . extension . disabled Rules ) ĊĊĠĠĠĠĠĠĠ Ġadditional Task Config () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Check Task Dep ends On K tl int Check Task ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġk tl int Check : ĠTask Provider < K tl int Check Task > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . with Type ( Lifecycle Base Plugin :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tasks . named ( Lifecycle Base Plugin . CHECK _ TASK _ NAME ). configure Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . depends On ( kt lint Check ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . add Kotlin Script Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Directory Script Files Ġ= Ġtarget . file Tree ( target . project Dir ) ĊĠĠĠĠĠĠĠ Ġproject Directory Script Files . include (" *. k ts ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck Task Ġ= Ġcreate Kotlin Script Check Task ( this , Ġproject Directory Script Files ) ĊĠĠĠĠĠĠĠ Ġadd K tl int Check Task To Project Meta Check Task ( check Task ) ĊĠĠĠĠĠĠĠ Ġset Check Task Dep ends On K tl int Check Task ( target , Ġcheck Task ) ĊĊĠĠĠĠĠĠĠ Ġval Ġformat Task Ġ= Ġcreate Kotlin Script Format Task ( this , Ġproject Directory Script Files ) ĊĠĠĠĠĠĠĠ Ġadd K tl int Format Task To Project Meta Format Task ( format Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Kotlin Script Check Task ( ĊĠĠĠĠĠĠĠ Ġplugin Holder : ĠPlugin Holder , ĊĠĠĠĠĠĠĠ Ġproject Script Files : ĠFile Tree ĊĠĠĠ Ġ): ĠTask Provider < K tl int Check Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplugin Holder . target . register Task ( K OT LIN _ SCRIPT _ CHECK _ TASK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Runs Ġa Ġcheck Ġagainst Ġall Ġ. k ts Ġfiles Ġin Ġproject Ġdirectory Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to Ġensure Ġthat Ġthey Ġare Ġformatted Ġaccording Ġto Ġk tl int ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Plugin Task ( plugin Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġproject Script Files ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Kotlin Script Format Task ( ĊĠĠĠĠĠĠĠ Ġplugin Holder : ĠPlugin Holder , ĊĠĠĠĠĠĠĠ Ġproject Script Files : ĠFile Tree ĊĠĠĠ Ġ): ĠTask Provider < K tl int Format Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplugin Holder . target . register Task ( K OT LIN _ SCRIPT _ FORMAT _ TASK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Format Ġall Ġ. k ts Ġfiles Ġin Ġproject Ġdirectory Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to Ġensure Ġthat Ġthey Ġare Ġformatted Ġaccording Ġto Ġk tl int ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Plugin Task ( plugin Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġproject Script Files ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠHelper Ġfunctions Ġused Ġuntil ĠGradle ĠScript ĠKotlin Ġsolid ifies Ġit 's Ġplugin ĠAPI . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠProject . the Helper () Ġ= ĊĠĠĠĠĠĠĠ Ġthe Helper ( T :: class ) ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > ĠProject . the Helper ( extension Type : ĠK Class < T >) Ġ= ĊĠĠĠĠĠĠĠ Ġconvention . find Plugin ( extension Type . java ) Ġ?: Ġconvention . getBy Type ( extension Type . java ) ĊĊĠĠĠ Ġprivate Ġfun ĠProject . is Console Plain () Ġ= Ġgradle . start Parameter . console Output Ġ== ĠConsole Output . Plain ĊĊĠĠĠ Ġinternal Ġclass ĠPlugin Holder ( ĊĠĠĠĠĠĠĠ Ġval Ġtarget : ĠProject ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġtarget . plugins . apply ( K tl int Base Plugin :: class . java ). extension ĊĊĠĠĠĠĠĠĠ Ġval Ġmeta K tl int Check Task : ĠTask Provider < Task > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . register Task < Task >( CHECK _ PARENT _ TASK _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠVER IFICATION _ GROUP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Runs Ġk tl int Ġon Ġall Ġkotlin Ġsources Ġin Ġthis Ġproject ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmeta K tl int Format Task : ĠTask Provider < Task > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . register Task < Task >( FORMAT _ PARENT _ TASK _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠFORM ATT ING _ GROUP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Runs Ġthe Ġk tl int Ġformatter Ġon Ġall Ġkotlin Ġsources Ġin Ġthis Ġproject ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġk tl int Configuration Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ Ġcreate K tl int Configuration ( target , Ġextension ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġk tl int Rule set Configuration Ġ= Ġcreate K tl int Rule set Configuration ( target ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġnot Ġscoped Ġinside Ġof Ġ[ K tl int Plugin ] Ġbecause Ġof Ġthese Ġissues : Ċ Ġ* Ġ Ġ- Ġhttps :// github . com / JL Le its ch uh / kt lint - gradle / issues / 2 0 1 Ċ Ġ* Ġ Ġ- Ġhttps :// github . com / gradle / gradle / issues / 8 4 1 1 Ċ Ġ*/ Ċ private Ġfun ĠBase Extension . add Variants Meta Tasks ( ĊĠĠĠ Ġtarget : ĠProject , ĊĠĠĠ Ġmulti platform Target Name : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġvariants ?. all Ġ{ Ġvariant Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġvariant Check Task Ġ= Ġtarget . create Android Variant Meta K tl int Check Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti platform Target Name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Format Task Ġ= Ġtarget . create Android Variant Meta K tl int Format Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti platform Target Name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvariant . source Sets . forEach Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource SetName Ġ= Ġ"${ multi platform Target Name ?. capitalize () Ġ?: Ġ"" }${ source Set . name . capitalize () }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Check Task . configure Ġ{ Ġit . depends On ( source SetName . source Set Check Task Name ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Format Task . configure Ġ{ Ġit . depends On ( source SetName . source Set Format Task Name ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠProject . create Android Variant Meta K tl int Check Task ( ĊĠĠĠ Ġvariant Name : ĠString , ĊĠĠĠ Ġmulti platform Target Name : ĠString ? Ġ= Ġnull Ċ ): ĠTask Provider < Task > Ġ= Ġregister Task ( variant Name . android Variant Meta Check Task Name ( multi platform Target Name )) Ġ{ ĊĠĠĠ Ġgroup Ġ= ĠVER IFICATION _ GROUP ĊĠĠĠ Ġdescription Ġ= Ġ" Runs Ġk tl int Ġon Ġall Ġkotlin Ġsources Ġfor Ġandroid Ġ$ variant Name Ġvariant Ġin Ġthis Ġproject ." Ċ } Ċ Ċ private Ġfun ĠProject . create Android Variant Meta K tl int Format Task ( ĊĠĠĠ Ġvariant Name : ĠString , ĊĠĠĠ Ġmulti platform Target Name : ĠString ? Ġ= Ġnull Ċ ): ĠTask Provider < Task > Ġ= Ġregister Task ( variant Name . android Variant Meta Format Task Name ( multi platform Target Name )) Ġ{ ĊĠĠĠ Ġgroup Ġ= ĠFORM ATT ING _ GROUP ĊĠĠĠ Ġdescription Ġ= Ġ" Runs Ġk tl int Ġformatter Ġon Ġall Ġkotlin Ġsources Ġfor Ġandroid Ġ$ variant Name " Ġ+ ĊĠĠĠĠĠĠĠ Ġ" Ġvariant Ġin Ġthis Ġproject ." Ċ } Ċ