From 88745cfd3b002f1ab82618908f575128eb50a0fb Mon Sep 17 00:00:00 2001 From: "Alexander.Glukhov" Date: Thu, 4 Dec 2025 14:04:30 +0100 Subject: [PATCH] [gradle][execution][IDEA-382798] use an immutable instance of GradleExecutionContext between executions GitOrigin-RevId: 929fc6cd561d4c5827a238628ddcef39826c331d --- .../execution/GradleExecutionContextImpl.kt | 10 ++++++++-- .../execution/GradleExecutionHelper.java | 18 ++++++++++-------- .../service/execution/GradleWrapperHelper.kt | 2 +- .../project/DefaultProjectResolverContext.java | 1 - .../gradle/service/task/GradleTaskManager.java | 2 +- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionContextImpl.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionContextImpl.kt index 3c3666afd09f..062b92fae618 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionContextImpl.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionContextImpl.kt @@ -36,11 +36,17 @@ open class GradleExecutionContextImpl( override val gradleVersion: GradleVersion get() = GradleVersion.version(buildEnvironment.gradle.gradleVersion) + constructor(context: GradleExecutionContextImpl) : + this(context, context.projectPath, GradleExecutionSettings(context.settings)) + constructor( - context: GradleExecutionContext, + context: GradleExecutionContextImpl, projectPath: String, settings: GradleExecutionSettings, ) : this( projectPath, context.taskId, settings, context.listener, context.cancellationToken - ) + ) { + context.copyUserDataTo(this) + this._buildEnvironment = context._buildEnvironment + } } \ No newline at end of file diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java index 4a7cdc53e0e5..1e92f2c3aa21 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java @@ -294,19 +294,21 @@ public final class GradleExecutionHelper { public static void prepareForExecution( @NotNull LongRunningOperation operation, - @NotNull GradleExecutionContext context + @NotNull GradleExecutionContextImpl context ) { - var id = context.getTaskId(); - var settings = context.getSettings(); - var listener = context.getListener(); - var buildEnvironment = context.getBuildEnvironment(); + var effectiveContext = new GradleExecutionContextImpl(context); + + var id = effectiveContext.getTaskId(); + var settings = effectiveContext.getSettings(); + var listener = effectiveContext.getListener(); + var buildEnvironment = effectiveContext.getBuildEnvironment(); applyIdeaParameters(settings); setupLogging(settings, buildEnvironment); GradleExecutionHelperExtension.EP_NAME.forEachExtensionSafe(proc -> { - proc.configureSettings(settings, context); + proc.configureSettings(settings, effectiveContext); }); clearSystemProperties(operation); @@ -323,10 +325,10 @@ public final class GradleExecutionHelper { setupStandardIO(operation, settings, id, listener); - operation.withCancellationToken(context.getCancellationToken()); + operation.withCancellationToken(effectiveContext.getCancellationToken()); GradleExecutionHelperExtension.EP_NAME.forEachExtensionSafe(proc -> { - proc.configureOperation(operation, context); + proc.configureOperation(operation, effectiveContext); }); } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleWrapperHelper.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleWrapperHelper.kt index 845d42771020..4d6124d0cce7 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleWrapperHelper.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleWrapperHelper.kt @@ -51,7 +51,7 @@ object GradleWrapperHelper { @JvmStatic @JvmOverloads - fun ensureInstalledWrapper(context: GradleExecutionContext, gradleVersion: GradleVersion? = null) { + fun ensureInstalledWrapper(context: GradleExecutionContextImpl, gradleVersion: GradleVersion? = null) { val settings = context.settings val projectPath = GradleUtil.determineRootProject(context.projectPath) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java index 9f2ffe91fc23..55210e00e85f 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java @@ -84,7 +84,6 @@ public class DefaultProjectResolverContext extends GradleExecutionContextImpl im myPolicy = resolverContext.myPolicy; myProjectResolverIndicator = resolverContext.myProjectResolverIndicator; myBuildSrcProject = isBuildSrcProject; - resolverContext.copyUserDataTo(this); } @Override diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java index 443e8d0489dd..defcb8fb6590 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java @@ -146,7 +146,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager