All Downloads are FREE. Search and download functionalities are using the official Maven repository.

name.remal.gradle_plugins.dsl.extensions.org.gradle.testing.jacoco.tasks.JacocoMerge.kt Maven / Gradle / Ivy

There is a newer version: 1.9.2
Show newest version
package name.remal.gradle_plugins.dsl.extensions

import name.remal.newTempFile
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.testing.jacoco.tasks.JacocoMerge
import java.io.File
import java.lang.reflect.Method

private val jacocoMergeGetExecutionDataMethod: Method by lazy {
    JacocoMerge::class.java
        .getCompatibleMethod(FileCollection::class.java, "getExecutionData")
        .apply { isAccessible = true }
}
private val jacocoMergeSetExecutionDataMethod: Method by lazy {
    JacocoMerge::class.java
        .getCompatibleMethod("setExecutionData", FileCollection::class.java)
        .apply { isAccessible = true }
}
var JacocoMerge.executionDataCompatible: FileCollection
    get() = (jacocoMergeGetExecutionDataMethod.invoke(this) as? FileCollection) ?: project.files()
    set(value) {
        val executionData: FileCollection? = jacocoMergeGetExecutionDataMethod.invoke(this) as? FileCollection
        if (executionData == value) return
        if (executionData is ConfigurableFileCollection) {
            executionData.setFrom(value as Any)
        } else {
            jacocoMergeSetExecutionDataMethod.invoke(this, value)
        }
    }


fun JacocoMerge.prepareExecutionData() {
    var result = executionDataCompatible
    result = project.files(*result.files.filter(File::exists).toTypedArray())
    if (result.isEmpty) result = project.files(newTempFile("jacoco-", ".exec"))
    executionDataCompatible = result
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy