From b5dbdc53d1d954d309eaa6f0618f7b47fddcd0a0 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Wed, 15 May 2019 15:37:34 +0300 Subject: [PATCH] Pass environment variables resolving script dependencies There is no option in UI to enable/disable passing those variables, but during Gradle Sync environment variables are passed by default Also Gradle expect that gradleOptions are passed but there is also no option in UI (during Gradle Sync IDEA add some options but they shouldn't affect dependencies resolution process) see GradleExeSettings.resolverExtension.getExtraCommandLineArgs gradleWithConnection was removed because it isn't used by gradle because they need to manage the TAPI project directory projectRoot was fixed to externalProjectPath because it can be overrided in settings.gradle ^KT-30974 Fixed --- .../script/GradleScriptTemplateProvider.kt | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt index 35bc8f791ce..d0477ec69e3 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt @@ -23,7 +23,7 @@ import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotifica import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.project.Project -import org.gradle.tooling.ProjectConnection +import com.intellij.util.EnvironmentUtil import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID import org.jetbrains.kotlin.lexer.KotlinLexer import org.jetbrains.kotlin.lexer.KtTokens @@ -171,7 +171,10 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD templateClass: String, dependencySelector: Regex, additionalResolverClasspath: (gradleLibDir: File) -> List ): List { - fun createEnvironment(gradleExeSettings: GradleExecutionSettings): Environment { + fun createEnvironment( + gradleExeSettings: GradleExecutionSettings, + projectSettings: GradleProjectSettings + ): Environment { val gradleJvmOptions = gradleExeSettings.daemonVmOptions?.let { vmOptions -> CommandLineTokenizer(vmOptions).toList() .mapNotNull { it?.let { it as? String } } @@ -179,18 +182,18 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD .distinct() } ?: emptyList() - return mapOf( "gradleHome" to gradleExeSettings.gradleHome?.let(::File), - "projectRoot" to (project.basePath ?: project.baseDir.canonicalPath)?.let(::File), - "gradleWithConnection" to { action: (ProjectConnection) -> Unit -> - GradleExecutionHelper().execute(project.basePath!!, null) { action(it) } - }, "gradleJavaHome" to gradleExeSettings.javaHome, + + "projectRoot" to projectSettings.externalProjectPath.let(::File), + + "gradleOptions" to emptyList(), // There is no option in UI to set project wide gradleOptions "gradleJvmOptions" to gradleJvmOptions, + "gradleEnvironmentVariables" to if (gradleExeSettings.isPassParentEnvs) EnvironmentUtil.getEnvironmentMap() else emptyMap(), + "getScriptSectionTokens" to ::topLevelSectionCodeTextTokens ) - } val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) @@ -218,7 +221,7 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD return loadDefinitionsFromTemplates( listOf(templateClass), templateClasspath, - createEnvironment(gradleExeSettings), + createEnvironment(gradleExeSettings, projectSettings), additionalResolverClasspath(gradleLibDir) ).map { // Expand scope for old gradle script definition