ghidra/gradle/root/jacoco.gradle
2024-06-12 10:04:40 -04:00

97 lines
3.2 KiB
Groovy

/* ###
* IP: GHIDRA
*
* 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.
*/
import groovy.io.FileType;
apply plugin:'jacoco'
dependencies {
jacocoAnt 'org.jacoco:org.jacoco.ant:0.8.11'
jacocoAgent 'org.jacoco:org.jacoco.agent:0.8.11'
}
/*********************************************************************************
* Generate the Jacoco excludes list from file (this will strip out comments and
* whitespace).
*
* This uses 'gradle/support/jacoco.excludes.src.txt' to generate list of
* class exclusions for the 'jacocoReport' task.
*
* Task to generate an aggregate jacoco report from subprojects with
* Java sourceSets
*********************************************************************************/
def String[] generateExcludesList() {
File inputFile = new File(rootProject.projectDir, "gradle/support/jacoco.excludes.src.txt")
def lines = inputFile.readLines()
.findAll({ line ->
!shouldIgnoreLine(line)
})
.collect()
return lines
}
/* An ignorable line is one that is only whitespace or that starts with a comment marker */
def shouldIgnoreLine(line) {
if (line.startsWith('#')){
return true
}
if (line.startsWith("//")) {
return true
}
if (line.trim().isEmpty()) {
return true
}
return false
}
List excludesList = generateExcludesList()
/*********************************************************************************
* Task to generate an aggregate jacoco report from subprojects with
* Java sourceSets
*********************************************************************************/
task jacocoReport(type: JacocoReport, group: 'Coverage reports') {
description = 'Generates an aggregate Jacoco report from all subprojects'
dependsOn { subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.test }
dependsOn { subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.integrationTest }
executionData fileTree(rootDir) {
include '**/*.exec'
}
// Setting these source/class dirs MUST be done in the configuration phase (we used
// to do it in a doFirst block but that was deprecated in later gradle builds). However,
// we have to delay evaluation of the subprojects (using the '{ }' notation) to wait for
// some project attributes (eg: 'sourceSets') to be made available.
additionalSourceDirs files({ subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.sourceSets.main.java.srcDirs })
additionalClassDirs files({ subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.sourceSets.main.output }).asFileTree.matching {
exclude excludesList
}
reports {
html {
required
outputLocation = new File(rootDir.absolutePath + "/jacocoReport")
}
xml { }
}
}