Do not resolve configuration for scripting Gradle plugin

Avoid resolving kotlinScriptDef configurations during
configuration phase. Also, make task creation lazy.

   #KT-27160 fixed
This commit is contained in:
Ivan Gavrilovic
2018-11-02 18:07:43 +00:00
committed by Alexey Tsvetkov
parent 22fa9b6b92
commit c42b3b8ff8
@@ -46,19 +46,19 @@ class ScriptingGradleSubplugin : Plugin<Project> {
project.tasks.withType(KotlinCompile::class.java) { task ->
if (task !is KaptGenerateStubsTask) {
val configuration = project.configurations.findByName(getConfigurationName(task.sourceSetName))
if (configuration?.isEmpty == false) {
javaPluginConvention.sourceSets.findByName(task.sourceSetName)?.let { sourceSet ->
val extensionsTask =
project.tasks.create(
"discover${task.sourceSetName.capitalize()}ScriptsExtensions",
DiscoverScriptExtensionsTask::class.java
)
extensionsTask.sourceSet = sourceSet
extensionsTask.discoveryClasspathConfiguration = configuration
extensionsTask.kotlinCompile = task
task.dependsOn.add(extensionsTask)
}
javaPluginConvention.sourceSets.findByName(task.sourceSetName)?.let { sourceSet ->
project.tasks.register(
"discover${task.sourceSetName.capitalize()}ScriptsExtensions",
DiscoverScriptExtensionsTask::class.java
)
.also { provider -> task.dependsOn(provider) }
.configure { extensionsTask ->
extensionsTask.sourceSet = sourceSet
extensionsTask.discoveryClasspathConfiguration =
project.configurations.findByName(getConfigurationName(task.sourceSetName))
extensionsTask.kotlinCompile = task
task.dependsOn.add(extensionsTask)
}
}
}
}
@@ -76,7 +76,8 @@ open class DiscoverScriptExtensionsTask : DefaultTask() {
@get:InputFiles
@get:Classpath
internal var discoveryClasspathConfiguration: Configuration by Delegates.notNull()
@get:Optional
internal var discoveryClasspathConfiguration: Configuration? = null
@get:Internal
internal var kotlinCompile: KotlinCompile by Delegates.notNull()
@@ -87,7 +88,7 @@ open class DiscoverScriptExtensionsTask : DefaultTask() {
@TaskAction
@Suppress("unused")
fun findKnownScriptExtensions() {
val scriptingClasspath = discoveryClasspathConfiguration.files.takeIf { it.isNotEmpty() } ?: return
val scriptingClasspath = discoveryClasspathConfiguration?.files?.takeIf { it.isNotEmpty() } ?: return
val definitions =
ScriptDefinitionsFromClasspathDiscoverySource(