11package datadog.gradle.plugin.muzzle
22
3- import datadog.gradle.plugin.muzzle.MuzzleMavenRepoUtils.inverseOf
4- import datadog.gradle.plugin.muzzle.MuzzleMavenRepoUtils.muzzleDirectiveToArtifacts
5- import datadog.gradle.plugin.muzzle.MuzzleMavenRepoUtils.resolveVersionRange
63import datadog.gradle.plugin.muzzle.tasks.MuzzleEndTask
74import datadog.gradle.plugin.muzzle.tasks.MuzzleGenerateReportTask
85import datadog.gradle.plugin.muzzle.tasks.MuzzleGetReferencesTask
96import datadog.gradle.plugin.muzzle.tasks.MuzzleMergeReportsTask
107import datadog.gradle.plugin.muzzle.tasks.MuzzleTask
8+ import datadog.gradle.plugin.muzzle.planner.MuzzleTaskPlanner
119import org.eclipse.aether.artifact.Artifact
1210import org.gradle.api.NamedDomainObjectProvider
1311import org.gradle.api.Plugin
@@ -101,14 +99,15 @@ class MuzzlePlugin : Plugin<Project> {
10199 project.tasks.register<MuzzleMergeReportsTask >(" mergeMuzzleReports" )
102100
103101 val hasRelevantTask = project.gradle.startParameter.taskNames.any { taskName ->
104- // removing leading ':' if present
105- val muzzleTaskName = taskName.removePrefix (" :" )
106- val projectPath = project.path.removePrefix( " : " )
107- muzzleTaskName == " muzzle " || " $projectPath :muzzle " == muzzleTaskName ||
108- muzzleTaskName == " runMuzzle "
102+ val taskProjectPath = taskName.substringBeforeLast( " : " , " " )
103+ val taskNameOnly = taskName.substringAfterLast (" :" )
104+ val isRelevantForProject = taskProjectPath.isEmpty() || taskProjectPath == project.path
105+
106+ isRelevantForProject && taskNameOnly.endsWith( " muzzle " , ignoreCase = true )
109107 }
110108 if (! hasRelevantTask) {
111109 // Adding muzzle dependencies has a large config overhead. Stop unless muzzle is explicitly run.
110+ project.logger.info(" No muzzle tasks invoked for ${project.path} , skipping muzzle task planification" )
112111 return
113112 }
114113
@@ -117,40 +116,19 @@ class MuzzlePlugin : Plugin<Project> {
117116
118117 val system = MuzzleMavenRepoUtils .newRepositorySystem()
119118 val session = MuzzleMavenRepoUtils .newRepositorySystemSession(system)
119+ val taskPlanner = MuzzleTaskPlanner .from(system, session)
120120 project.afterEvaluate {
121121 // use runAfter to set up task finalizers in version order
122122 var runAfter: TaskProvider <MuzzleTask > = muzzleTask
123123 val muzzleReportTasks = mutableListOf<TaskProvider <MuzzleTask >>()
124-
125- project.extensions.getByType<MuzzleExtension >().directives.forEach { directive ->
126- project.logger.debug(" configuring {}" , directive)
127-
128- if (directive.isCoreJdk) {
129- runAfter = addMuzzleTask(directive, null , project, runAfter, muzzleBootstrap, muzzleTooling)
130- muzzleReportTasks.add(runAfter)
131- } else {
132- val range = resolveVersionRange(directive, system, session)
133-
134- muzzleDirectiveToArtifacts(directive, range).forEach {
135- runAfter = addMuzzleTask(directive, it, project, runAfter, muzzleBootstrap, muzzleTooling)
136- muzzleReportTasks.add(runAfter)
137- }
138-
139- if (directive.assertInverse) {
140- inverseOf(directive, system, session).forEach { inverseDirective ->
141- val inverseRange = resolveVersionRange(inverseDirective, system, session)
142-
143- muzzleDirectiveToArtifacts(inverseDirective, inverseRange).forEach {
144- runAfter = addMuzzleTask(inverseDirective, it, project, runAfter, muzzleBootstrap, muzzleTooling)
145- muzzleReportTasks.add(runAfter)
146- }
147- }
148- }
149- }
150- project.logger.info(" configured $directive " )
124+ val directives = project.extensions.getByType<MuzzleExtension >().directives
125+ taskPlanner.plan(directives).forEach { plan ->
126+ runAfter = registerMuzzleTask(plan.directive, plan.artifact, project, runAfter, muzzleBootstrap, muzzleTooling)
127+ muzzleReportTasks.add(runAfter)
128+ project.logger.info(" configured ${plan.directive} " )
151129 }
152130
153- if (muzzleReportTasks.isEmpty() && ! project.extensions.getByType< MuzzleExtension >(). directives.any { it.assertPass }) {
131+ if (muzzleReportTasks.isEmpty() && ! directives.any { it.assertPass }) {
154132 muzzleReportTasks.add(muzzleTask)
155133 }
156134
@@ -180,7 +158,7 @@ class MuzzlePlugin : Plugin<Project> {
180158 * @param muzzleTooling The configuration provider for agent tooling dependencies.
181159 * @return The muzzle task provider.
182160 */
183- private fun addMuzzleTask (
161+ private fun registerMuzzleTask (
184162 muzzleDirective : MuzzleDirective ,
185163 versionArtifact : Artifact ? ,
186164 instrumentationProject : Project ,
0 commit comments