IJI-3312 Expose build originator for project tasks listeners

allows any project task listener to get what initiated a build
particularly useful for monorepo devkit plugin statistics

GitOrigin-RevId: 7a2eb3ed57d5d4442ab749faee4966393c66c3e1
This commit is contained in:
Leonid Shalupov
2025-12-02 23:50:31 +00:00
committed by intellij-monorepo-bot
parent 7b9e45dfbd
commit e60157b0fb
2 changed files with 19 additions and 3 deletions
@@ -33,6 +33,14 @@ open class ProjectTaskContext @JvmOverloads constructor(
@Volatile
var isCollectionOfGeneratedFilesEnabled: Boolean = false
/**
* The class that initiated the task execution.
* This is an exposed version of [com.intellij.task.impl.ProjectTaskManagerImpl.BUILD_ORIGINATOR_KEY]
*/
@ApiStatus.Internal
@Volatile
var buildOriginatorClass: Class<*>? = null
@get:ApiStatus.Experimental
val generatedFilesRoots: Collection<String>
/**
@@ -186,8 +186,17 @@ public final class ProjectTaskManagerImpl extends ProjectTaskManager {
}
});
Class<?> buildOriginatorFromProjectUserData = BUILD_ORIGINATOR_KEY.get(myProject);
if (buildOriginatorFromProjectUserData != null) {
myProject.putUserData(BUILD_ORIGINATOR_KEY, null);
}
Pair<StructuredIdeActivity, List<EventPair<?>>> activity = reportBuildStart(projectTask, toRun);
if (context.getBuildOriginatorClass() == null) {
context.setBuildOriginatorClass(buildOriginatorFromProjectUserData);
}
Pair<StructuredIdeActivity, List<EventPair<?>>> activity = reportBuildStart(
projectTask, context.getBuildOriginatorClass(), toRun);
myEventPublisher.started(context);
Runnable runnable = () -> {
@@ -255,6 +264,7 @@ public final class ProjectTaskManagerImpl extends ProjectTaskManager {
}
private Pair<StructuredIdeActivity, List<EventPair<?>>> reportBuildStart(@NotNull ProjectTask projectTask,
Class<?> buildOriginator,
List<? extends Pair<ProjectTaskRunner, Collection<? extends ProjectTask>>> toRun) {
Ref<Boolean> incremental = new Ref<>(null);
AtomicInteger modules = new AtomicInteger(0);
@@ -285,9 +295,7 @@ public final class ProjectTaskManagerImpl extends ProjectTaskManager {
if (modules.get() > 0) {
fields.add(MODULES.with(modules.get()));
}
Class<?> buildOriginator = BUILD_ORIGINATOR_KEY.get(myProject);
if (buildOriginator != null) {
myProject.putUserData(BUILD_ORIGINATOR_KEY, null);
fields.add(BUILD_ORIGINATOR.with(buildOriginator));
}
return Pair.create(BUILD_ACTIVITY.started(myProject, () -> fields), fields);