Revert "Simplify scripting configurations setup"

This reverts commit f4078b0940.
This commit is contained in:
Yahor Berdnikau
2022-03-23 19:02:23 +01:00
parent 47a9fb725e
commit 46d3f96f0b
@@ -10,7 +10,6 @@ package org.jetbrains.kotlin.gradle.scripting.internal
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.dsl.DependencyHandler
import org.gradle.api.artifacts.transform.InputArtifact import org.gradle.api.artifacts.transform.InputArtifact
import org.gradle.api.artifacts.transform.TransformAction import org.gradle.api.artifacts.transform.TransformAction
import org.gradle.api.artifacts.transform.TransformOutputs import org.gradle.api.artifacts.transform.TransformOutputs
@@ -56,19 +55,23 @@ class ScriptingGradleSubplugin : Plugin<Project> {
val javaPluginConvention = project.convention.findPlugin(JavaPluginConvention::class.java) val javaPluginConvention = project.convention.findPlugin(JavaPluginConvention::class.java)
if (javaPluginConvention?.sourceSets?.isEmpty() == false) { if (javaPluginConvention?.sourceSets?.isEmpty() == false) {
val configureAction: (KotlinCompile) -> (Unit) = ca@{ task -> val configureAction: (KotlinCompile) -> (Unit) = { task ->
if (task !is KaptGenerateStubsTask) { if (task !is KaptGenerateStubsTask) {
val sourceSetName = task.sourceSetName.orNull ?: return@ca
val discoveryResultsConfigurationName = getDiscoveryResultsConfigurationName(sourceSetName) try {
val discoveryResultConfiguration = project.configurations.findByName(discoveryResultsConfigurationName) val discoveryClasspathConfigurationName = getDiscoveryClasspathConfigurationName(task.sourceSetName.get())
if (discoveryResultConfiguration == null) { val discoveryClasspathConfiguration = project.configurations.findByName(discoveryClasspathConfigurationName)
project.logger.warn( when {
"$SCRIPTING_LOG_PREFIX $project.${task.name} - configuration not found:" + discoveryClasspathConfiguration == null ->
" $discoveryResultsConfigurationName, $MISCONFIGURATION_MESSAGE_SUFFIX" project.logger.warn("$SCRIPTING_LOG_PREFIX $project.${task.name} - configuration not found: $discoveryClasspathConfigurationName, $MISCONFIGURATION_MESSAGE_SUFFIX")
) discoveryClasspathConfiguration.allDependencies.isEmpty() -> {
} else { // skip further checks - user did not configured any discovery sources
task.scriptDefinitions.from(discoveryResultConfiguration) }
else -> task.scriptDefinitions.from(discoveryClasspathConfiguration)
}
} catch (e: IllegalStateException) {
project.logger.warn("$SCRIPTING_LOG_PREFIX applied in the non-supported environment (error received: ${e.message})")
} }
} }
} }
@@ -103,11 +106,15 @@ private fun configureDiscoveryTransformation(
) { ) {
project.configurations.maybeCreate(discoveryResultsConfigurationName).apply { project.configurations.maybeCreate(discoveryResultsConfigurationName).apply {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = true
attributes.attribute(artifactType, scriptFilesExtensions)
extendsFrom(discoveryConfiguration)
} }
project.dependencies.registerOnceDiscoverScriptExtensionsTransform() project.dependencies.apply {
add(
discoveryResultsConfigurationName,
project.withRegisteredDiscoverScriptExtensionsTransform {
discoveryConfiguration.discoverScriptExtensionsFiles()
}
)
}
} }
internal abstract class DiscoverScriptExtensionsTransformAction : TransformAction<TransformParameters.None> { internal abstract class DiscoverScriptExtensionsTransformAction : TransformAction<TransformParameters.None> {
@@ -129,32 +136,36 @@ internal abstract class DiscoverScriptExtensionsTransformAction : TransformActio
if (extensions.isNotEmpty()) { if (extensions.isNotEmpty()) {
val outputFile = outputs.file("${input.nameWithoutExtension}.discoveredScriptsExtensions.txt") val outputFile = outputs.file("${input.nameWithoutExtension}.discoveredScriptsExtensions.txt")
outputFile.writeText(extensions.joinToString("\n")) outputFile.writeText(extensions.joinToString("\n"))
listOf(outputFile)
} }
} }
} }
private fun DependencyHandler.registerDiscoverScriptExtensionsTransform() { private fun Project.registerDiscoverScriptExtensionsTransform() {
registerTransform(DiscoverScriptExtensionsTransformAction::class.java) { transformSpec -> dependencies.apply {
transformSpec.from.attribute(artifactType, "jar") registerTransform(DiscoverScriptExtensionsTransformAction::class.java) { transformSpec ->
transformSpec.to.attribute(artifactType, scriptFilesExtensions) transformSpec.from.attribute(artifactType, "jar")
} transformSpec.to.attribute(artifactType, scriptFilesExtensions)
registerTransform(DiscoverScriptExtensionsTransformAction::class.java) { transformSpec -> }
transformSpec.from.attribute(artifactType, "classes") registerTransform(DiscoverScriptExtensionsTransformAction::class.java) { transformSpec ->
transformSpec.to.attribute(artifactType, scriptFilesExtensions) transformSpec.from.attribute(artifactType, "classes")
transformSpec.to.attribute(artifactType, scriptFilesExtensions)
}
} }
} }
private fun DependencyHandler.registerOnceDiscoverScriptExtensionsTransform() { private fun <T> Project.withRegisteredDiscoverScriptExtensionsTransform(block: () -> T): T {
if (!extensions.extraProperties.has("DiscoverScriptExtensionsTransform")) { if (!project.extensions.extraProperties.has("DiscoverScriptExtensionsTransform")) {
registerDiscoverScriptExtensionsTransform() registerDiscoverScriptExtensionsTransform()
extensions.extraProperties["DiscoverScriptExtensionsTransform"] = true project.extensions.extraProperties["DiscoverScriptExtensionsTransform"] = true
} }
return block()
} }
private val artifactType = Attribute.of("artifactType", String::class.java) private val artifactType = Attribute.of("artifactType", String::class.java)
private const val scriptFilesExtensions = "script-files-extensions" private val scriptFilesExtensions = "script-files-extensions"
private fun Configuration.discoverScriptExtensionsFiles() = private fun Configuration.discoverScriptExtensionsFiles() =
incoming.artifactView { incoming.artifactView {