[gradle][execution][IDEA-382798] use an immutable instance of GradleExecutionContext between executions

GitOrigin-RevId: 929fc6cd561d4c5827a238628ddcef39826c331d
This commit is contained in:
Alexander.Glukhov
2025-12-04 17:04:47 +00:00
committed by intellij-monorepo-bot
parent fe6342ffc3
commit 88745cfd3b
5 changed files with 20 additions and 13 deletions
@@ -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
}
}
@@ -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);
});
}
@@ -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)
@@ -84,7 +84,6 @@ public class DefaultProjectResolverContext extends GradleExecutionContextImpl im
myPolicy = resolverContext.myPolicy;
myProjectResolverIndicator = resolverContext.myProjectResolverIndicator;
myBuildSrcProject = isBuildSrcProject;
resolverContext.copyUserDataTo(this);
}
@Override
@@ -146,7 +146,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager<GradleExecut
private static void executeTasks(
@NotNull ProjectConnection connection,
@NotNull GradleExecutionContext context
@NotNull GradleExecutionContextImpl context
) {
if (Registry.is("gradle.report.recently.saved.paths")) {
ApplicationManager.getApplication()