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 9a5c798cfad..6b72617a631 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 @@ -97,7 +97,8 @@ class Kotlin2JvmSourceSetProcessor( javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet, tasksProvider: KotlinTasksProvider, - kotlinSourceSetProvider: KotlinSourceSetProvider + kotlinSourceSetProvider: KotlinSourceSetProvider, + private val kotlinPluginVersion: String ) : KotlinSourceSetProcessor( project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider, dslExtensionName = KOTLIN_DSL_NAME, @@ -116,23 +117,16 @@ class Kotlin2JvmSourceSetProcessor( tasksProvider.createKotlinJVMTask(project, taskName) override fun doTargetSpecificProcessing() { - val kotlinAnnotationProcessingDep = cachedKotlinAnnotationProcessingDep ?: run { - val projectVersion = loadKotlinVersionFromResource(project.logger) - val dep = "org.jetbrains.kotlin:kotlin-annotation-processing:$projectVersion" - cachedKotlinAnnotationProcessingDep = dep - dep - } - - val aptConfiguration = project.createAptConfiguration(sourceSet.name, kotlinAnnotationProcessingDep) + val aptConfiguration = project.createAptConfiguration(sourceSet.name, kotlinPluginVersion) project.afterEvaluate { project -> if (project != null) { val javaTask = project.tasks.findByName(sourceSet.compileJavaTaskName) val subpluginEnvironment = loadSubplugins(project) - subpluginEnvironment.addSubpluginArguments(project, kotlinTask, + subpluginEnvironment.addSubpluginArguments(project, kotlinTask, javaTask as JavaCompile, null, sourceSet) - + var kotlinAfterJavaTask: KotlinCompile? = null if (aptConfiguration.dependencies.size > 1 && !Kapt2GradleSubplugin.isEnabled(project)) { @@ -201,8 +195,8 @@ class Kotlin2JsSourceSetProcessor( } -abstract class AbstractKotlinPlugin(val tasksProvider: KotlinTasksProvider, val kotlinSourceSetProvider: KotlinSourceSetProvider) : Plugin { - abstract fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet): KotlinSourceSetProcessor<*> +abstract class AbstractKotlinPlugin(val tasksProvider: KotlinTasksProvider, val kotlinSourceSetProvider: KotlinSourceSetProvider, val kotlinPluginVersion: String) : Plugin { + abstract fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet, kotlinPluginVersion: String): KotlinSourceSetProcessor<*> override fun apply(project: Project) { val javaBasePlugin = project.plugins.apply(JavaBasePlugin::class.java) @@ -219,7 +213,7 @@ abstract class AbstractKotlinPlugin(val tasksProvider: KotlinTasksProvider, val javaPluginConvention: JavaPluginConvention ) { 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( tasksProvider: KotlinTasksProvider, - kotlinSourceSetProvider: KotlinSourceSetProvider -) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider) { - override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet) = - Kotlin2JvmSourceSetProcessor(project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider) + kotlinSourceSetProvider: KotlinSourceSetProvider, + kotlinPluginVersion: String +) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider, kotlinPluginVersion) { + override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet, kotlinPluginVersion: String) = + Kotlin2JvmSourceSetProcessor(project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider, kotlinPluginVersion) override fun apply(project: Project) { project.createKaptExtension() @@ -241,15 +236,17 @@ open class KotlinPlugin( open class Kotlin2JsPlugin( tasksProvider: KotlinTasksProvider, - kotlinSourceSetProvider: KotlinSourceSetProvider -) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider) { - override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet) = + kotlinSourceSetProvider: KotlinSourceSetProvider, + kotlinPluginVersion: String +) : AbstractKotlinPlugin(tasksProvider, kotlinSourceSetProvider, kotlinPluginVersion) { + override fun buildSourceSetProcessor(project: Project, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet, kotlinPluginVersion: String) = Kotlin2JsSourceSetProcessor(project, javaBasePlugin, sourceSet, tasksProvider, kotlinSourceSetProvider) } open class KotlinAndroidPlugin( val tasksProvider: KotlinTasksProvider, - private val kotlinSourceSetProvider: KotlinSourceSetProvider + private val kotlinSourceSetProvider: KotlinSourceSetProvider, + private val kotlinPluginVersion: String ) : Plugin { private val log = Logging.getLogger(this.javaClass) @@ -267,17 +264,13 @@ open class KotlinAndroidPlugin( val aptConfigurations = hashMapOf() - val projectVersion = loadKotlinVersionFromResource(log) - val kotlinAnnotationProcessingDep = "org.jetbrains.kotlin:kotlin-annotation-processing:$projectVersion" - ext.sourceSets.all { sourceSet -> log.kotlinDebug("Creating KotlinSourceSet for source set $sourceSet") val kotlinSourceSet = kotlinSourceSetProvider.create(sourceSet.name) kotlinSourceSet.kotlin.srcDir(project.file(project.file("src/${sourceSet.name}/kotlin"))) sourceSet.addConvention(KOTLIN_DSL_NAME, kotlinSourceSet) - aptConfigurations.put(sourceSet.name, - project.createAptConfiguration(sourceSet.name, kotlinAnnotationProcessingDep)) + aptConfigurations.put(sourceSet.name, project.createAptConfiguration(sourceSet.name, kotlinPluginVersion)) } val kotlinOptions = K2JVMCompilerArguments() @@ -486,8 +479,8 @@ class SubpluginEnvironment( ) { fun addSubpluginArguments( - project: Project, - kotlinTask: KotlinCompile, + project: Project, + kotlinTask: KotlinCompile, javaTask: AbstractCompile, variantData: Any?, javaSourceSet: SourceSet?) { @@ -520,10 +513,11 @@ private fun Project.getAptDirsForSourceSet(sourceSetName: String): Pair { private val log = Logging.getLogger(this.javaClass) + protected val kotlinPluginVersion = loadKotlinVersionFromResource(log) 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 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() plugin.apply(project) @@ -34,16 +35,29 @@ abstract class KotlinBasePluginWrapper(protected val fileResolver: FileResolver) open class KotlinPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) { override fun getPlugin() = - KotlinPlugin(KotlinTasksProvider(), KotlinSourceSetProviderImpl(fileResolver)) + KotlinPlugin(KotlinTasksProvider(), KotlinSourceSetProviderImpl(fileResolver), kotlinPluginVersion) } open class KotlinAndroidPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) { override fun getPlugin() = - KotlinAndroidPlugin(AndroidTasksProvider(), KotlinSourceSetProviderImpl(fileResolver)) + KotlinAndroidPlugin(AndroidTasksProvider(), KotlinSourceSetProviderImpl(fileResolver), kotlinPluginVersion) } open class Kotlin2JsPluginWrapper @Inject constructor(fileResolver: FileResolver): KotlinBasePluginWrapper(fileResolver) { 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 +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/kotlinPluginVersion.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/kotlinPluginVersion.kt deleted file mode 100644 index 6c08f160b16..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/kotlinPluginVersion.kt +++ /dev/null @@ -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 -}