Refactor loading kotlin version in gradle plugin
This commit is contained in:
+20
-26
@@ -97,7 +97,8 @@ class Kotlin2JvmSourceSetProcessor(
|
|||||||
javaBasePlugin: JavaBasePlugin,
|
javaBasePlugin: JavaBasePlugin,
|
||||||
sourceSet: SourceSet,
|
sourceSet: SourceSet,
|
||||||
tasksProvider: KotlinTasksProvider,
|
tasksProvider: KotlinTasksProvider,
|
||||||
kotlinSourceSetProvider: KotlinSourceSetProvider
|
kotlinSourceSetProvider: KotlinSourceSetProvider,
|
||||||
|
private val kotlinPluginVersion: String
|
||||||
) : KotlinSourceSetProcessor<KotlinCompile>(
|
) : KotlinSourceSetProcessor<KotlinCompile>(
|
||||||
project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider,
|
project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider,
|
||||||
dslExtensionName = KOTLIN_DSL_NAME,
|
dslExtensionName = KOTLIN_DSL_NAME,
|
||||||
@@ -116,14 +117,7 @@ class Kotlin2JvmSourceSetProcessor(
|
|||||||
tasksProvider.createKotlinJVMTask(project, taskName)
|
tasksProvider.createKotlinJVMTask(project, taskName)
|
||||||
|
|
||||||
override fun doTargetSpecificProcessing() {
|
override fun doTargetSpecificProcessing() {
|
||||||
val kotlinAnnotationProcessingDep = cachedKotlinAnnotationProcessingDep ?: run {
|
val aptConfiguration = project.createAptConfiguration(sourceSet.name, kotlinPluginVersion)
|
||||||
val projectVersion = loadKotlinVersionFromResource(project.logger)
|
|
||||||
val dep = "org.jetbrains.kotlin:kotlin-annotation-processing:$projectVersion"
|
|
||||||
cachedKotlinAnnotationProcessingDep = dep
|
|
||||||
dep
|
|
||||||
}
|
|
||||||
|
|
||||||
val aptConfiguration = project.createAptConfiguration(sourceSet.name, kotlinAnnotationProcessingDep)
|
|
||||||
|
|
||||||
project.afterEvaluate { project ->
|
project.afterEvaluate { project ->
|
||||||
if (project != null) {
|
if (project != null) {
|
||||||
@@ -201,8 +195,8 @@ class Kotlin2JsSourceSetProcessor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
abstract class AbstractKotlinPlugin(val tasksProvider: KotlinTasksProvider, val kotlinSourceSetProvider: KotlinSourceSetProvider) : Plugin<Project> {
|
abstract class AbstractKotlinPlugin(val tasksProvider: KotlinTasksProvider, val kotlinSourceSetProvider: KotlinSourceSetProvider, val kotlinPluginVersion: String) : Plugin<Project> {
|
||||||
abstract fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet): KotlinSourceSetProcessor<*>
|
abstract fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet, kotlinPluginVersion: String): KotlinSourceSetProcessor<*>
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
val javaBasePlugin = project.plugins.apply(JavaBasePlugin::class.java)
|
val javaBasePlugin = project.plugins.apply(JavaBasePlugin::class.java)
|
||||||
@@ -219,7 +213,7 @@ abstract class AbstractKotlinPlugin(val tasksProvider: KotlinTasksProvider, val
|
|||||||
javaPluginConvention: JavaPluginConvention
|
javaPluginConvention: JavaPluginConvention
|
||||||
) {
|
) {
|
||||||
javaPluginConvention.sourceSets?.all { sourceSet ->
|
javaPluginConvention.sourceSets?.all { sourceSet ->
|
||||||
buildSourceSetProcessor(project, javaBasePlugin, sourceSet).run()
|
buildSourceSetProcessor(project, javaBasePlugin, sourceSet, kotlinPluginVersion).run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -227,10 +221,11 @@ abstract class AbstractKotlinPlugin(val tasksProvider: KotlinTasksProvider, val
|
|||||||
|
|
||||||
open class KotlinPlugin(
|
open class KotlinPlugin(
|
||||||
tasksProvider: KotlinTasksProvider,
|
tasksProvider: KotlinTasksProvider,
|
||||||
kotlinSourceSetProvider: KotlinSourceSetProvider
|
kotlinSourceSetProvider: KotlinSourceSetProvider,
|
||||||
) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider) {
|
kotlinPluginVersion: String
|
||||||
override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet) =
|
) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider, kotlinPluginVersion) {
|
||||||
Kotlin2JvmSourceSetProcessor(project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider)
|
override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet, kotlinPluginVersion: String) =
|
||||||
|
Kotlin2JvmSourceSetProcessor(project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider, kotlinPluginVersion)
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
project.createKaptExtension()
|
project.createKaptExtension()
|
||||||
@@ -241,15 +236,17 @@ open class KotlinPlugin(
|
|||||||
|
|
||||||
open class Kotlin2JsPlugin(
|
open class Kotlin2JsPlugin(
|
||||||
tasksProvider: KotlinTasksProvider,
|
tasksProvider: KotlinTasksProvider,
|
||||||
kotlinSourceSetProvider: KotlinSourceSetProvider
|
kotlinSourceSetProvider: KotlinSourceSetProvider,
|
||||||
) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider) {
|
kotlinPluginVersion: String
|
||||||
override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet) =
|
) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider, kotlinPluginVersion) {
|
||||||
|
override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet, kotlinPluginVersion: String) =
|
||||||
Kotlin2JsSourceSetProcessor(project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider)
|
Kotlin2JsSourceSetProcessor(project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
open class KotlinAndroidPlugin(
|
open class KotlinAndroidPlugin(
|
||||||
val tasksProvider: KotlinTasksProvider,
|
val tasksProvider: KotlinTasksProvider,
|
||||||
private val kotlinSourceSetProvider: KotlinSourceSetProvider
|
private val kotlinSourceSetProvider: KotlinSourceSetProvider,
|
||||||
|
private val kotlinPluginVersion: String
|
||||||
) : Plugin<Project> {
|
) : Plugin<Project> {
|
||||||
|
|
||||||
private val log = Logging.getLogger(this.javaClass)
|
private val log = Logging.getLogger(this.javaClass)
|
||||||
@@ -267,17 +264,13 @@ open class KotlinAndroidPlugin(
|
|||||||
|
|
||||||
val aptConfigurations = hashMapOf<String, Configuration>()
|
val aptConfigurations = hashMapOf<String, Configuration>()
|
||||||
|
|
||||||
val projectVersion = loadKotlinVersionFromResource(log)
|
|
||||||
val kotlinAnnotationProcessingDep = "org.jetbrains.kotlin:kotlin-annotation-processing:$projectVersion"
|
|
||||||
|
|
||||||
ext.sourceSets.all { sourceSet ->
|
ext.sourceSets.all { sourceSet ->
|
||||||
log.kotlinDebug("Creating KotlinSourceSet for source set $sourceSet")
|
log.kotlinDebug("Creating KotlinSourceSet for source set $sourceSet")
|
||||||
val kotlinSourceSet = kotlinSourceSetProvider.create(sourceSet.name)
|
val kotlinSourceSet = kotlinSourceSetProvider.create(sourceSet.name)
|
||||||
kotlinSourceSet.kotlin.srcDir(project.file(project.file("src/${sourceSet.name}/kotlin")))
|
kotlinSourceSet.kotlin.srcDir(project.file(project.file("src/${sourceSet.name}/kotlin")))
|
||||||
sourceSet.addConvention(KOTLIN_DSL_NAME, kotlinSourceSet)
|
sourceSet.addConvention(KOTLIN_DSL_NAME, kotlinSourceSet)
|
||||||
|
|
||||||
aptConfigurations.put(sourceSet.name,
|
aptConfigurations.put(sourceSet.name, project.createAptConfiguration(sourceSet.name, kotlinPluginVersion))
|
||||||
project.createAptConfiguration(sourceSet.name, kotlinAnnotationProcessingDep))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val kotlinOptions = K2JVMCompilerArguments()
|
val kotlinOptions = K2JVMCompilerArguments()
|
||||||
@@ -520,10 +513,11 @@ private fun Project.getAptDirsForSourceSet(sourceSetName: String): Pair<File, Fi
|
|||||||
return aptOutputDirForVariant to aptWorkingDirForVariant
|
return aptOutputDirForVariant to aptWorkingDirForVariant
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Project.createAptConfiguration(sourceSetName: String, kotlinAnnotationProcessingDep: String): Configuration {
|
private fun Project.createAptConfiguration(sourceSetName: String, kotlinPluginVersion: String): Configuration {
|
||||||
val aptConfigurationName = Kapt2KotlinGradleSubplugin.getKaptConfigurationName(sourceSetName)
|
val aptConfigurationName = Kapt2KotlinGradleSubplugin.getKaptConfigurationName(sourceSetName)
|
||||||
|
|
||||||
val aptConfiguration = configurations.create(aptConfigurationName)
|
val aptConfiguration = configurations.create(aptConfigurationName)
|
||||||
|
val kotlinAnnotationProcessingDep = "org.jetbrains.kotlin:kotlin-annotation-processing:$kotlinPluginVersion"
|
||||||
aptConfiguration.dependencies.add(dependencies.create(kotlinAnnotationProcessingDep))
|
aptConfiguration.dependencies.add(dependencies.create(kotlinAnnotationProcessingDep))
|
||||||
|
|
||||||
return aptConfiguration
|
return aptConfiguration
|
||||||
|
|||||||
+20
-6
@@ -3,24 +3,25 @@ package org.jetbrains.kotlin.gradle.plugin
|
|||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.internal.file.FileResolver
|
import org.gradle.api.internal.file.FileResolver
|
||||||
|
import org.gradle.api.logging.Logger
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.gradle.internal.KotlinSourceSetProviderImpl
|
import org.jetbrains.kotlin.gradle.internal.KotlinSourceSetProviderImpl
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AndroidTasksProvider
|
import org.jetbrains.kotlin.gradle.tasks.AndroidTasksProvider
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||||
|
import java.io.FileNotFoundException
|
||||||
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
// TODO: simplify: the complicated structure is a leftover from dynamic loading of plugin core, could be significantly simplified now
|
// TODO: simplify: the complicated structure is a leftover from dynamic loading of plugin core, could be significantly simplified now
|
||||||
|
|
||||||
abstract class KotlinBasePluginWrapper(protected val fileResolver: FileResolver): Plugin<Project> {
|
abstract class KotlinBasePluginWrapper(protected val fileResolver: FileResolver): Plugin<Project> {
|
||||||
private val log = Logging.getLogger(this.javaClass)
|
private val log = Logging.getLogger(this.javaClass)
|
||||||
|
protected val kotlinPluginVersion = loadKotlinVersionFromResource(log)
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
// TODO: consider only set if if daemon or parallel compilation are enabled, though this way it should be safe too
|
// 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")
|
System.setProperty(org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY, "true")
|
||||||
|
|
||||||
val kotlinPluginVersion = loadKotlinVersionFromResource(log)
|
|
||||||
project.extensions.extraProperties?.set("kotlin.gradle.plugin.version", kotlinPluginVersion)
|
|
||||||
|
|
||||||
val plugin = getPlugin()
|
val plugin = getPlugin()
|
||||||
plugin.apply(project)
|
plugin.apply(project)
|
||||||
|
|
||||||
@@ -34,16 +35,29 @@ abstract class KotlinBasePluginWrapper(protected val fileResolver: FileResolver)
|
|||||||
|
|
||||||
open class KotlinPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) {
|
open class KotlinPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) {
|
||||||
override fun getPlugin() =
|
override fun getPlugin() =
|
||||||
KotlinPlugin(KotlinTasksProvider(), KotlinSourceSetProviderImpl(fileResolver))
|
KotlinPlugin(KotlinTasksProvider(), KotlinSourceSetProviderImpl(fileResolver), kotlinPluginVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
open class KotlinAndroidPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) {
|
open class KotlinAndroidPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) {
|
||||||
override fun getPlugin() =
|
override fun getPlugin() =
|
||||||
KotlinAndroidPlugin(AndroidTasksProvider(), KotlinSourceSetProviderImpl(fileResolver))
|
KotlinAndroidPlugin(AndroidTasksProvider(), KotlinSourceSetProviderImpl(fileResolver), kotlinPluginVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
open class Kotlin2JsPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) {
|
open class Kotlin2JsPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) {
|
||||||
override fun getPlugin() =
|
override fun getPlugin() =
|
||||||
Kotlin2JsPlugin(KotlinTasksProvider(), KotlinSourceSetProviderImpl(fileResolver))
|
Kotlin2JsPlugin(KotlinTasksProvider(), KotlinSourceSetProviderImpl(fileResolver), kotlinPluginVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun Any.loadKotlinVersionFromResource(log: Logger): String {
|
||||||
|
log.kotlinDebug("Loading version information")
|
||||||
|
val props = Properties()
|
||||||
|
val propFileName = "project.properties"
|
||||||
|
val inputStream = javaClass.classLoader!!.getResourceAsStream(propFileName) ?:
|
||||||
|
throw FileNotFoundException("property file '$propFileName' not found in the classpath")
|
||||||
|
|
||||||
|
props.load(inputStream)
|
||||||
|
|
||||||
|
val projectVersion = props["project.version"] as String
|
||||||
|
log.kotlinDebug("Found project version [$projectVersion]")
|
||||||
|
return projectVersion
|
||||||
|
}
|
||||||
|
|||||||
-35
@@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin
|
|
||||||
|
|
||||||
import org.gradle.api.logging.Logger
|
|
||||||
import java.io.FileNotFoundException
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
internal fun Any.loadKotlinVersionFromResource(log: Logger): String {
|
|
||||||
log.kotlinDebug("Loading version information")
|
|
||||||
val props = Properties()
|
|
||||||
val propFileName = "project.properties"
|
|
||||||
val inputStream = javaClass.classLoader!!.getResourceAsStream(propFileName) ?:
|
|
||||||
throw FileNotFoundException("property file '$propFileName' not found in the classpath")
|
|
||||||
|
|
||||||
props.load(inputStream)
|
|
||||||
|
|
||||||
val projectVersion = props["project.version"] as String
|
|
||||||
log.kotlinDebug("Found project version [$projectVersion]")
|
|
||||||
return projectVersion
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user