@@ -2,18 +2,32 @@ package datadog.gradle.plugin.muzzle.tasks
22
33import datadog.gradle.plugin.muzzle.MuzzleAction
44import datadog.gradle.plugin.muzzle.MuzzleDirective
5+ import datadog.gradle.plugin.muzzle.MuzzleExtension
56import datadog.gradle.plugin.muzzle.allMainSourceSet
6- import org.gradle.api.NamedDomainObjectProvider
77import org.gradle.api.Project
88import org.gradle.api.artifacts.Configuration
99import org.gradle.api.file.FileCollection
1010import org.gradle.api.invocation.BuildInvocationDetails
11+ import org.gradle.api.provider.Property
12+ import org.gradle.api.tasks.Input
13+ import org.gradle.api.tasks.InputFiles
14+ import org.gradle.api.tasks.Optional
15+ import org.gradle.api.tasks.TaskAction
1116import org.gradle.jvm.toolchain.JavaLanguageVersion
1217import org.gradle.jvm.toolchain.JavaToolchainService
18+ import org.gradle.kotlin.dsl.getByType
1319import org.gradle.workers.WorkerExecutor
1420import javax.inject.Inject
1521
1622abstract class MuzzleTask : AbstractMuzzleTask () {
23+ override fun getDescription (): String {
24+ return if (muzzleDirective.isPresent) {
25+ " Run instrumentation muzzle on ${muzzleDirective.get().name} dependency"
26+ } else {
27+ " Run instrumentation muzzle on compile time dependencies"
28+ }
29+ }
30+
1731 @get:Inject
1832 abstract val javaToolchainService: JavaToolchainService
1933
@@ -23,12 +37,30 @@ abstract class MuzzleTask : AbstractMuzzleTask() {
2337 @get:Inject
2438 abstract val workerExecutor: WorkerExecutor
2539
26- fun assertMuzzle (
27- muzzleBootstrap : NamedDomainObjectProvider <Configuration >,
28- muzzleTooling : NamedDomainObjectProvider <Configuration >,
29- instrumentationProject : Project ,
30- muzzleDirective : MuzzleDirective ? = null
31- ) {
40+ @get:InputFiles
41+ abstract val muzzleBootstrap: Property <Configuration >
42+
43+ @get:InputFiles
44+ abstract val muzzleTooling: Property <Configuration >
45+
46+ @get:Input
47+ @get:Optional
48+ abstract val muzzleDirective : Property <MuzzleDirective >
49+
50+ @TaskAction
51+ fun muzzle () {
52+ when {
53+ ! project.extensions.getByType<MuzzleExtension >().directives.any { it.assertPass } -> {
54+ project.logger.info(" No muzzle pass directives configured. Asserting pass against instrumentation compile-time dependencies" )
55+ assertMuzzle()
56+ }
57+ muzzleDirective.isPresent -> {
58+ assertMuzzle(muzzleDirective.get())
59+ }
60+ }
61+ }
62+
63+ private fun assertMuzzle (muzzleDirective : MuzzleDirective ? = null) {
3264 val workQueue = if (muzzleDirective?.javaVersion != null ) {
3365 val javaLauncher = javaToolchainService.launcherFor {
3466 languageVersion.set(JavaLanguageVersion .of(muzzleDirective.javaVersion!! ))
@@ -43,10 +75,10 @@ abstract class MuzzleTask : AbstractMuzzleTask() {
4375 }
4476 workQueue.submit(MuzzleAction ::class .java) {
4577 buildStartedTime.set(invocationDetails.buildStartedTime)
46- bootstrapClassPath.setFrom(muzzleBootstrap.get() )
47- toolingClassPath.setFrom(muzzleTooling.get() )
48- instrumentationClassPath.setFrom(createAgentClassPath(instrumentationProject ))
49- testApplicationClassPath.setFrom(createMuzzleClassPath(instrumentationProject , name))
78+ bootstrapClassPath.setFrom(muzzleBootstrap)
79+ toolingClassPath.setFrom(muzzleTooling)
80+ instrumentationClassPath.setFrom(createAgentClassPath(project ))
81+ testApplicationClassPath.setFrom(createMuzzleClassPath(project , name))
5082 if (muzzleDirective != null ) {
5183 assertPass.set(muzzleDirective.assertPass)
5284 this .muzzleDirective.set(muzzleDirective.name ? : muzzleDirective.module)
0 commit comments