[gradle][IDEA-347975] added a way to pass environment variables from GradleProjectResolverExtension into execution

GitOrigin-RevId: f859b809a08e9ace79985f05045dee492441653d
This commit is contained in:
Alexander.Glukhov
2024-09-05 10:17:37 +02:00
committed by intellij-monorepo-bot
parent a3de4aaf59
commit e851d99b4e
6 changed files with 42 additions and 27 deletions

View File

@@ -184,11 +184,12 @@ public final class JavaGradleProjectResolver extends AbstractProjectResolverExte
}
@Override
public void enhanceTaskProcessing(@Nullable Project project,
@NotNull List<String> taskNames,
@NotNull Consumer<String> initScriptConsumer,
@NotNull Map<String, String> parameters) {
public @NotNull Map<String, String> enhanceTaskProcessing(
@Nullable Project project,
@NotNull List<String> taskNames,
@NotNull Consumer<String> initScriptConsumer,
@NotNull Map<String, String> 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

View File

@@ -792,15 +792,17 @@ public final class CommonGradleProjectResolverExtension extends AbstractProjectR
}
@Override
public void enhanceTaskProcessing(@Nullable Project project,
@NotNull List<String> taskNames,
@NotNull Consumer<String> initScriptConsumer,
@NotNull Map<String, String> parameters) {
public @NotNull Map<String, String> enhanceTaskProcessing(
@Nullable Project project,
@NotNull List<String> taskNames,
@NotNull Consumer<String> initScriptConsumer,
@NotNull Map<String, String> 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();
}
/**

View File

@@ -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<String> taskNames,
@NotNull Consumer<String> initScriptConsumer,
@NotNull Map<String, String> parameters) {
default @NotNull Map<String, String> enhanceTaskProcessing(@Nullable Project project,
@NotNull List<String> taskNames,
@NotNull Consumer<String> initScriptConsumer,
@NotNull Map<String, String> parameters) {
String jvmParametersSetup = parameters.get(JVM_PARAMETERS_SETUP_KEY);
enhanceTaskProcessing(taskNames, jvmParametersSetup, initScriptConsumer);
return Map.of();
}
}

View File

@@ -346,6 +346,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager<GradleExecut
) {
final List<String> initScripts = new ArrayList<>();
List<GradleProjectResolverExtension> extensions = GradleProjectResolverUtil.createProjectResolvers(null).toList();
Map<String, String> executionEnvironmentVariables = new HashMap<>();
for (GradleProjectResolverExtension resolverExtension : extensions) {
final String resolverClassName = resolverExtension.getClass().getName();
@@ -372,7 +373,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager<GradleExecut
enhancementParameters.put(GradleProjectResolverExtension.GRADLE_VERSION, gradleVersion.getVersion());
}
resolverExtension.enhanceTaskProcessing(project, taskNames, script -> {
Map<String, String> taskProcessingEnvironmentVariables = resolverExtension.enhanceTaskProcessing(project, taskNames, script -> {
if (StringUtil.isNotEmpty(script)) {
addAllNotNull(
initScripts,
@@ -381,6 +382,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager<GradleExecut
"//");
}
}, enhancementParameters);
executionEnvironmentVariables.putAll(taskProcessingEnvironmentVariables);
}
if (!initScripts.isEmpty()) {
@@ -403,6 +405,7 @@ public class GradleTaskManager implements ExternalSystemTaskManager<GradleExecut
if (effectiveSettings.getArguments().contains(GradleConstants.INIT_SCRIPT_CMD_OPTION)) {
GradleInitScriptUtil.attachTargetPathMapperInitScript(effectiveSettings);
}
effectiveSettings.withEnvironmentVariables(executionEnvironmentVariables);
}
private static void writeAndAppendScript(@NotNull GradleExecutionSettings effectiveSettings,

View File

@@ -19,10 +19,12 @@ class KotlinGradleCoroutineDebugProjectResolver : AbstractProjectResolverExtensi
private const val MIN_SUPPORTED_GRADLE_VERSION = "4.6" // CommandLineArgumentProvider is available only since Gradle 4.6
}
override fun enhanceTaskProcessing(project: Project?,
taskNames: MutableList<String>,
initScriptConsumer: Consumer<String>,
parameters: Map<String, String>) {
override fun enhanceTaskProcessing(
project: Project?,
taskNames: MutableList<String>,
initScriptConsumer: Consumer<String>,
parameters: Map<String, String>
): Map<String, String> {
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<String>, shouldCheckGradleVersion: Boolean) {

View File

@@ -85,13 +85,14 @@ open class KotlinTestTasksResolver : AbstractProjectResolverExtension() {
}
override fun enhanceTaskProcessing(
project: Project?,
taskNames: MutableList<String>,
initScriptConsumer: Consumer<String>,
parameters: MutableMap<String, String>
) {
if (!Registry.`is`(ENABLED_REGISTRY_KEY))
return
project: Project?,
taskNames: MutableList<String>,
initScriptConsumer: Consumer<String>,
parameters: MutableMap<String, String>
): Map<String, String> {
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<String>, jvmAgentSetup: String?, initScriptConsumer: Consumer<String>) {