/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . build . jac oco Ċ Ċ import Ġandroidx . build . get Distribution Directory Ċ import Ġandroidx . build . getRoot Out Directory Ċ import Ġandroidx . build . gradle . is Root Ċ import Ġcom . android . build . gradle . Tested Extension Ċ import Ġcom . google . common . base . Preconditions Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . api . file . Configurable File Tree Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġorg . gradle . api . tasks . bund ling . Jar Ċ import Ġorg . gradle . api . tasks . bund ling . Zip Ċ Ċ object ĠJ aco co Ġ{ ĊĠĠĠ Ġconst Ġval ĠVERSION Ġ= Ġ" 0 . 8 . 3 " ĊĠĠĠ Ġprivate Ġconst Ġval ĠAN T _ DEPEND ENCY Ġ= Ġ" org . jac oco : org . jac oco . ant :$ VERSION " ĊĠĠĠ Ġprivate Ġconst Ġval ĠEC _ FILE _ ZIP _ TASK _ NAME Ġ= Ġ" zip Ec Files " ĊĊĠĠĠ Ġfun Ġcreate U ber Jar Task ( project : ĠProject ): ĠTask Provider < Jar > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġ" uber " Ġj aco co Ġjar Ġis Ġused Ġby Ġthe Ġbuild Ġserver . ĠInstrument ation Ġtests Ġare Ġexecuted ĊĠĠĠĠĠĠĠ Ġ// Ġoutside Ġof ĠGradle Ġand Ġthis Ġis Ġneeded Ġto Ġprocess Ġthe Ġcoverage Ġfiles . ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġproject . configurations . create (" my J aco co ") ĊĠĠĠĠĠĠĠ Ġconfig . dependencies . add ( project . dependencies . create ( ANT _ DEPEND ENCY )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġproject . tasks . register (" jac oco Ant U ber Jar ", ĠJar :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . inputs . files ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Artifacts Ġ= Ġconfig . resolved Configuration . resolved Artifacts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . from ( resolved Artifacts . map Ġ{ Ġproject . zip Tree ( it . file ) Ġ}) Ġ{ Ġcopy Spec Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Spec . exclude (" META - INF /*. SF ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Spec . exclude (" META - INF /*. D SA ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Spec . exclude (" META - INF /*. RSA ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . destination Directory . set ( project . get Distribution Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . archive FileName . set (" jac oco ant . jar ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Class Files Task ( project : ĠProject , Ġextension : ĠTested Extension ) Ġ{ ĊĠĠĠĠĠĠĠ Ġextension . test Variants . all Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v . build Type . is Test Coverage Enabled Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . source Sets . any Ġ{ Ġit . java Directories . isNotEmpty () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar ify Task Ġ= Ġproject . tasks . register ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package ${ v . name . capitalize ()} Class Files For Coverage Report ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJar :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . depends On ( v . tested Variant . java Compile Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġusing Ġget () Ġhere Ġforces Ġtask Ġconfiguration , Ġbut Ġis Ġnecessary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġobtain Ġa Ġvalid Ġvalue Ġfor Ġdestination Dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . from ( v . tested Variant . java Compile Provider . get (). destination Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exclude (" **/ R . class ", Ġ" **/ R \$ *. class ", Ġ" **/ Build Config . class ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . destination Directory . set ( project . build Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . archive FileName . set ("${ project . name }-${ v . base Name }- allclasses . jar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . root Project . tasks . named ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package All Class Files For Coverage Report ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJar :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). configure Ġ{ Ġit . from ( jar ify Task ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Coverage Jar Task ( project : ĠProject ): ĠTask Provider < Jar > Ġ{ ĊĠĠĠĠĠĠĠ ĠPreconditions . check Argument ( project . is Root , Ġ" Must Ġbe Ġroot Ġproject ") ĊĠĠĠĠĠĠĠ Ġ// ĠPackage Ġthe Ġindividual Ġ* - allclasses . jar Ġfiles Ġtogether Ġto Ġgenerate Ġcode Ġcoverage Ġreports ĊĠĠĠĠĠĠĠ Ġreturn Ġproject . tasks . register ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" package All Class Files For Coverage Report ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJar :: class . java ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . destination Directory . set ( project . get Distribution Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . archive FileName . set (" jac oco - report - classes . jar ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġtask Ġthat Ġwill Ġzip Ġthe Ġ. ec Ġand Ġ. exec Ġcode Ġexecution Ġfiles Ġproduced Ġby Ġj aco co ĊĠĠĠĠ Ġ* ĠThis Ġis Ġrun Ġby Ġour Ġbus yt own Ġcommands Ġthat Ġcollect Ġand Ġreport Ġcoverage Ġinformation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Zip Ec Files Task ( project : ĠProject ): ĠTask Provider < Zip > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠExamples Ġof Ġthe Ġtwo Ġtypes Ġof Ġec Ġfile Ġ: ĊĠĠĠĠĠĠĠ Ġ// Ġ"./ out / android x / ads - identifier - common / build / outputs / code _ coverage / debug Android Test / connected / coverage . ec " ĊĠĠĠĠĠĠĠ Ġ// Ġ./ out / android x / lifecycle / lifecycle - runtime - k tx - lint / build / jac oco / test . exec ĊĠĠĠĠĠĠĠ ĠPreconditions . check Argument ( project . is Root , Ġ" Must Ġbe Ġroot Ġproject ") ĊĠĠĠĠĠĠĠ Ġvar Ġec Files Tree : ĠConfigur able File Tree Ġ= Ġproject . file Tree ( map Of (" dir " Ġto Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getRoot Out Directory (), Ġ" include " Ġto ĠlistOf (" **/ jac oco /*. exec ", Ġ" **/ coverage . ec "))) ĊĠĠĠĠĠĠĠ Ġval Ġzip Task Ġ= Ġproject . tasks . register ( EC _ FILE _ ZIP _ TASK _ NAME , ĠZip :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . from ( ec Files Tree ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . archive FileName . set (" coverage _ ec _ files . zip ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . destination Directory . set ( project . get Distribution Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . include Empty Dirs Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . description Ġ= Ġ" Task Ġfor Ġcreating Ġa Ġzip Ġfile Ġfrom Ġall Ġof Ġthe Ġ. ec Ġand Ġ. exec Ġfiles Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" created Ġas Ġpart Ġof Ġhost - side Ġtest Ġcoverage Ġanalysis Ġwith Ġj aco co ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġzip Task ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġexecution - file - z ipping - task Ġassociated Ġwith Ġthe Ġroot Ġproject . ĊĠĠĠĠ Ġ* ĠThis Ġshould Ġonly Ġbe Ġcalled Ġafter Ġthe Ġtask Ġis Ġcreated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Zip Ec Files Task ( project : ĠProject ): ĠTask Provider < Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject . root Project . tasks . named ( EC _ FILE _ ZIP _ TASK _ NAME ) ĊĠĠĠ Ġ} Ċ } Ċ