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 . artifacts . Configuration Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . file . File Tree Ċ import Ġorg . gradle . api . file . Source Directory Set Ċ import Ġorg . gradle . api . internal . Has Convention Ċ import Ġorg . gradle . api . logging . configuration . Console Output Ċ import Ġorg . gradle . api . plugins . Convention Ċ import Ġorg . gradle . api . plugins . Java Plugin Convention Ċ 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 . plugin . Kotlin Platform Type Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Source Set Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . experimental . Kotlin Native Component Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . kon an . Kon an Artifact Container Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . kon an . Kon an Extension Ċ import Ġshadow . org . jetbrains . kotlin . gradle . plugin . tasks . Kon an Compile Task Ċ 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 (" kotlin - platform - common ", Ġapply Kt Lint ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" kotlin - android ", Ġapply Kt Lint To Android ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id (" kon an ", Ġapply Kt Lint Kon an Native ()) ĊĠĠĠĠĠĠĠ Ġtarget . plugins . with Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" org . jetbrains . kotlin . native ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Kt Lint Native () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ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 Ġkt Lint Config Ġ= Ġcreate Configuration ( target , Ġextension ) ĊĠĠĠĠĠĠĠ Ġ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 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Lint Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Lint Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . apply Kt Lint (): Ġ( Plugin < in ĠAny >) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Lint Config Ġ= Ġcreate Configuration ( target , Ġextension ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Sets Ġ= Ġtarget . the Helper < Java Plugin Convention >(). source Sets ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sets . all Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Source Set : ĠSource Directory Set Ġ= Ġ( source Set Ġas ĠHas Convention ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. convention ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Plugin Helper < Kotlin Source Set >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. kotlin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Task Ġ= Ġcreate Check Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Lint Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Source Set . 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 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Lint Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Source Set . 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 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Lint Config Ġ= Ġcreate Configuration ( target , Ġextension ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate Tasks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources : ĠFile Collection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Task Ġ= Ġcreate Check Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Lint Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Lint Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . apply Kt Lint Kon an Native (): Ġ( Plugin < in ĠAny >) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Lint Config Ġ= Ġcreate Configuration ( target , Ġextension ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompile Targets Ġ= Ġtarget . the Helper < Kon an Extension >(). targets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . the Helper < Kon an Artifact Container >(). when Object Added Ġ{ Ġbuild Config Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Tasks For Native Plugin ( build Config . name , Ġkt Lint Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Targets . fold ( initial Ġ= Ġempty List ()) Ġ{ Ġacc , Ġtarget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompile Task Ġ= Ġbuild Config . findBy Target ( target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compile Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Files Ġ= Ġ( compile Task Ġas ĠKon an Compile Task ). src Files ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġsource Files ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . apply Kt Lint Native (): Ġ( Plugin < in ĠAny >) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Lint Config Ġ= Ġcreate Configuration ( target , Ġextension ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . components . with Type ( Kotlin Native Component :: class . java ) Ġ{ Ġcomponent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Tasks For Native Plugin ( component . name , Ġkt Lint Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent . kon an Targets . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( initial Ġ= Ġempty List ()) Ġ{ Ġacc , Ġnative Target Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ ĠlistOf ( component . sources . getAll Sources ( native Target )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPlugin Holder . add Tasks For Native Plugin ( ĊĠĠĠĠĠĠĠ Ġsource SetName : ĠString , ĊĠĠĠĠĠĠĠ Ġk tl int Configuration : ĠConfiguration , ĊĠĠĠĠĠĠĠ Ġgather Variant Sources : Ġ() Ġ-> ĠList < File Collection > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Directories List Ġ= Ġgather Variant Sources () ĊĠĠĠĠĠĠĠ Ġif Ġ( source Directories List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Task Ġ= Ġcreate Check Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk tl int Configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Directories List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource SetName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk tl int Configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Directories List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd K tl int Format Task To Project Meta Format Task ( kt lint Source Set Format Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠProject , ĊĠĠĠĠĠĠĠ Ġextension : ĠK tl int Extension , ĊĠĠĠĠĠĠĠ Ġsource SetName : ĠString , ĊĠĠĠĠĠĠĠ Ġkt Lint Config : ĠConfiguration , ĊĠĠĠĠĠĠĠ Ġkotlin Source Directories : ĠIterable < *> ĊĠĠĠ Ġ): ĠTask Provider < K tl int Format Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ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 ( target , Ġextension , Ġkt Lint Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Source ( kotlin Source Directories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Check Task ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠProject , ĊĠĠĠĠĠĠĠ Ġextension : ĠK tl int Extension , ĊĠĠĠĠĠĠĠ Ġsource SetName : ĠString , ĊĠĠĠĠĠĠĠ Ġkt Lint Config : ĠConfiguration , ĊĠĠĠĠĠĠĠ Ġkotlin Source Directories : ĠIterable < *> ĊĠĠĠ Ġ): ĠTask Provider < K tl int Check Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ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 ( target , Ġextension , Ġkt Lint Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Source ( kotlin Source Directories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠK tl int Check Task . configure Plugin Task ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠProject , ĊĠĠĠĠĠĠĠ Ġextension : ĠK tl int Extension , ĊĠĠĠĠĠĠĠ Ġkt Lint Config : ĠConfiguration , ĊĠĠĠĠĠĠĠ Ġadditional Config : ĠK tl int Check Task . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclasspath . set From ( kt Lint Config ) ĊĠĠĠĠĠĠĠ Ġk tl int Version . set ( extension . version ) ĊĠĠĠĠĠĠĠ Ġverbose . set ( extension . verbose ) ĊĠĠĠĠĠĠĠ Ġdebug . set ( extension . debug ) ĊĠĠĠĠĠĠĠ Ġignore Failures . set ( extension . ignore Failures ) ĊĠĠĠĠĠĠĠ Ġoutput To Console . set ( extension . output To Console ) ĊĠĠĠĠĠĠĠ Ġcolored Output . set ( extension . colored Output . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target . is Console Plain ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . logger . info (" Console Ġtype Ġis Ġplain : Ġdisabling Ġcolored Ġoutput ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġrule Sets . set ( extension . rule Sets ) ĊĠĠĠĠĠĠĠ Ġreport ers . set ( extension . report ers ) ĊĠĠĠĠĠĠĠ Ġandroid . set ( extension . android ) ĊĠĠĠĠĠĠĠ Ġenable Experimental Rules . set ( extension . enable Experimental Rules ) ĊĊĠĠĠĠĠĠĠ Ġadditional 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 Ġkt Lint Config Ġ= Ġcreate Configuration ( target , Ġextension ) ĊĊĠĠĠĠĠĠĠ Ġ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 ( target , Ġextension , Ġkt Lint Config , Ġ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 ( target , Ġextension , Ġkt Lint Config , Ġproject Directory Script Files ) ĊĠĠĠĠĠĠĠ Ġadd K tl int Format Task To Project Meta Format Task ( format Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Kotlin Script Check Task ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠProject , ĊĠĠĠĠĠĠĠ Ġextension : ĠK tl int Extension , ĊĠĠĠĠĠĠĠ Ġkt Lint Config : ĠConfiguration , ĊĠĠĠĠĠĠĠ Ġproject Script Files : ĠFile Tree ĊĠĠĠ Ġ): ĠTask Provider < K tl int Check Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ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 ( target , Ġextension , Ġkt Lint Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġproject Script Files ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Kotlin Script Format Task ( ĊĠĠĠĠĠĠĠ Ġtarget : ĠProject , ĊĠĠĠĠĠĠĠ Ġextension : ĠK tl int Extension , ĊĠĠĠĠĠĠĠ Ġkt Lint Config : ĠConfiguration , ĊĠĠĠĠĠĠĠ Ġproject Script Files : ĠFile Tree ĊĠĠĠ Ġ): ĠTask Provider < K tl int Format Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ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 ( target , Ġextension , Ġkt Lint Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Ġinline Ġfun Ġ< re ified ĠT > ĠCon vention . get Plugin Helper () Ġ= Ġget Plugin ( T :: class . 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 ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ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 ." Ċ } Ċ