Rework ScriptingGradleSubplugin for the new subplugins API

This commit is contained in:
Sergey Igushkin
2020-06-06 00:34:29 +03:00
parent cb5aa64a95
commit 19ac036ec5
2 changed files with 25 additions and 32 deletions
@@ -13,10 +13,9 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.transform.ArtifactTransform import org.gradle.api.artifacts.transform.ArtifactTransform
import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.Attribute
import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.provider.Provider
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.internal.KaptGenerateStubsTask import org.jetbrains.kotlin.gradle.internal.KaptGenerateStubsTask
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
@@ -33,8 +32,6 @@ class ScriptingGradleSubplugin : Plugin<Project> {
companion object { companion object {
const val MISCONFIGURATION_MESSAGE_SUFFIX = "the plugin is probably applied by a mistake" const val MISCONFIGURATION_MESSAGE_SUFFIX = "the plugin is probably applied by a mistake"
fun isEnabled(project: Project) = project.plugins.findPlugin(ScriptingGradleSubplugin::class.java) != null
fun configureForSourceSet(project: Project, sourceSetName: String) { fun configureForSourceSet(project: Project, sourceSetName: String) {
val discoveryConfiguration = project.configurations.maybeCreate(getDiscoveryClasspathConfigurationName(sourceSetName)).apply { val discoveryConfiguration = project.configurations.maybeCreate(getDiscoveryClasspathConfigurationName(sourceSetName)).apply {
isVisible = false isVisible = false
@@ -48,8 +45,9 @@ class ScriptingGradleSubplugin : Plugin<Project> {
} }
override fun apply(project: Project) { override fun apply(project: Project) {
project.afterEvaluate { project.plugins.apply(ScriptingKotlinGradleSubplugin::class.java)
project.afterEvaluate {
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) {
@@ -209,7 +207,7 @@ fun Configuration.discoverScriptExtensionsFiles() =
}.artifacts.artifactFiles }.artifacts.artifactFiles
class ScriptingKotlinGradleSubplugin : KotlinGradleSubplugin<AbstractCompile> { class ScriptingKotlinGradleSubplugin : KotlinCompilerPluginSupportPlugin {
companion object { companion object {
const val SCRIPTING_ARTIFACT_NAME = "kotlin-scripting-compiler-embeddable" const val SCRIPTING_ARTIFACT_NAME = "kotlin-scripting-compiler-embeddable"
@@ -219,38 +217,34 @@ class ScriptingKotlinGradleSubplugin : KotlinGradleSubplugin<AbstractCompile> {
val LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION = "script-resolver-environment" val LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION = "script-resolver-environment"
} }
override fun isApplicable(project: Project, task: AbstractCompile) = override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true
task is KotlinJvmCompile && ScriptingGradleSubplugin.isEnabled(project)
override fun apply( override fun applyToCompilation(
project: Project, kotlinCompilation: KotlinCompilation<*>
kotlinCompile: AbstractCompile, ): Provider<List<SubpluginOption>> {
javaCompile: AbstractCompile?, val project = kotlinCompilation.target.project
variantData: Any?,
androidProjectHandler: Any?,
kotlinCompilation: KotlinCompilation<*>?
): List<SubpluginOption> {
if (!ScriptingGradleSubplugin.isEnabled(project)) return emptyList()
val scriptingExtension = project.extensions.findByType(ScriptingExtension::class.java) val scriptingExtension = project.extensions.findByType(ScriptingExtension::class.java)
?: project.extensions.create("kotlinScripting", ScriptingExtension::class.java) ?: project.extensions.create("kotlinScripting", ScriptingExtension::class.java)
val options = mutableListOf<SubpluginOption>() return project.provider {
val options = mutableListOf<SubpluginOption>()
for (scriptDef in scriptingExtension.myScriptDefinitions) { for (scriptDef in scriptingExtension.myScriptDefinitions) {
options += SubpluginOption(SCRIPT_DEFINITIONS_OPTION, scriptDef) options += SubpluginOption(SCRIPT_DEFINITIONS_OPTION, scriptDef)
} }
for (path in scriptingExtension.myScriptDefinitionsClasspath) { for (path in scriptingExtension.myScriptDefinitionsClasspath) {
options += SubpluginOption(SCRIPT_DEFINITIONS_CLASSPATH_OPTION, path) options += SubpluginOption(SCRIPT_DEFINITIONS_CLASSPATH_OPTION, path)
} }
if (scriptingExtension.myDisableScriptDefinitionsFromClasspath) { if (scriptingExtension.myDisableScriptDefinitionsFromClasspath) {
options += SubpluginOption(DISABLE_SCRIPT_DEFINITIONS_FROM_CLSSPATH_OPTION, "true") options += SubpluginOption(DISABLE_SCRIPT_DEFINITIONS_FROM_CLSSPATH_OPTION, "true")
} }
for (pair in scriptingExtension.myScriptResolverEnvironment) { for (pair in scriptingExtension.myScriptResolverEnvironment) {
options += SubpluginOption(LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION, "${pair.key}=${pair.value}") options += SubpluginOption(LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION, "${pair.key}=${pair.value}")
} }
return options options
}
} }
override fun getCompilerPluginId() = "kotlin.scripting" override fun getCompilerPluginId() = "kotlin.scripting"
@@ -1 +0,0 @@
org.jetbrains.kotlin.gradle.scripting.internal.ScriptingKotlinGradleSubplugin