[Gradle][Minor] Move Kotlin2JvmSourceSetProcessor into separate source file

KT-54312
This commit is contained in:
Sebastian Sellmair
2022-09-27 14:10:43 +02:00
committed by Space Team
parent 10ca5d7f2a
commit b5327bc46e
9 changed files with 101 additions and 60 deletions
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.gradle.dsl
@Deprecated("Rebasing Artifact. Will be removed later", replaceWith = ReplaceWith("KotlinJsCompilerOptions"))
typealias CompilerCommonCoOptions = KotlinJsCompilerOptions
interface KotlinCommonCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerToolOptions {
/**
@@ -5,6 +5,11 @@
package org.jetbrains.kotlin.gradle.dsl
@Deprecated("Rebasing Artifact. Will be removed later", replaceWith = ReplaceWith("KotlinCommonCompilerToolOptions"))
typealias CompilerCommonToolOptions = KotlinCommonCompilerToolOptions
interface KotlinCommonCompilerToolOptions {
/**
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.gradle.dsl
@Deprecated("Rebasing Artifact. Will be removed later", replaceWith = ReplaceWith("KotlinCommonCompilerOptions"))
typealias CompilerCommonOptions = KotlinCommonCompilerOptions
@Deprecated("Use KotlinCommonCompilerOptions instead", level = DeprecationLevel.WARNING)
interface KotlinCommonOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonToolOptions {
override val options: org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.gradle.dsl
@Deprecated("Rebasing Artifact. Will be removed later", replaceWith = ReplaceWith("KotlinJsCompilerOptions"))
typealias CompilerJsOptions = KotlinJsCompilerOptions
interface KotlinJsCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions {
/**
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.gradle.dsl
@Deprecated("Rebasing Artifact. Will be removed later", replaceWith = ReplaceWith("KotlinJsDceCompilerToolOptions"))
typealias CompilerJsDceOptions = KotlinJsDceCompilerToolOptions
interface KotlinJsDceCompilerToolOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerToolOptions {
/**
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.gradle.dsl
@Deprecated("Rebasing Artifact. Will be removed later", replaceWith = ReplaceWith("KotlinJvmCompilerOptions"))
typealias CompilerJvmOptions = KotlinJvmCompilerOptions
interface KotlinJvmCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions {
/**
@@ -5,5 +5,8 @@
package org.jetbrains.kotlin.gradle.dsl
@Deprecated("Rebasing Artifact. Will be removed later", replaceWith = ReplaceWith("KotlinMultiplatformCommonCompilerOptions"))
typealias CompilerMultiplatformCommonOptions = KotlinMultiplatformCommonCompilerOptions
interface KotlinMultiplatformCommonCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions {
}
@@ -0,0 +1,78 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Project
import org.gradle.api.file.Directory
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.AbstractCompile
import org.jetbrains.kotlin.gradle.dsl.CompilerJvmOptions
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.tasks.configuration.KotlinCompileConfig
import org.jetbrains.kotlin.gradle.tasks.withType
import org.jetbrains.kotlin.gradle.utils.whenKaptEnabled
internal class Kotlin2JvmSourceSetProcessor(
tasksProvider: KotlinTasksProvider,
kotlinCompilation: KotlinCompilationData<*>
) : KotlinSourceSetProcessor<KotlinCompile>(
tasksProvider, "Compiles the $kotlinCompilation.", kotlinCompilation
) {
override fun doRegisterTask(project: Project, taskName: String): TaskProvider<out KotlinCompile> {
val configAction = KotlinCompileConfig(kotlinCompilation)
applyStandardTaskConfiguration(configAction)
return tasksProvider.registerKotlinJVMTask(
project,
taskName,
kotlinCompilation.compilerOptions.options as CompilerJvmOptions,
configAction
)
}
override fun doTargetSpecificProcessing() {
project.whenKaptEnabled {
Kapt3GradleSubplugin.createAptConfigurationIfNeeded(project, kotlinCompilation.compilationPurpose)
}
ScriptingGradleSubplugin.configureForSourceSet(project, kotlinCompilation.compilationPurpose)
project.whenEvaluated {
val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
if (kotlinCompilation is KotlinCompilation<*>) // FIXME support compiler plugins with PM20
subpluginEnvironment.addSubpluginOptions(project, kotlinCompilation)
javaSourceSet?.let { java ->
val javaTask = project.tasks.withType<AbstractCompile>().named(java.compileJavaTaskName)
javaTask.configure { javaCompile ->
javaCompile.classpath += project.files(kotlinTask.flatMap { it.destinationDirectory })
}
kotlinTask.configure { kotlinCompile ->
kotlinCompile.javaOutputDir.set(javaTask.flatMap { it.destinationDirectory })
}
}
if (sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME) {
project.pluginManager.withPlugin("java-library") {
registerKotlinOutputForJavaLibrary(kotlinTask.flatMap { it.destinationDirectory })
}
}
}
}
private fun registerKotlinOutputForJavaLibrary(outputDir: Provider<Directory>) {
val configuration = project.configurations.getByName("apiElements")
configuration.outgoing.variants.getByName("classes").artifact(outputDir) {
it.type = "java-classes-directory"
}
}
}
@@ -9,7 +9,6 @@ import com.android.build.gradle.*
import org.gradle.api.*
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Usage
import org.gradle.api.file.Directory
import org.gradle.api.file.FileCollection
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.provider.Provider
@@ -18,11 +17,9 @@ import org.gradle.api.publish.maven.MavenPom
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.AbstractCompile
import org.gradle.jvm.tasks.Jar
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
@@ -34,7 +31,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.isMainCompilationData
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
import org.jetbrains.kotlin.gradle.targets.js.ir.*
import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.configuration.*
import org.jetbrains.kotlin.gradle.utils.*
import java.io.File
@@ -51,62 +47,6 @@ val KOTLIN_DSL_NAME = "kotlin"
val KOTLIN_JS_DSL_NAME = "kotlin2js"
val KOTLIN_OPTIONS_DSL_NAME = "kotlinOptions"
internal class Kotlin2JvmSourceSetProcessor(
tasksProvider: KotlinTasksProvider,
kotlinCompilation: KotlinCompilationData<*>
) : KotlinSourceSetProcessor<KotlinCompile>(
tasksProvider, "Compiles the $kotlinCompilation.", kotlinCompilation
) {
override fun doRegisterTask(project: Project, taskName: String): TaskProvider<out KotlinCompile> {
val configAction = KotlinCompileConfig(kotlinCompilation)
applyStandardTaskConfiguration(configAction)
return tasksProvider.registerKotlinJVMTask(
project,
taskName,
kotlinCompilation.compilerOptions.options as KotlinJvmCompilerOptions,
configAction
)
}
override fun doTargetSpecificProcessing() {
project.whenKaptEnabled {
Kapt3GradleSubplugin.createAptConfigurationIfNeeded(project, kotlinCompilation.compilationPurpose)
}
ScriptingGradleSubplugin.configureForSourceSet(project, kotlinCompilation.compilationPurpose)
project.whenEvaluated {
val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
if (kotlinCompilation is KotlinCompilation<*>) // FIXME support compiler plugins with PM20
subpluginEnvironment.addSubpluginOptions(project, kotlinCompilation)
javaSourceSet?.let { java ->
val javaTask = project.tasks.withType<AbstractCompile>().named(java.compileJavaTaskName)
javaTask.configure { javaCompile ->
javaCompile.classpath += project.files(kotlinTask.flatMap { it.destinationDirectory })
}
kotlinTask.configure { kotlinCompile ->
kotlinCompile.javaOutputDir.set(javaTask.flatMap { it.destinationDirectory })
}
}
if (sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME) {
project.pluginManager.withPlugin("java-library") {
registerKotlinOutputForJavaLibrary(kotlinTask.flatMap { it.destinationDirectory })
}
}
}
}
private fun registerKotlinOutputForJavaLibrary(outputDir: Provider<Directory>) {
val configuration = project.configurations.getByName("apiElements")
configuration.outgoing.variants.getByName("classes").artifact(outputDir) {
it.type = "java-classes-directory"
}
}
}
internal fun KotlinCompilationOutput.addClassesDir(classesDirProvider: () -> FileCollection) {
classesDirs.from(Callable { classesDirProvider() })
}