From 223733558c134bfcb93487b5dccd3b63a0ac4fdb Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Fri, 22 Jun 2018 20:19:58 +0300 Subject: [PATCH] Use new approach to resolve compiler plugin classpaths in gradle --- .../tools/kotlin-serialization/build.gradle | 4 ++ .../gradle/SerializationSubplugin.kt | 54 +++++++++++++++---- .../src/main/resources/plugin.properties | 1 + 3 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 libraries/tools/kotlin-serialization/src/main/resources/plugin.properties diff --git a/libraries/tools/kotlin-serialization/build.gradle b/libraries/tools/kotlin-serialization/build.gradle index 82164013133..2830b56a11a 100644 --- a/libraries/tools/kotlin-serialization/build.gradle +++ b/libraries/tools/kotlin-serialization/build.gradle @@ -37,6 +37,10 @@ dependencies { evaluationDependsOn(":kotlinx-serialization-compiler-plugin") +processResources { + expand(project.properties) +} + jar { from(project(":kotlinx-serialization-compiler-plugin").sourceSets.main.output.classesDirs) from(project(":kotlinx-serialization-compiler-plugin").sourceSets.main.output.resourcesDir) 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 c3f975a0498..a74770fd791 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 @@ -18,12 +18,15 @@ package org.jetbrains.kotlinx.serialization.gradle import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.artifacts.ResolvedArtifact -import org.gradle.api.internal.AbstractTask +import org.gradle.api.logging.Logger +import org.gradle.api.logging.Logging import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin +import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact import org.jetbrains.kotlin.gradle.plugin.SubpluginOption +import java.io.FileNotFoundException +import java.util.* class SerializationGradleSubplugin : Plugin { companion object { @@ -37,22 +40,51 @@ class SerializationGradleSubplugin : Plugin { class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin { companion object { - val SERIALIZATION_GROUP_NAME = "org.jetbrains.kotlinx" - val SERIALIZATION_ARTIFACT_NAME = "kotlinx-gradle-serialization-plugin" + const val SERIALIZATION_GROUP_NAME = "org.jetbrains.kotlinx" + const val SERIALIZATION_ARTIFACT_NAME = "kotlinx-gradle-serialization-plugin" } + private val log = Logging.getLogger(this.javaClass) + private val pluginVersion = findPluginVersion(log) + override fun isApplicable(project: Project, task: AbstractCompile) = SerializationGradleSubplugin.isEnabled(project) override fun apply( - project: Project, kotlinCompile: AbstractCompile, javaCompile: AbstractCompile, variantData: Any?, androidProjectHandler: Any?, javaSourceSet: SourceSet?) + project: Project, + kotlinCompile: AbstractCompile, + javaCompile: AbstractCompile, + variantData: Any?, + androidProjectHandler: Any?, + javaSourceSet: SourceSet? + ) : List { - if (!SerializationGradleSubplugin.isEnabled(project)) return emptyList() - val options = mutableListOf() - // nothing here - return options + return emptyList() + } + + + override fun getPluginArtifact(): SubpluginArtifact { + return SubpluginArtifact(SERIALIZATION_GROUP_NAME, SERIALIZATION_ARTIFACT_NAME, pluginVersion) } - override fun getGroupName() = SERIALIZATION_GROUP_NAME - override fun getArtifactName() = SERIALIZATION_ARTIFACT_NAME override fun getCompilerPluginId() = "org.jetbrains.kotlinx.serialization" +} + +// taken from KotlinPluginWrapper.kt +internal fun Logger.kotlinDebug(message: String) { + this.debug("[KOTLIN] $message") +} + +private fun Any.findPluginVersion(log: Logger): String { + log.kotlinDebug("Loading version information about kotlinx.serialization") + val props = Properties() + val propFileName = "plugin.properties" + val loader = javaClass.classLoader!! + val inputStream = loader.getResourceAsStream(propFileName) + ?: throw FileNotFoundException("property file '$propFileName' not found in the classpath") + + props.load(inputStream) + + val pluginVersion = props["plugin.version"] as String + log.kotlinDebug("Found plugin version [$pluginVersion]") + return pluginVersion } \ No newline at end of file diff --git a/libraries/tools/kotlin-serialization/src/main/resources/plugin.properties b/libraries/tools/kotlin-serialization/src/main/resources/plugin.properties new file mode 100644 index 00000000000..ef6a967bf62 --- /dev/null +++ b/libraries/tools/kotlin-serialization/src/main/resources/plugin.properties @@ -0,0 +1 @@ +plugin.version=${project.version} \ No newline at end of file