Skip to content

Commit 078b9dc

Browse files
committed
report-optimizing
1 parent 44690ab commit 078b9dc

File tree

1 file changed

+25
-99
lines changed

1 file changed

+25
-99
lines changed

build-logic/src/main/java/conventions/ProjectJacocoConventionPlugin.kt

Lines changed: 25 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -43,112 +43,38 @@ class ProjectJacocoConventionPlugin : Plugin<Project> {
4343
with(pluginManager) {
4444
apply("jacoco")
4545
}
46-
tasks.register("createMergedJacocoReport") {
46+
tasks.register<JacocoReport>("MergeHTMLJacocoReports") {
4747
val jacocoReport = this
4848
group = "Reporting"
49-
description = "Generate test coverage reports on the debug build"
49+
description = "Merge all generated JacocoReport"
50+
logger.quiet("======Merging HTML Reports=========")
51+
val javaClasses: MutableCollection<String> = mutableListOf()
52+
val kotlinClasses: MutableCollection<String> = mutableListOf()
53+
val sourceDir: MutableCollection<String> = mutableListOf()
54+
val coverageFiles: MutableCollection<String> = mutableListOf()
5055
subprojects {
51-
val subproject = this
52-
subproject.plugins.withType<JacocoPlugin>().configureEach {
53-
if (tasks.findByName("createDemoDebugJacocoReport") != null) {
54-
val moduleTask = tasks.findByName("createDemoDebugJacocoReport")
55-
jacocoReport.dependsOn(moduleTask)
56-
}
56+
val subProject = this
57+
subProject.plugins.withType<JacocoPlugin>().configureEach {
58+
val moduleTask = tasks.findByName("createDemoDebugJacocoReport")
59+
jacocoReport.dependsOn(moduleTask)
60+
javaClasses.add("${subProject.buildDir}/intermediates/javac/demoDebug/classes")
61+
kotlinClasses.add("${subProject.buildDir}/tmp/kotlin-classes/demoDebug")
62+
sourceDir.add("${subProject.projectDir}/src/main/java")
63+
sourceDir.add("${subProject.projectDir}/src/main/kotlin")
64+
sourceDir.add("${subProject.projectDir}/src/demoDebug/java")
65+
coverageFiles.add("${subProject.buildDir}/outputs/unit_test_code_coverage/demoDebugUnitTest/testDemoDebugUnitTest.exec")
66+
coverageFiles.add("${subProject.buildDir}/outputs/code_coverage/demoDebugAndroidTest/connected/coverage.ec")
5767
}
5868
}
59-
doLast {
60-
logger.lifecycle("Making Overall coverage report")
61-
addReportMergingTask()
62-
val metrics = mutableMapOf<String, Map<String, Double>>()
63-
val moduleLimits = mutableMapOf<String, Map<String, Double>>()
64-
val failures = mutableMapOf<String, List<String>>()
65-
66-
if (!extra.has("limits")) {
67-
setProjectTestCoverageLimits()
68-
}
69-
subprojects {
70-
if (tasks.findByName("createDemoDebugJacocoReport") != null) {
71-
val reportDir = jacoco.reportsDirectory.asFile.get()
72-
val report =
73-
file("$reportDir/createDemoDebugJacocoReport/createDemoDebugJacocoReport.xml")
74-
if (report.exists()) {
75-
logger.lifecycle("Checking coverage results:$report")
76-
metrics[project.name] = report.extractTestCoverage()
77-
moduleLimits[project.name] =
78-
project.extra["limits"] as Map<String, Double>
79-
}
80-
}
81-
}
82-
metrics.forEach { (key, metricsMap) ->
83-
val extractedMetricsMap = mutableMapOf<String, Double>()
84-
if (metricsMap.isNotEmpty()) {
85-
val failureMap = metricsMap.filter { item ->
86-
item.value < moduleLimits[key]!![item.key]!!
87-
}.map { item ->
88-
extractedMetricsMap[item.key] = item.value
89-
"-${item.key} coverage is: ${item.value}%, minimum is ${moduleLimits[item.key]}%"
90-
}
91-
if (failureMap.isNotEmpty()) {
92-
failures[key] = failureMap
93-
}
94-
}
95-
moduleLimits[key] = extractedMetricsMap
96-
}
97-
98-
99-
if (failures.isNotEmpty()) {
100-
logger.quiet("======Code coverage failures=========")
101-
failures.forEach { entry ->
102-
logger.quiet("======Module: ${entry.key}=========")
103-
entry.value.forEach { logger.quiet(it) }
104-
}
105-
logger.quiet("===========================================")
106-
}
107-
108-
if (metrics.isNotEmpty()) {
109-
logger.quiet("======Code coverage success=========")
110-
metrics.forEach { entry ->
111-
logger.quiet("======Module: ${entry.key}=========")
112-
entry.value.forEach {
113-
logger.quiet("- ${it.key} coverage: ${it.value}")
114-
}
115-
}
116-
logger.quiet("===========================================")
117-
}
69+
classDirectories.setFrom(files(javaClasses, kotlinClasses))
70+
additionalClassDirs.setFrom(files(sourceDir))
71+
sourceDirectories.setFrom(files(sourceDir))
72+
executionData.setFrom(files(coverageFiles))
73+
reports {
74+
xml.required.set(true)
75+
html.required.set(true)
11876
}
119-
12077
}
121-
122-
12378
}
12479
}
125-
126-
private fun Project.addReportMergingTask() {
127-
tasks.register<JacocoReport>("MergeHTMLJacocoReports") {
128-
logger.quiet("======Merging HTML Reports=========")
129-
val javaClasses :MutableCollection<String> = mutableListOf()
130-
val kotlinClasses :MutableCollection<String> = mutableListOf()
131-
val sourceDir :MutableCollection<String> = mutableListOf()
132-
val coverageFiles :MutableCollection<String> = mutableListOf()
133-
subprojects.forEach { subProject ->
134-
javaClasses.add("${subProject.buildDir}/intermediates/javac/demoDebug/classes")
135-
kotlinClasses.add("${subProject.buildDir}/tmp/kotlin-classes/demoDebug")
136-
sourceDir.add( "${subProject.projectDir}/src/main/java")
137-
sourceDir.add( "${subProject.projectDir}/src/main/kotlin")
138-
sourceDir.add( "${subProject.projectDir}/src/demoDebug/java")
139-
coverageFiles.add("${subProject.buildDir}/outputs/unit_test_code_coverage/demoDebugUnitTest/testDemoDebugUnitTest.exec")
140-
coverageFiles.add("${subProject.buildDir}/outputs/code_coverage/demoDebugAndroidTest/connected/coverage.ec")
141-
}
142-
classDirectories.setFrom(files(javaClasses, kotlinClasses))
143-
additionalClassDirs.setFrom(files(sourceDir))
144-
sourceDirectories.setFrom(files(sourceDir))
145-
executionData.setFrom(files(coverageFiles))
146-
reports {
147-
xml.required.set(true)
148-
html.required.set(true)
149-
}
150-
}
151-
152-
}
153-
15480
}

0 commit comments

Comments
 (0)