From f720501612cf1f3b5e189b7e0d8bc065a4e3a5ad Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 30 May 2018 19:46:42 +0300 Subject: [PATCH] Implement fallback compiler search --- .../kotlin/gradle/plugin/KotlinProperties.kt | 4 ++++ .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index 4e97829f578..21805874ed5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -26,6 +26,7 @@ import java.util.* fun mapKotlinTaskProperties(project: Project, task: AbstractKotlinCompile<*>) { PropertiesProvider(project).apply { coroutines?.let { task.coroutinesFromGradleProperties = it } + useFallbackCompilerSearch?.let { task.useFallbackCompilerSearch = it } if (task is KotlinCompile) { incrementalJvm?.let { task.incremental = it } @@ -67,6 +68,9 @@ internal class PropertiesProvider(private val project: Project) { val usePreciseJavaTracking: Boolean? get() = booleanProperty("kotlin.incremental.usePreciseJavaTracking") + val useFallbackCompilerSearch: Boolean? + get() = booleanProperty("kotlin.useFallbackCompilerSearch") + private fun booleanProperty(propName: String): Boolean? = property(propName)?.toBoolean() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 09d36d0710e..73f7aa0eeb8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -72,6 +72,9 @@ abstract class AbstractKotlinCompileTool() : AbstractCo @PathSensitive(PathSensitivity.RELATIVE) override fun getSource() = super.getSource() + @get:Input + internal var useFallbackCompilerSearch: Boolean = false + @get:Classpath @get:InputFiles internal val computedCompilerClasspath: List get() = compilerClasspath?.takeIf { it.isNotEmpty() } @@ -79,7 +82,21 @@ abstract class AbstractKotlinCompileTool() : AbstractCo // a hack to remove compiler jar from the cp, will be dropped when compilerJarFile will be removed listOf(it) + findKotlinCompilerClasspath(project).filter { !it.name.startsWith("kotlin-compiler") } } - ?: project.configurations.getByName(COMPILER_CLASSPATH_CONFIGURATION_NAME).resolve().toList() + ?: if (!useFallbackCompilerSearch) { + try { + project.configurations.getByName(COMPILER_CLASSPATH_CONFIGURATION_NAME).resolve().toList() + } catch (e: Exception) { + project.logger.error( + "Could not resolve compiler classpath. " + + "Check if Kotlin Gradle plugin repository is configured in $project." + ) + throw e + } + } else { + findKotlinCompilerClasspath(project) + } + ?: throw IllegalStateException("Could not find Kotlin Compiler classpath") + protected abstract fun findKotlinCompilerClasspath(project: Project): List }