From 457b03b7cb89c555329e6bb4d8597f62d5129af4 Mon Sep 17 00:00:00 2001 From: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Date: Tue, 21 Sep 2021 21:07:42 +0530 Subject: [PATCH] Update file filters (#4640) --- jacoco.gradle | 132 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 88 insertions(+), 44 deletions(-) diff --git a/jacoco.gradle b/jacoco.gradle index a7cef0a78..c9a08a11e 100644 --- a/jacoco.gradle +++ b/jacoco.gradle @@ -4,58 +4,102 @@ jacoco { toolVersion = "0.8.7" } -android { - testOptions { - unitTests.all { - jacoco { - includeNoLocationClasses = true - } - } - } +tasks.withType(Test) { + jacoco.includeNoLocationClasses = true + jacoco.excludes = ['jdk.internal.*'] + // see related issue https://github.com/gradle/gradle/issues/5184#issuecomment-457865951 } project.afterEvaluate { - android.applicationVariants.all { variant -> - def name = variant.name - def testTaskName = "test${name.capitalize()}UnitTest" + (android.hasProperty('applicationVariants') + ? android.'applicationVariants' + : android.'libraryVariants') + .all { variant -> + def variantName = variant.name + def unitTestTask = "test${variantName.capitalize()}UnitTest" - tasks.create(name: "${testTaskName}Coverage", type: JacocoReport, dependsOn: "$testTaskName") { - group = "Reporting" - description = "Generate Jacoco coverage reports for the ${name.capitalize()} build." + tasks.create(name: "${unitTestTask}Coverage", type: JacocoReport, dependsOn: [ + "$unitTestTask" + ]) { + group = "Reporting" + description = "Generate Jacoco coverage reports for the ${variantName.capitalize()} build" - def fileFilter = ['**/R.class', - '**/R$*.class', - '**/*$ViewInjector*.*', - '**/*$ViewBinder*.*', - '**/BuildConfig.*', - '**/Manifest*.*', - '**/*Test*.*', - 'android/**/*.*'] + reports { + html.enabled = true + xml.enabled = true + } - //java compiled classes - def javaTree = fileTree( - dir: "${buildDir}/intermediates/classes/${name}", - excludes: fileFilter - ) - //kotlin compiled classes - def kotlinTree = fileTree( - dir: "${buildDir}/tmp/kotlin-classes/${name}", - excludes: fileFilter - ) - def mainSrc = "${project.projectDir}/src/main/java" + def excludes = [ + // data binding + 'android/databinding/**/*.class', + '**/android/databinding/*Binding.class', + '**/android/databinding/*', + '**/androidx/databinding/*', + '**/BR.*', + // android + '**/R.class', + '**/R$*.class', + '**/BuildConfig.*', + '**/Manifest*.*', + '**/*Test*.*', + 'android/**/*.*', + // butterKnife + '**/*$ViewInjector*.*', + '**/*$ViewBinder*.*', + '**/*ViewBinding*.*', + // dagger + '**/*_MembersInjector.class', + '**/Dagger*Component.class', + '**/Dagger*Component$Builder.class', + '**/*Module_*Factory.class', + '**/di/module/*', + '**/*_Factory*.*', + '**/*Module*.*', + '**/*Dagger*.*', + '**/*Hilt*.*', + // kotlin + '**/*MapperImpl*.*', + '**/*$ViewInjector*.*', + '**/*$ViewBinder*.*', + '**/BuildConfig.*', + '**/*Component*.*', + '**/*BR*.*', + '**/Manifest*.*', + '**/*$Lambda$*.*', + '**/*Companion*.*', + '**/*Module*.*', + '**/*Dagger*.*', + '**/*Hilt*.*', + '**/*MembersInjector*.*', + '**/*_MembersInjector.class', + '**/*_Factory*.*', + '**/*_Provide*Factory*.*', + '**/*Extensions*.*', + // sealed and data classes + '**/*$Result.*', + '**/*$Result$*.*' + ] - sourceDirectories.setFrom(files([mainSrc])) - classDirectories.setFrom(files([javaTree, kotlinTree])) - executionData.setFrom(fileTree(dir: "${buildDir}", includes: [ - "jacoco/${testTaskName}.exec", - "outputs/code-coverage/connected/*coverage.ec" - ])) + def javaClasses = fileTree(dir: variant.javaCompileProvider.get().destinationDir, + excludes: excludes) + def kotlinClasses = fileTree(dir: "${buildDir}/tmp/kotlin-classes/${variantName}", + excludes: excludes) + + classDirectories.setFrom(files([ + javaClasses, + kotlinClasses + ])) + + def variantSourceSets = variant.sourceSets.java.srcDirs.collect { it.path }.flatten() + sourceDirectories.setFrom(project.files(variantSourceSets)) + + executionData(files([ + "$project.buildDir/jacoco/${unitTestTask}.exec" + ])) + } - reports { - xml.enabled = true - html.enabled = true } - } - } + + } \ No newline at end of file