Integrate serialization plugin into big Kotlin plugin

Split import handlers into multiple files
Add empty Maven handler for Android Studio

Add testRuntime dependency on kx-serialization-plugin for all modules which require compiler
plugins in test classpath
This commit is contained in:
Leonid Startsev
2018-09-05 16:03:16 +03:00
parent 087f60389a
commit dea69e4469
60 changed files with 117 additions and 184 deletions
@@ -16,10 +16,16 @@
<kotlin.version>1.2-SNAPSHOT</kotlin.version>
</properties>
<groupId>org.jetbrains.kotlinx</groupId>
<parent>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-project</artifactId>
<version>1.3-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>kotlinx-maven-serialization-plugin</artifactId>
<packaging>jar</packaging>
<version>0.7.0-eap-1</version>
<description>Serialization plugin for Maven</description>
<repositories>
@@ -138,14 +144,4 @@
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>bintray-repo</id>
<url>https://api.bintray.com/maven/kotlin/kotlinx/kotlinx.serialization.plugin/</url>
</repository>
</distributionManagement>
</project>
@@ -3,9 +3,6 @@ apply plugin: 'kotlin'
configureJvmProject(project)
configurePublishing(project)
group = 'org.jetbrains.kotlinx'
version = project(':kotlinx-gradle-serialization-plugin').version
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
@@ -23,15 +20,10 @@ dependencies {
compileOnly project(':kotlin-stdlib')
compileOnly project(path: ':kotlin-compiler-embeddable', configuration: 'runtimeJar')
compileOnly project(':kotlin-allopen-compiler-plugin')
compileOnly 'org.jetbrains.kotlin:gradle-api:1.6'
}
processResources {
expand(project.properties)
}
evaluationDependsOn(":kotlinx-serialization-compiler-plugin")
jar {
@@ -40,6 +32,8 @@ jar {
manifestAttributes(manifest, project)
}
ArtifactsKt.runtimeJar(project, jar, {})
artifacts {
archives sourcesJar
archives javadocJar
@@ -1,18 +1,8 @@
plugins {
id "com.jfrog.bintray" version "1.7.3"
}
apply plugin: 'kotlin'
configureJvmProject(project)
configurePublishing(project)
group = 'org.jetbrains.kotlinx'
version = '0.7.0'
if (!project.hasProperty("deploy")) {
version = "$version-eap-1"
}
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
@@ -37,10 +27,6 @@ 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)
@@ -53,26 +39,3 @@ artifacts {
archives sourcesJar
archives javadocJar
}
bintray {
user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')
key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')
configurations = ['archives']
if (!project.hasProperty("deploy")) {
dryRun = true
}
pkg {
repo = 'kotlinx'
name = 'kotlinx.serialization.plugin'
userOrg = 'kotlin'
licenses = ['Apache-2.0']
vcsUrl = 'https://github.com/JetBrains/kotlin/tree/rr/kotlinx.serialization/libraries'
websiteUrl = 'https://github.com/Kotlin/kotlinx.serialization'
issueTrackerUrl = 'https://github.com/Kotlin/kotlinx.serialization/issues'
githubRepo = 'JetBrains/kotlin'
version {
name = project.version
}
}
}
@@ -18,17 +18,12 @@ package org.jetbrains.kotlinx.serialization.gradle
import org.gradle.api.Plugin
import org.gradle.api.Project
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.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import java.io.FileNotFoundException
import java.util.*
class SerializationGradleSubplugin : Plugin<Project> {
companion object {
@@ -42,13 +37,11 @@ class SerializationGradleSubplugin : Plugin<Project> {
class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin<AbstractCompile> {
companion object {
const val SERIALIZATION_GROUP_NAME = "org.jetbrains.kotlinx"
const val SERIALIZATION_GROUP_NAME = "org.jetbrains.kotlin"
const val SERIALIZATION_ARTIFACT_NAME = "kotlinx-gradle-serialization-plugin"
const val SERIALIZATION_ARTIFACT_UNSHADED_NAME = "kotlinx-gradle-serialization-plugin-unshaded"
}
private val log = Logging.getLogger(this.javaClass)
private val pluginVersion = "0.7.0-eap-1"
private var useUnshaded = false
override fun isApplicable(project: Project, task: AbstractCompile): Boolean {
@@ -65,36 +58,15 @@ class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin<AbstractCompile
variantData: Any?,
androidProjectHandler: Any?,
kotlinCompilation: KotlinCompilation?
)
: List<SubpluginOption> {
): List<SubpluginOption> {
return emptyList()
}
override fun getPluginArtifact(): SubpluginArtifact {
val artifact = if (useUnshaded) SERIALIZATION_ARTIFACT_UNSHADED_NAME else SERIALIZATION_ARTIFACT_NAME
return SubpluginArtifact(SERIALIZATION_GROUP_NAME, artifact, pluginVersion)
return SubpluginArtifact(SERIALIZATION_GROUP_NAME, artifact)
}
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
}
@@ -1 +0,0 @@
plugin.version=${project.version}