Move kotlinOptions out of the tasks

This commit is contained in:
Sergey Igushkin
2020-06-05 19:46:07 +03:00
parent 19ac036ec5
commit 0b7d8c51cb
16 changed files with 81 additions and 56 deletions
@@ -20,6 +20,8 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.*
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
import org.jetbrains.kotlin.gradle.tasks.FilteringSourceRootsContainer
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.SourceRoots
@@ -33,6 +35,8 @@ import java.io.File
open class KaptGenerateStubsTask : KotlinCompile() {
override val sourceRootsContainer = FilteringSourceRootsContainer(emptyList(), { isSourceRootAllowed(it) })
override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsImpl()
@get:Internal
@field:Transient // can't serialize task references in Gradle instant execution state
internal lateinit var kotlinCompileTask: KotlinCompile
@@ -614,9 +614,16 @@ internal open class KotlinPlugin(
Kotlin2JvmSourceSetProcessor(tasksProvider, compilation, kotlinPluginVersion)
override fun apply(project: Project) {
val target = KotlinWithJavaTarget<KotlinJvmOptions>(project, KotlinPlatformType.jvm, targetName).apply {
disambiguationClassifier = null // don't add anything to the task names
}
val target =
KotlinWithJavaTarget<KotlinJvmOptions>(
project,
KotlinPlatformType.jvm,
targetName,
{ KotlinJvmOptionsImpl() }
).apply {
disambiguationClassifier = null // don't add anything to the task names
}
(project.kotlinExtension as KotlinJvmProjectExtension).target = target
super.apply(project)
@@ -642,7 +649,12 @@ internal open class KotlinCommonPlugin(
KotlinCommonSourceSetProcessor(compilation, tasksProvider, kotlinPluginVersion)
override fun apply(project: Project) {
val target = KotlinWithJavaTarget<KotlinMultiplatformCommonOptions>(project, KotlinPlatformType.common, targetName)
val target = KotlinWithJavaTarget<KotlinMultiplatformCommonOptions>(
project,
KotlinPlatformType.common,
targetName,
{ KotlinMultiplatformCommonOptionsImpl() }
)
(project.kotlinExtension as KotlinCommonProjectExtension).target = target
super.apply(project)
@@ -675,7 +687,7 @@ internal open class Kotlin2JsPlugin(
For usage details, see https://kotlinlang.org/docs/reference/js-project-setup.html
""".trimIndent()
)
val target = KotlinWithJavaTarget<KotlinJsOptions>(project, KotlinPlatformType.js, targetName)
val target = KotlinWithJavaTarget<KotlinJsOptions>(project, KotlinPlatformType.js, targetName, { KotlinJsOptionsImpl() })
(project.kotlinExtension as Kotlin2JsProjectExtension).target = target
super.apply(project)
@@ -8,9 +8,8 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonOptions
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
@@ -22,6 +21,9 @@ class KotlinCommonCompilation(
target: KotlinTarget,
name: String
) : AbstractKotlinCompilation<KotlinMultiplatformCommonOptions>(target, name), KotlinMetadataCompilation<KotlinMultiplatformCommonOptions> {
override val kotlinOptions: KotlinMultiplatformCommonOptions = KotlinMultiplatformCommonOptionsImpl()
override val compileKotlinTask: KotlinCompileCommon
get() = super.compileKotlinTask as KotlinCompileCommon
@@ -44,9 +44,6 @@ abstract class AbstractKotlinCompilation<T : KotlinCommonOptions>(
override val compilationName: String
) : KotlinCompilation<T>, HasKotlinDependencies {
override val kotlinOptions: T
get() = compileKotlinTask.kotlinOptions
override fun kotlinOptions(configure: T.() -> Unit) =
configure(kotlinOptions)
@@ -11,6 +11,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.tasks.TaskProvider
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
@@ -26,6 +27,9 @@ open class KotlinJsCompilation(
target: KotlinTarget,
name: String
) : AbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(target, name), KotlinCompilationWithResources<KotlinJsOptions> {
override val kotlinOptions: KotlinJsOptions = KotlinJsOptionsImpl()
internal val binaries: KotlinJsBinaryContainer =
target.project.objects.newInstance(
KotlinJsBinaryContainer::class.java,
@@ -11,6 +11,7 @@ import org.gradle.api.tasks.*
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION
@@ -27,6 +28,8 @@ open class KotlinJsIrLink : Kotlin2JsCompile() {
@Internal
override fun getSource(): FileTree = super.getSource()
override val kotlinOptions: KotlinJsOptions = KotlinJsOptionsImpl()
@get:SkipWhenEmpty
@get:InputDirectory
@get:PathSensitive(PathSensitivity.RELATIVE)
@@ -12,6 +12,7 @@ import org.gradle.api.provider.Property
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.getJavaTaskProvider
import org.jetbrains.kotlin.gradle.plugin.getTestedVariantData
@@ -21,8 +22,10 @@ import org.jetbrains.kotlin.gradle.plugin.getTestedVariantData
name: String
) : AbstractKotlinCompilationToRunnableFiles<KotlinJvmOptions>(target, name) {
lateinit var androidVariant: BaseVariant
internal set
override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsImpl()
lateinit var androidVariant: BaseVariant
internal set
override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile
get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile
@@ -8,8 +8,9 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.compile.JavaCompile
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
@@ -17,6 +18,9 @@ open class KotlinJvmCompilation(
override val target: KotlinJvmTarget,
name: String
) : AbstractKotlinCompilationToRunnableFiles<KotlinJvmOptions>(target, name), KotlinCompilationWithResources<KotlinJvmOptions> {
override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsImpl()
override val processResourcesTaskName: String
get() = disambiguateName("processResources")
@@ -9,6 +9,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPlugin
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
@@ -29,7 +30,7 @@ class KotlinJvmWithJavaTargetPreset(
project.plugins.apply(JavaPlugin::class.java)
val target = KotlinWithJavaTarget<KotlinJvmOptions>(project, KotlinPlatformType.jvm, name).apply {
val target = KotlinWithJavaTarget<KotlinJvmOptions>(project, KotlinPlatformType.jvm, name, { KotlinJvmOptionsImpl() }).apply {
disambiguationClassifier = name
preset = this@KotlinJvmWithJavaTargetPreset
}
@@ -18,7 +18,8 @@ import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
class KotlinWithJavaCompilation<KotlinOptionsType : KotlinCommonOptions>(
target: KotlinWithJavaTarget<KotlinOptionsType>,
name: String
name: String,
override val kotlinOptions: KotlinOptionsType
) : AbstractKotlinCompilationToRunnableFiles<KotlinOptionsType>(target, name), KotlinCompilationWithResources<KotlinOptionsType> {
lateinit var javaSourceSet: SourceSet
@@ -11,7 +11,8 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions>(
val project: Project,
val target: KotlinWithJavaTarget<KotlinOptionsType>
val target: KotlinWithJavaTarget<KotlinOptionsType>,
val kotlinOptionsFactory: () -> KotlinOptionsType
) : KotlinCompilationFactory<KotlinWithJavaCompilation<KotlinOptionsType>> {
override val itemClass: Class<KotlinWithJavaCompilation<KotlinOptionsType>>
@@ -19,7 +20,7 @@ class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions>(
get() = KotlinWithJavaCompilation::class.java as Class<KotlinWithJavaCompilation<KotlinOptionsType>>
override fun create(name: String): KotlinWithJavaCompilation<KotlinOptionsType> {
val result = KotlinWithJavaCompilation(target, name)
val result = KotlinWithJavaCompilation(target, name, kotlinOptionsFactory())
return result
}
}
@@ -19,7 +19,8 @@ import java.io.File
open class KotlinWithJavaTarget<KotlinOptionsType : KotlinCommonOptions>(
project: Project,
override val platformType: KotlinPlatformType,
override val targetName: String
override val targetName: String,
kotlinOptionsFactory: () -> KotlinOptionsType
) : AbstractKotlinTarget(project) {
override var disambiguationClassifier: String? = null
internal set
@@ -40,7 +41,7 @@ open class KotlinWithJavaTarget<KotlinOptionsType : KotlinCommonOptions>(
@Suppress("UNCHECKED_CAST")
project.container(
KotlinWithJavaCompilation::class.java as Class<KotlinWithJavaCompilation<KotlinOptionsType>>,
KotlinWithJavaCompilationFactory(project, this)
KotlinWithJavaCompilationFactory(project, this, kotlinOptionsFactory)
)
internal val defaultArtifactClassesListFile: File
@@ -16,10 +16,7 @@ import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.tasks.TaskProvider
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet
@@ -34,8 +31,26 @@ abstract class AbstractKotlinNativeCompilation(
compilationName: String
) : AbstractKotlinCompilation<KotlinCommonOptions>(target, compilationName) {
override val kotlinOptions: KotlinCommonOptions
get() = compileKotlinTask.kotlinOptions
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions()
private inner class NativeCompileOptions : KotlinCommonOptions {
private val languageSettings: LanguageSettingsBuilder
get() = defaultSourceSet.languageSettings
override var apiVersion: String?
get() = languageSettings.apiVersion
set(value) { languageSettings.apiVersion = value }
override var languageVersion: String?
get() = languageSettings.languageVersion
set(value) { languageSettings.languageVersion = value }
override var allWarningsAsErrors: Boolean = false
override var suppressWarnings: Boolean = false
override var verbose: Boolean = false
override var freeCompilerArgs: List<String> = listOf()
}
override val compileKotlinTask: KotlinNativeCompile
get() = super.compileKotlinTask as KotlinNativeCompile
@@ -96,9 +111,6 @@ class KotlinNativeCompilation(
val binariesTaskName: String
get() = lowerCamelCaseName(target.disambiguationClassifier, compilationName, "binaries")
override val kotlinOptions: KotlinCommonOptions
get() = compileKotlinTask.kotlinOptions
}
class KotlinSharedNativeCompilation(override val target: KotlinMetadataTarget, val konanTargets: List<KonanTarget>, name: String) :
@@ -368,28 +368,13 @@ open class KotlinNativeCompile : AbstractKotlinNativeCompile<KotlinCommonOptions
// endregion.
// region Kotlin options.
private inner class NativeCompileOptions : KotlinCommonOptions {
override var apiVersion: String?
get() = languageSettings.apiVersion
set(value) { languageSettings.apiVersion = value }
override var languageVersion: String?
get() = this@KotlinNativeCompile.languageVersion
set(value) { languageSettings.languageVersion = value }
override var allWarningsAsErrors: Boolean = false
override var suppressWarnings: Boolean = false
override var verbose: Boolean = false
override var freeCompilerArgs: List<String> = listOf()
}
override val kotlinOptions: KotlinCommonOptions
get() = compilation.kotlinOptions
@get:Input
override val additionalCompilerOptions: Collection<String>
get() = kotlinOptions.freeCompilerArgs
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions()
override fun kotlinOptions(fn: KotlinCommonOptions.() -> Unit) {
kotlinOptions.fn()
}
@@ -40,9 +40,8 @@ import java.io.File
@CacheableTask
open class KotlinCompileCommon : AbstractKotlinCompile<K2MetadataCompilerArguments>(), KotlinCommonCompile {
private val kotlinOptionsImpl = KotlinMultiplatformCommonOptionsImpl()
override val kotlinOptions: KotlinMultiplatformCommonOptions
get() = kotlinOptionsImpl
get() = taskData.compilation.kotlinOptions as KotlinMultiplatformCommonOptionsImpl
override fun createCompilerArgs(): K2MetadataCompilerArguments =
K2MetadataCompilerArguments()
@@ -75,7 +74,7 @@ open class KotlinCompileCommon : AbstractKotlinCompile<K2MetadataCompilerArgumen
refinesPaths = refinesMetadataPaths.map { it.absolutePath }.toTypedArray()
}
kotlinOptionsImpl.updateArguments(args)
(kotlinOptions as KotlinMultiplatformCommonOptionsImpl).updateArguments(args)
}
private fun outputPathsFromMetadataCompilationsOf(sourceSets: Iterable<KotlinSourceSet>): List<File> {
@@ -358,10 +358,8 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
@get:Internal
internal var parentKotlinOptionsImpl: KotlinJvmOptionsImpl? = null
private val kotlinOptionsImpl = KotlinJvmOptionsImpl()
override val kotlinOptions: KotlinJvmOptions
get() = kotlinOptionsImpl
get() = taskData.compilation.kotlinOptions as KotlinJvmOptions
@get:Internal
internal open val sourceRootsContainer = FilteringSourceRootsContainer()
@@ -509,10 +507,8 @@ open class Kotlin2JsCompile : AbstractKotlinCompile<K2JSCompilerArguments>(), Ko
incremental = true
}
private val kotlinOptionsImpl = KotlinJsOptionsImpl()
override val kotlinOptions: KotlinJsOptions
get() = kotlinOptionsImpl
get() = taskData.compilation.kotlinOptions as KotlinJsOptions
@get:Internal
protected val defaultOutputFile: File
@@ -548,7 +544,7 @@ open class Kotlin2JsCompile : AbstractKotlinCompile<K2JSCompilerArguments>(), Ko
if (defaultsOnly) return
kotlinOptionsImpl.updateArguments(args)
(kotlinOptions as KotlinJsOptionsImpl).updateArguments(args)
}
override fun getSourceRoots() = SourceRoots.KotlinOnly.create(getSource(), sourceFilesExtensions)
@@ -570,7 +566,7 @@ open class Kotlin2JsCompile : AbstractKotlinCompile<K2JSCompilerArguments>(), Ko
@get:Optional
@get:PathSensitive(PathSensitivity.RELATIVE)
internal val sourceMapBaseDirs: FileCollection?
get() = kotlinOptionsImpl.sourceMapBaseDirs
get() = (kotlinOptions as KotlinJsOptionsImpl).sourceMapBaseDirs
private fun isHybridKotlinJsLibrary(file: File): Boolean =
JsLibraryUtils.isKotlinJavascriptLibrary(file) && isKotlinLibrary(file)