Update CompilationDetails to use Compiler*Options

^KT-27301 In Progress
This commit is contained in:
Yahor Berdnikau
2022-09-08 17:41:36 +02:00
parent 4977858fc8
commit cb6ba1487b
2 changed files with 81 additions and 32 deletions
@@ -14,7 +14,6 @@ import org.gradle.api.attributes.HasAttributes
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated
import org.jetbrains.kotlin.gradle.dsl.KotlinCompileDeprecated import org.jetbrains.kotlin.gradle.dsl.KotlinCompileDeprecated
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
@@ -68,13 +68,19 @@ interface CompilationDetailsWithRuntime<T : KotlinCommonOptions> : CompilationDe
internal val CompilationDetails<*>.associateCompilationsClosure: Iterable<CompilationDetails<*>> internal val CompilationDetails<*>.associateCompilationsClosure: Iterable<CompilationDetails<*>>
get() = closure { it.associateCompilations } get() = closure { it.associateCompilations }
open class DefaultCompilationDetails<T : KotlinCommonOptions>( open class DefaultCompilationDetails<T : KotlinCommonOptions, CO : CompilerCommonOptions>(
final override val target: KotlinTarget, final override val target: KotlinTarget,
final override val compilationPurpose: String, final override val compilationPurpose: String,
defaultSourceSet: KotlinSourceSet, defaultSourceSet: KotlinSourceSet,
override val kotlinOptions: T createCompilerOptions: DefaultCompilationDetails<T, CO>.() -> HasCompilerOptions<CO>,
createKotlinOptions: DefaultCompilationDetails<T, CO>.() -> T
) : AbstractCompilationDetails<T>(defaultSourceSet), KotlinCompilationData<T> { ) : AbstractCompilationDetails<T>(defaultSourceSet), KotlinCompilationData<T> {
override val compilerOptions: HasCompilerOptions<CO> by lazy { createCompilerOptions() }
@Deprecated("Replaced with compilerOptions.options", replaceWith = ReplaceWith("compilerOptions.options"))
override val kotlinOptions: T by lazy { createKotlinOptions() }
final override val project: Project final override val project: Project
get() = target.project get() = target.project
@@ -310,13 +316,14 @@ open class DefaultCompilationDetails<T : KotlinCommonOptions>(
} }
} }
open class DefaultCompilationDetailsWithRuntime<T : KotlinCommonOptions>( open class DefaultCompilationDetailsWithRuntime<T : KotlinCommonOptions, CO : CompilerCommonOptions>(
target: KotlinTarget, target: KotlinTarget,
compilationPurpose: String, compilationPurpose: String,
defaultSourceSet: KotlinSourceSet, defaultSourceSet: KotlinSourceSet,
kotlinOptions: T createCompilerOptions: DefaultCompilationDetails<T, CO>.() -> HasCompilerOptions<CO>,
) : DefaultCompilationDetails<T>( createKotlinOptions: DefaultCompilationDetails<T, CO>.() -> T
target, compilationPurpose, defaultSourceSet, kotlinOptions ) : DefaultCompilationDetails<T, CO>(
target, compilationPurpose, defaultSourceSet, createCompilerOptions, createKotlinOptions
), CompilationDetailsWithRuntime<T> { ), CompilationDetailsWithRuntime<T> {
override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder( override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
lowerCamelCaseName( lowerCamelCaseName(
@@ -331,12 +338,16 @@ open class NativeCompilationDetails(
target: KotlinTarget, target: KotlinTarget,
compilationPurpose: String, compilationPurpose: String,
defaultSourceSet: KotlinSourceSet, defaultSourceSet: KotlinSourceSet,
kotlinOptions: KotlinCommonOptions @Suppress("DEPRECATION")
) : DefaultCompilationDetails<KotlinCommonOptions>( createCompilerOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> HasCompilerOptions<CompilerCommonOptions>,
@Suppress("DEPRECATION")
createKotlinOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> KotlinCommonOptions
) : DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>(
target, target,
compilationPurpose, compilationPurpose,
defaultSourceSet, defaultSourceSet,
kotlinOptions createCompilerOptions,
createKotlinOptions
) { ) {
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder( override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
lowerCamelCaseName( lowerCamelCaseName(
@@ -367,14 +378,17 @@ internal open class SharedNativeCompilationDetails(
target: KotlinTarget, target: KotlinTarget,
compilationPurpose: String, compilationPurpose: String,
defaultSourceSet: KotlinSourceSet, defaultSourceSet: KotlinSourceSet,
kotlinOptions: KotlinCommonOptions @Suppress("DEPRECATION")
) : createCompilerOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> HasCompilerOptions<CompilerCommonOptions>,
DefaultCompilationDetails<KotlinCommonOptions>( @Suppress("DEPRECATION")
target, createKotlinOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> KotlinCommonOptions
compilationPurpose, ) : DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>(
defaultSourceSet, target,
kotlinOptions compilationPurpose,
) { defaultSourceSet,
createCompilerOptions,
createKotlinOptions
) {
override val friendArtifacts: FileCollection override val friendArtifacts: FileCollection
get() = super.friendArtifacts.plus(run { get() = super.friendArtifacts.plus(run {
@@ -464,12 +478,13 @@ internal open class VariantMappedCompilationDetailsWithRuntime<T : KotlinCommonO
get() = GradleKpmDependencyFilesHolder.ofVariantRuntimeDependencies(variant) get() = GradleKpmDependencyFilesHolder.ofVariantRuntimeDependencies(variant)
} }
internal class WithJavaCompilationDetails<T : KotlinCommonOptions>( internal class WithJavaCompilationDetails<T : KotlinCommonOptions, CO : CompilerCommonOptions>(
target: KotlinTarget, target: KotlinTarget,
compilationPurpose: String, compilationPurpose: String,
defaultSourceSet: KotlinSourceSet, defaultSourceSet: KotlinSourceSet,
kotlinOptions: T createCompilerOptions: DefaultCompilationDetails<T, CO>.() -> HasCompilerOptions<CO>,
) : DefaultCompilationDetailsWithRuntime<T>(target, compilationPurpose, defaultSourceSet, kotlinOptions) { createKotlinOptions: DefaultCompilationDetails<T, CO>.() -> T
) : DefaultCompilationDetailsWithRuntime<T, CO>(target, compilationPurpose, defaultSourceSet, createCompilerOptions, createKotlinOptions) {
override val compilation: KotlinWithJavaCompilation<T> override val compilation: KotlinWithJavaCompilation<T>
get() = super.compilation as KotlinWithJavaCompilation<T> get() = super.compilation as KotlinWithJavaCompilation<T>
@@ -504,11 +519,22 @@ class AndroidCompilationDetails(
val androidVariant: BaseVariant, val androidVariant: BaseVariant,
/** Workaround mutual creation order: a compilation is not added to the target's compilations collection until some point, pass it here */ /** Workaround mutual creation order: a compilation is not added to the target's compilations collection until some point, pass it here */
private val getCompilationInstance: () -> KotlinJvmAndroidCompilation private val getCompilationInstance: () -> KotlinJvmAndroidCompilation
) : DefaultCompilationDetailsWithRuntime<KotlinJvmOptions>( ) : DefaultCompilationDetailsWithRuntime<KotlinJvmOptions, CompilerJvmOptions>(
target, target,
compilationPurpose, compilationPurpose,
defaultSourceSet, defaultSourceSet,
KotlinJvmOptionsImpl() {
object : HasCompilerOptions<CompilerJvmOptions> {
override val options: CompilerJvmOptions =
target.project.objects.newInstance(CompilerJvmOptionsDefault::class.java)
}
},
{
object : KotlinJvmOptions {
override val options: CompilerJvmOptions
get() = compilerOptions.options
}
}
) { ) {
override val compilation: KotlinJvmAndroidCompilation get() = getCompilationInstance() override val compilation: KotlinJvmAndroidCompilation get() = getCompilationInstance()
@@ -549,13 +575,23 @@ internal class MetadataCompilationDetails(
target: KotlinTarget, target: KotlinTarget,
name: String, name: String,
defaultSourceSet: KotlinSourceSet, defaultSourceSet: KotlinSourceSet,
) : ) : DefaultCompilationDetails<KotlinMultiplatformCommonOptions, CompilerMultiplatformCommonOptions>(
DefaultCompilationDetails<KotlinMultiplatformCommonOptions>( target,
target, name,
name, defaultSourceSet,
defaultSourceSet, {
KotlinMultiplatformCommonOptionsImpl() object : HasCompilerOptions<CompilerMultiplatformCommonOptions> {
) { override val options: CompilerMultiplatformCommonOptions =
target.project.objects.newInstance(CompilerMultiplatformCommonOptionsDefault::class.java)
}
},
{
object : KotlinMultiplatformCommonOptions {
override val options: CompilerMultiplatformCommonOptions
get() = compilerOptions.options
}
}
) {
override val friendArtifacts: FileCollection override val friendArtifacts: FileCollection
get() = super.friendArtifacts.plus(run { get() = super.friendArtifacts.plus(run {
@@ -569,8 +605,22 @@ internal open class JsCompilationDetails(
target: KotlinTarget, target: KotlinTarget,
compilationPurpose: String, compilationPurpose: String,
defaultSourceSet: KotlinSourceSet, defaultSourceSet: KotlinSourceSet,
) : DefaultCompilationDetailsWithRuntime<KotlinJsOptions>( ) : DefaultCompilationDetailsWithRuntime<KotlinJsOptions, CompilerJsOptions>(
target, compilationPurpose, defaultSourceSet, KotlinJsOptionsImpl() target,
compilationPurpose,
defaultSourceSet,
{
object : HasCompilerOptions<CompilerJsOptions> {
override val options: CompilerJsOptions =
target.project.objects.newInstance(CompilerJsOptionsDefault::class.java)
}
},
{
object : KotlinJsOptions {
override val options: CompilerJsOptions
get() = compilerOptions.options
}
}
) { ) {
internal abstract class JsCompilationDependenciesHolder @Inject constructor( internal abstract class JsCompilationDependenciesHolder @Inject constructor(