From de261df6f53f6addc072471876779fc889745abc Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 21 Sep 2018 23:27:05 +0300 Subject: [PATCH] Use separate configuration for resolving native compiler plugin artifacts Kotlin/JVM and Kotlin/JS use shaded compiler, but Kotlin/Native uses non-shaded one. Serialization plugin was configured to use either shaded or non-shaded plugin version, because we used one configuration for resolving compiler plugins. This change introduces 'kotlinNativeCompilerPluginClasspath' configuration for resolving Kotlin/Native compiler plugins. --- .../gradle/plugin/KotlinGradleSubplugin.kt | 1 + .../kotlin/gradle/plugin/KotlinPlugin.kt | 1 + .../gradle/plugin/KotlinPluginWrapper.kt | 3 +++ .../gradle/plugin/KotlinTargetConfigurator.kt | 2 +- .../gradle/plugin/SubpluginEnvironment.kt | 19 ++++++++++++++----- .../gradle/SerializationSubplugin.kt | 18 ++++++------------ 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt index 32b3b42b764..379fb3d5f4d 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt @@ -67,6 +67,7 @@ interface KotlinGradleSubplugin { fun getCompilerPluginId(): String fun getPluginArtifact(): SubpluginArtifact + fun getNativeCompilerPluginArtifact(): SubpluginArtifact? = null } open class SubpluginArtifact(val groupId: String, val artifactId: String, val version: String? = null) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 4504ae0394d..1b869979675 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -40,6 +40,7 @@ import java.util.concurrent.Callable import java.util.jar.Manifest const val PLUGIN_CLASSPATH_CONFIGURATION_NAME = "kotlinCompilerPluginClasspath" +const val NATIVE_COMPILER_PLUGIN_CLASSPATH_CONFIGURATION_NAME = "kotlinNativeCompilerPluginClasspath" internal const val COMPILER_CLASSPATH_CONFIGURATION_NAME = "kotlinCompilerClasspath" val KOTLIN_DSL_NAME = "kotlin" val KOTLIN_JS_DSL_NAME = "kotlin2js" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 6c0a646a14b..99b41521b19 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -55,6 +55,9 @@ abstract class KotlinBasePluginWrapper( // todo: Consider removing if org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser stops using parent last classloader isTransitive = false } + project.configurations.maybeCreate(NATIVE_COMPILER_PLUGIN_CLASSPATH_CONFIGURATION_NAME).apply { + isTransitive = false + } // TODO: consider only set if if daemon or parallel compilation are enabled, though this way it should be safe too System.setProperty(org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY, "true") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index f0800bca7eb..80bef6f6210 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -435,7 +435,7 @@ open class KotlinNativeTargetConfigurator( SubpluginEnvironment .loadSubplugins(project, kotlinPluginVersion) .addSubpluginOptions(project, this, compilerPluginOptions) - compilerPluginClasspath = project.configurations.getByName(PLUGIN_CLASSPATH_CONFIGURATION_NAME) + compilerPluginClasspath = project.configurations.getByName(NATIVE_COMPILER_PLUGIN_CLASSPATH_CONFIGURATION_NAME) } private fun KotlinNativeCompile.registerOutputFiles(outputDirectory: File) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt index 92205367aa5..3a7102e1a60 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt @@ -73,11 +73,13 @@ class SubpluginEnvironment( val pluginId = subplugin.getCompilerPluginId() project.logger.kotlinDebug { "Loading subplugin $pluginId" } - val artifact = subplugin.getPluginArtifact() - val artifactVersion = artifact.version ?: kotlinPluginVersion - val mavenCoordinate = "${artifact.groupId}:${artifact.artifactId}:$artifactVersion" - project.logger.kotlinDebug { "Adding '$mavenCoordinate' to '$PLUGIN_CLASSPATH_CONFIGURATION_NAME' configuration" } - project.dependencies.add(PLUGIN_CLASSPATH_CONFIGURATION_NAME, mavenCoordinate) + subplugin.getPluginArtifact().let { artifact -> + project.addMavenDependency(PLUGIN_CLASSPATH_CONFIGURATION_NAME, artifact) + } + + subplugin.getNativeCompilerPluginArtifact()?.let { artifact -> + project.addMavenDependency(NATIVE_COMPILER_PLUGIN_CLASSPATH_CONFIGURATION_NAME, artifact) + } val subpluginOptions = subplugin.apply(project, kotlinTask, javaTask, variantData, androidProjectHandler, kotlinCompilation) @@ -92,4 +94,11 @@ class SubpluginEnvironment( return appliedSubplugins } + + private fun Project.addMavenDependency(configuration: String, artifact: SubpluginArtifact) { + val artifactVersion = artifact.version ?: kotlinPluginVersion + val mavenCoordinate = "${artifact.groupId}:${artifact.artifactId}:$artifactVersion" + project.logger.kotlinDebug { "Adding '$mavenCoordinate' to '$configuration' configuration" } + project.dependencies.add(configuration, mavenCoordinate) + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt index 50a9d441f67..9e32daf8ad5 100644 --- a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt +++ b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt @@ -42,14 +42,8 @@ class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin) useUnshaded = true - return true - } + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = + SerializationGradleSubplugin.isEnabled(project) override fun apply( project: Project, @@ -62,11 +56,11 @@ class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin