From e60157b0fbbc031879b5df242ff4778f8ca5b973 Mon Sep 17 00:00:00 2001 From: Leonid Shalupov Date: Mon, 1 Dec 2025 22:54:07 +0100 Subject: [PATCH] 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 --- .../src/com/intellij/task/ProjectTaskContext.kt | 8 ++++++++ .../intellij/task/impl/ProjectTaskManagerImpl.java | 14 +++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/platform/lang-api/src/com/intellij/task/ProjectTaskContext.kt b/platform/lang-api/src/com/intellij/task/ProjectTaskContext.kt index ea24fc1683e7..9eac6f0ff46b 100644 --- a/platform/lang-api/src/com/intellij/task/ProjectTaskContext.kt +++ b/platform/lang-api/src/com/intellij/task/ProjectTaskContext.kt @@ -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 /** diff --git a/platform/lang-impl/src/com/intellij/task/impl/ProjectTaskManagerImpl.java b/platform/lang-impl/src/com/intellij/task/impl/ProjectTaskManagerImpl.java index 7d8ee81951ce..b98881158e99 100644 --- a/platform/lang-impl/src/com/intellij/task/impl/ProjectTaskManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/task/impl/ProjectTaskManagerImpl.java @@ -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>> activity = reportBuildStart(projectTask, toRun); + if (context.getBuildOriginatorClass() == null) { + context.setBuildOriginatorClass(buildOriginatorFromProjectUserData); + } + + Pair>> activity = reportBuildStart( + projectTask, context.getBuildOriginatorClass(), toRun); myEventPublisher.started(context); Runnable runnable = () -> { @@ -255,6 +264,7 @@ public final class ProjectTaskManagerImpl extends ProjectTaskManager { } private Pair>> reportBuildStart(@NotNull ProjectTask projectTask, + Class buildOriginator, List>> toRun) { Ref 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);