From beb28a1c7dac2141103352535b16b85fc1a96b69 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 11 Jul 2017 16:51:31 +0300 Subject: [PATCH] Gradle Kotlin DSL uses compiler-embdeddable jar when loading resolver --- .../script/GradleScriptTemplateProvider.kt | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt index 642bec99977..1276b4a7b1d 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/GradleScriptTemplateProvider.kt @@ -56,23 +56,24 @@ abstract class AbstractGradleScriptTemplatesProvider( } ?: emptyList() } + internal val gradleLibDir: File by lazy { + val gradleHome = gradleExeSettings?.gradleHome ?: error("Unable to get Gradle home directory") + + File(gradleHome, "lib").let { + it.takeIf { it.exists() && it.isDirectory } ?: error("Invalid Gradle libraries directory $it") + } + } + override val isValid: Boolean get() = true override val templateClassNames get() = listOf(templateClass) - override val dependenciesClasspath: List - get() { - val gradleHome = gradleExeSettings?.gradleHome ?: error("Unable to get Gradle home directory") - - val gradleLibDir = File(gradleHome, "lib").let { - it.takeIf { it.exists() && it.isDirectory } ?: error("Invalid Gradle libraries directory $it") - } - - return gradleLibDir.listFiles { it -> - /* an inference problem without explicit 'it', TODO: remove when fixed */ - dependencySelector.matches(it.name) - }.takeIf { it.isNotEmpty() }?.asList() ?: error("Missing jars in gradle directory") - } + override val dependenciesClasspath: List get() { + return gradleLibDir.listFiles { it -> + /* an inference problem without explicit 'it', TODO: remove when fixed */ + dependencySelector.matches(it.name) + }.takeIf { it.isNotEmpty() }?.asList() ?: error("Missing jars in gradle directory") + } override val environment: Map? by lazy { mapOf( @@ -82,18 +83,23 @@ abstract class AbstractGradleScriptTemplatesProvider( GradleExecutionHelper().execute(project.basePath!!, null) { action(it) } }, "gradleJavaHome" to gradleExeSettings?.javaHome, "gradleJvmOptions" to gradleJvmOptions, - "getScriptSectionTokens" to ::topLevelSectionCodeTextTokens) - } - - + "getScriptSectionTokens" to ::topLevelSectionCodeTextTokens + ) } +} class GradleKotlinDSLTemplateProvider(project: Project) : AbstractGradleScriptTemplatesProvider( project, "Gradle Kotlin DSL", "org.gradle.kotlin.dsl.KotlinBuildScript", Regex("^gradle-(?:kotlin-dsl|core).*\\.jar\$") -) +) { + // TODO_R: check this against kotlin-dsl branch that uses daemon + override val additionalResolverClasspath: List get() = + // additionally need compiler jar to load gradle resolver + gradleLibDir.listFiles { file -> file.name.startsWith("kotlin-compiler-embeddable") } + .firstOrNull()?.let(::listOf).orEmpty() +} class LegacyGradleScriptKotlinTemplateProvider(project: Project) : AbstractGradleScriptTemplatesProvider( project,