import Ġcom . android . build . gradle . Base Extension Ċ Ċ configure Root Project () Ċ Ċ sub projects Ġ{ ĊĠĠĠ Ġval Ġproject Ġ= Ġthis ĊĠĠĠ Ġif Ġ( should Not Ignore ( project )) Ġ{ ĊĠĠĠĠĠĠĠ Ġplugins . with Id (" org . jetbrains . kotlin . jvm ") Ġ{ Ġconfigure Kotlin Project ( project ) Ġ} ĊĠĠĠĠĠĠĠ Ġplugins . with Id (" com . android . library ") Ġ{ Ġconfigure Android Project ( project ) Ġ} ĊĠĠĠĠĠĠĠ Ġplugins . with Id (" com . android . application ") Ġ{ Ġconfigure Android Project ( project ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġconfigure Root Project () Ġ{ ĊĠĠĠ Ġapply J aco co ( root Project ) ĊĊĠĠĠ Ġval Ġj aco co Merge Ġ= Ġtasks . create < J aco co Merge >(" jac oco Merge ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdestination File Ġ= Ġfile ("$ build Dir / jac oco / jac oco Merge . exec ") ĊĠĠĠĠĠĠĠ Ġexecution Data ( all Execution Data ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtasks . create < J aco co Report >(" merge J aco co Test Report ") Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On Ġ= ĠlistOf ( jac oco Merge ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Dirs Ġ= Ġall Class Dirs (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Dirs Ġ= Ġsource Dirs (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec Data Ġ= Ġfiles ( jac oco Merge . destination File ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġconfigure Kotlin Project ( project : ĠProject ) Ġ{ ĊĠĠĠ Ġapply J aco co ( project ) ĊĊĠĠĠ Ġproject . tasks . named < J aco co Report >(" jac oco Test Report ") Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On Ġ= ĠlistOf (" test Debug UnitTest "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Dirs Ġ= Ġkotlin Class Dirs ( project ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Dirs Ġ= Ġsource Dirs (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec Data Ġ= Ġkotlin Execution Data ( project ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġconfigure Android Project ( project : ĠProject ) Ġ{ ĊĠĠĠ Ġapply J aco co ( project ) ĊĊĠĠĠ Ġproject . configure < Base Extension > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠA GP Ġshould Ġuse Ġsame Ġj aco co Ġversion ĊĠĠĠĠĠĠĠ Ġj aco co Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj aco co Version Ġ= ĠVersions . jac oco ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuild Types Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ByName (" debug ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Test Coverage Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġis Include No Location Classes Ġis Ġrequired Ġfor Ġro bo lectric Ġtests ĊĠĠĠ Ġproject . tasks . with Type < org . gradle . api . tasks . testing . Test > Ġ{ ĊĠĠĠĠĠĠĠ Ġextensions . configure < J aco co Task Extension >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Include No Location Classes Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / gradle / gradle / issues / 5 1 8 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexclude s Ġ= ĠlistOf (" jdk . internal .* ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġproject . tasks . create < J aco co Report >(" jac oco Test Report ") Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On Ġ= ĠlistOf (" test Debug UnitTest ", Ġ" create Debug Coverage Report "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Dirs Ġ= Ġandroid Class Dirs ( project ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Dirs Ġ= Ġsource Dirs (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec Data Ġ= Ġandroid Execution Data ( project ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġapply J aco co ( project : ĠProject ) Ġ{ ĊĠĠĠ Ġproject . plugins . apply (" jac oco ") ĊĠĠĠ Ġproject . configure < J aco co Plugin Extension > Ġ{ ĊĠĠĠĠĠĠĠ Ġtool Version Ġ= ĠVersions . jac oco ĊĠĠĠĠĠĠĠ Ġreports Directory . set ( file ("${ project . build Dir }/ reports ")) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" Un stable Api Usage ") Ċ fun ĠJ aco co Report . configure ( ĊĠĠĠ Ġdepends On : ĠIterable < Any >, ĊĠĠĠ Ġclass Dirs : ĠIterable <* >, ĊĠĠĠ Ġsource Dirs : ĠIterable <* >, ĊĠĠĠ Ġexec Data : ĠIterable < *> Ċ ) Ġ{ ĊĠĠĠ Ġgroup Ġ= Ġ" Reporting " ĊĠĠĠ Ġdescription Ġ= Ġ" Generate ĠJ aco co Ġcoverage Ġreports " ĊĊĠĠĠ Ġdepends On ( depends On ) ĊĊĠĠĠ Ġreports Ġ{ ĊĠĠĠĠĠĠĠ Ġxml . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcsv . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġhtml . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass Directories . set From ( class Dirs ) ĊĠĠĠ Ġadditional Class Dirs . set From ( class Dirs ) ĊĠĠĠ Ġsource Directories . set From ( source Dirs ) ĊĠĠĠ Ġadditional Source Dirs . set From ( source Dirs ) ĊĠĠĠ Ġexecution Data . set From ( exec Data ) Ċ } Ċ Ċ fun Ġsource Dirs (): ĠList < String > Ġ{ ĊĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" src / main / java ", ĊĠĠĠĠĠĠĠ Ġ" src / main / kotlin " ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun Ġkotlin Class Dirs ( project : ĠProject ): ĠConfigur able File Tree Ġ{ ĊĠĠĠ Ġreturn Ġfile Tree ( project . build Dir ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Exclude s ( excluded ()) ĊĠĠĠĠĠĠĠ Ġset Includes ( listOf (" **/ classes /** / main /** ")) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġandroid Class Dirs ( project : ĠProject ): ĠConfigur able File Tree Ġ{ ĊĠĠĠ Ġreturn Ġfile Tree ( project . build Dir ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Exclude s ( excluded ()) ĊĠĠĠĠĠĠĠ Ġset Includes ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" **/ inter medi ates / classes / debug /** ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" **/ inter medi ates / javac / debug /*/ classes /** ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" **/ tmp / kotlin - classes / debug /** " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġall Class Dirs (): ĠFile Collection Ġ{ ĊĠĠĠ Ġval Ġfiles Ġ= Ġfiles () ĊĠĠĠ Ġsub projects Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġif Ġ( should Not Ignore ( project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . from ( kotlin Class Dirs ( project )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . from ( android Class Dirs ( project )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfiles Ċ } Ċ Ċ fun Ġkotlin Execution Data ( project : ĠProject ): ĠFile Collection Ġ{ ĊĠĠĠ Ġreturn Ġfiles ( ĊĠĠĠĠĠĠĠ Ġ"${ project . build Dir }/ jac oco / test Debug UnitTest . exec " ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun Ġandroid Execution Data ( project : ĠProject ): ĠFile Collection Ġ{ ĊĠĠĠ Ġreturn Ġfile Tree ( project . build Dir ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Includes ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" jac oco / test Debug UnitTest . exec ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" outputs / code _ coverage /**/*. ec " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġall Execution Data (): ĠFile Collection Ġ{ ĊĠĠĠ Ġval Ġfiles Ġ= Ġfiles () ĊĠĠĠ Ġsub projects Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġif Ġ( should Not Ignore ( project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . from ( kotlin Execution Data ( project ). filter Ġ{ Ġit . exists () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . from ( android Execution Data ( project ). filter Ġ{ Ġit . exists () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfiles Ċ } Ċ Ċ fun Ġshould Not Ignore ( project : ĠProject ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġignored Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ": app ", ĊĠĠĠĠĠĠĠ Ġ": test : ui ", ĊĠĠĠĠĠĠĠ Ġ": test : domain ", ĊĠĠĠĠĠĠĠ Ġ": test : data " ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġ! ignored . contains ( project . path ) Ċ } Ċ Ċ fun Ġexcluded () Ġ= ĠlistOf ( ĊĠĠĠ Ġ" **/ R . class ", ĊĠĠĠ Ġ" **/ R $ *. class ", ĊĠĠĠ Ġ"** /* \$ *\ $ * .* ", ĊĠĠĠ Ġ" **/ Build Config .* ", ĊĠĠĠ Ġ" **/ Manifest * .* ", ĊĠĠĠ Ġ// Ġdagger ĊĠĠĠ Ġ"** /* D agger * .* ", ĊĠĠĠ Ġ"** /* Module * .* ", ĊĠĠĠ Ġ"** /* Members Injector * .* ", ĊĠĠĠ Ġ"** /* _ Provide * Factory * .* ", ĊĠĠĠ Ġ"** /* _ Factory * .* ", ĊĠĠĠ Ġ// Ġdata Ġbinding ĊĠĠĠ Ġ" **/ BR . class ", ĊĠĠĠ Ġ"** /* Binding .* ", ĊĠĠĠ Ġ"** /* Binding Impl * .* ", ĊĠĠĠ Ġ" **/ Data Binder Mapper Impl * .* ", ĊĠĠĠ Ġ" **/ Data Binding Info .* ", ĊĠĠĠ Ġ" **/ generated / callback /* ", ĊĠĠĠ Ġ// Ġnavigation Ġsafe - args ĊĠĠĠ Ġ"** /* Fragment Directions * .* ", ĊĠĠĠ Ġ"** /* Fragment Args * .* ", ĊĠĠĠ Ġ"** /* Dialog Args * .* " Ċ ) Ċ