From e851d99b4e26785cc05328b04318a1feea64bfeb Mon Sep 17 00:00:00 2001 From: "Alexander.Glukhov" Date: Thu, 5 Sep 2024 10:17:37 +0200 Subject: [PATCH] [gradle][IDEA-347975] added a way to pass environment variables from GradleProjectResolverExtension into execution GitOrigin-RevId: f859b809a08e9ace79985f05045dee492441653d --- .../project/JavaGradleProjectResolver.java | 12 +++++++----- .../CommonGradleProjectResolverExtension.java | 13 ++++++++----- .../project/GradleProjectResolverExtension.java | 12 +++++++----- .../gradle/service/task/GradleTaskManager.java | 5 ++++- .../KotlinGradleCoroutineDebugProjectResolver.kt | 11 +++++++---- .../testing/KotlinTestTasksResolver.kt | 16 +++++++++------- 6 files changed, 42 insertions(+), 27 deletions(-) diff --git a/plugins/gradle/java/src/service/project/JavaGradleProjectResolver.java b/plugins/gradle/java/src/service/project/JavaGradleProjectResolver.java index 9ea23f1148f0..3f2045036a84 100644 --- a/plugins/gradle/java/src/service/project/JavaGradleProjectResolver.java +++ b/plugins/gradle/java/src/service/project/JavaGradleProjectResolver.java @@ -184,11 +184,12 @@ public final class JavaGradleProjectResolver extends AbstractProjectResolverExte } @Override - public void enhanceTaskProcessing(@Nullable Project project, - @NotNull List taskNames, - @NotNull Consumer initScriptConsumer, - @NotNull Map parameters) { - + public @NotNull Map enhanceTaskProcessing( + @Nullable Project project, + @NotNull List taskNames, + @NotNull Consumer initScriptConsumer, + @NotNull Map parameters + ) { var isRunAsTest = Boolean.parseBoolean(parameters.get(IS_RUN_AS_TEST_KEY)); var isBuiltInTestEventsUsed = Boolean.parseBoolean(parameters.get(IS_BUILT_IN_TEST_EVENTS_USED_KEY)); var jvmParametersSetup = parameters.get(JVM_PARAMETERS_SETUP_KEY); @@ -199,6 +200,7 @@ public final class JavaGradleProjectResolver extends AbstractProjectResolverExte initScriptConsumer.consume(initScript); } enhanceTaskProcessing(taskNames, jvmParametersSetup, initScriptConsumer); + return Map.of(); } @Override diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java index 91e004040903..9f00761c5a43 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java @@ -792,15 +792,17 @@ public final class CommonGradleProjectResolverExtension extends AbstractProjectR } @Override - public void enhanceTaskProcessing(@Nullable Project project, - @NotNull List taskNames, - @NotNull Consumer initScriptConsumer, - @NotNull Map parameters) { + public @NotNull Map enhanceTaskProcessing( + @Nullable Project project, + @NotNull List taskNames, + @NotNull Consumer initScriptConsumer, + @NotNull Map parameters + ) { initScriptConsumer.consume(GradleInitScriptUtil.loadCommonTasksUtilsScript()); String dispatchPort = parameters.get(DEBUG_DISPATCH_PORT_KEY); if (dispatchPort == null) { - return; + return Collections.emptyMap(); } String debugOptions = parameters.get(DEBUG_OPTIONS_KEY); @@ -820,6 +822,7 @@ public final class CommonGradleProjectResolverExtension extends AbstractProjectR final String script = join(lines, System.lineSeparator()); initScriptConsumer.consume(script); + return Collections.emptyMap(); } /** diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java index 558eb96dd3c1..22b9c5256b9a 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java @@ -161,19 +161,21 @@ public interface GradleProjectResolverExtension extends ParametersEnhancer { String GRADLE_VERSION = "GRADLE_VERSION"; /** - * Allows extension to contribute to init script + * Allows an extension to contribute an init script that would be passed into the Gradle execution * * @param project project (if available) * @param taskNames gradle task names to be executed * @param initScriptConsumer consumer of init script text. Must be called to add script txt * @param parameters storage for passing optional named parameters + * @return map with environment variables to be passed into the execution */ @ApiStatus.Experimental - default void enhanceTaskProcessing(@Nullable Project project, - @NotNull List taskNames, - @NotNull Consumer initScriptConsumer, - @NotNull Map parameters) { + default @NotNull Map enhanceTaskProcessing(@Nullable Project project, + @NotNull List taskNames, + @NotNull Consumer initScriptConsumer, + @NotNull Map parameters) { String jvmParametersSetup = parameters.get(JVM_PARAMETERS_SETUP_KEY); enhanceTaskProcessing(taskNames, jvmParametersSetup, initScriptConsumer); + return Map.of(); } } 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 f0deb4f4658f..e8770dbe395b 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 @@ -346,6 +346,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager initScripts = new ArrayList<>(); List extensions = GradleProjectResolverUtil.createProjectResolvers(null).toList(); + Map executionEnvironmentVariables = new HashMap<>(); for (GradleProjectResolverExtension resolverExtension : extensions) { final String resolverClassName = resolverExtension.getClass().getName(); @@ -372,7 +373,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager { + Map taskProcessingEnvironmentVariables = resolverExtension.enhanceTaskProcessing(project, taskNames, script -> { if (StringUtil.isNotEmpty(script)) { addAllNotNull( initScripts, @@ -381,6 +382,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager, - initScriptConsumer: Consumer, - parameters: Map) { + override fun enhanceTaskProcessing( + project: Project?, + taskNames: MutableList, + initScriptConsumer: Consumer, + parameters: Map + ): Map { try { val allowCoroutineAgent = KotlinJvmDebuggerFacade.instance?.isCoroutineAgentAllowedInDebug ?: false val gradleVersion = parameters[GradleProjectResolverExtension.GRADLE_VERSION]?.let { GradleVersion.version(it) } @@ -32,6 +34,7 @@ class KotlinGradleCoroutineDebugProjectResolver : AbstractProjectResolverExtensi } catch (e: Exception) { log.error("Gradle: not possible to attach a coroutine debugger agent.", e) } + return emptyMap() } private fun setupCoroutineAgentForJvmForkedTestTasks(initScriptConsumer: Consumer, shouldCheckGradleVersion: Boolean) { diff --git a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/KotlinTestTasksResolver.kt b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/KotlinTestTasksResolver.kt index 7164794e7dbc..16731d631111 100644 --- a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/KotlinTestTasksResolver.kt +++ b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/KotlinTestTasksResolver.kt @@ -85,13 +85,14 @@ open class KotlinTestTasksResolver : AbstractProjectResolverExtension() { } override fun enhanceTaskProcessing( - project: Project?, - taskNames: MutableList, - initScriptConsumer: Consumer, - parameters: MutableMap - ) { - if (!Registry.`is`(ENABLED_REGISTRY_KEY)) - return + project: Project?, + taskNames: MutableList, + initScriptConsumer: Consumer, + parameters: MutableMap + ): Map { + if (!Registry.`is`(ENABLED_REGISTRY_KEY)) { + return emptyMap() + } val isRunAsTest = parameters[GradleProjectResolverExtension.IS_RUN_AS_TEST_KEY].toBoolean() val isBuiltInTestEventsUsed = parameters[GradleProjectResolverExtension.IS_BUILT_IN_TEST_EVENTS_USED_KEY].toBoolean() @@ -110,6 +111,7 @@ open class KotlinTestTasksResolver : AbstractProjectResolverExtension() { val jvmParametersSetup = parameters[GradleProjectResolverExtension.JVM_PARAMETERS_SETUP_KEY] enhanceTaskProcessing(taskNames, jvmParametersSetup, initScriptConsumer) + return emptyMap() } override fun enhanceTaskProcessing(taskNames: MutableList, jvmAgentSetup: String?, initScriptConsumer: Consumer) {