diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt index 9fb59fc3224..c7498845583 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt @@ -14,7 +14,6 @@ import org.gradle.api.attributes.HasAttributes import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.FileCollection 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.KotlinCompileDeprecated import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt index 3b4698aa703..7fa7828f8a2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt @@ -68,13 +68,19 @@ interface CompilationDetailsWithRuntime : CompilationDe internal val CompilationDetails<*>.associateCompilationsClosure: Iterable> get() = closure { it.associateCompilations } -open class DefaultCompilationDetails( +open class DefaultCompilationDetails( final override val target: KotlinTarget, final override val compilationPurpose: String, defaultSourceSet: KotlinSourceSet, - override val kotlinOptions: T + createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, + createKotlinOptions: DefaultCompilationDetails.() -> T ) : AbstractCompilationDetails(defaultSourceSet), KotlinCompilationData { + override val compilerOptions: HasCompilerOptions by lazy { createCompilerOptions() } + + @Deprecated("Replaced with compilerOptions.options", replaceWith = ReplaceWith("compilerOptions.options")) + override val kotlinOptions: T by lazy { createKotlinOptions() } + final override val project: Project get() = target.project @@ -310,13 +316,14 @@ open class DefaultCompilationDetails( } } -open class DefaultCompilationDetailsWithRuntime( +open class DefaultCompilationDetailsWithRuntime( target: KotlinTarget, compilationPurpose: String, defaultSourceSet: KotlinSourceSet, - kotlinOptions: T -) : DefaultCompilationDetails( - target, compilationPurpose, defaultSourceSet, kotlinOptions + createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, + createKotlinOptions: DefaultCompilationDetails.() -> T +) : DefaultCompilationDetails( + target, compilationPurpose, defaultSourceSet, createCompilerOptions, createKotlinOptions ), CompilationDetailsWithRuntime { override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder( lowerCamelCaseName( @@ -331,12 +338,16 @@ open class NativeCompilationDetails( target: KotlinTarget, compilationPurpose: String, defaultSourceSet: KotlinSourceSet, - kotlinOptions: KotlinCommonOptions -) : DefaultCompilationDetails( + @Suppress("DEPRECATION") + createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, + @Suppress("DEPRECATION") + createKotlinOptions: DefaultCompilationDetails.() -> KotlinCommonOptions +) : DefaultCompilationDetails( target, compilationPurpose, defaultSourceSet, - kotlinOptions + createCompilerOptions, + createKotlinOptions ) { override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder( lowerCamelCaseName( @@ -367,14 +378,17 @@ internal open class SharedNativeCompilationDetails( target: KotlinTarget, compilationPurpose: String, defaultSourceSet: KotlinSourceSet, - kotlinOptions: KotlinCommonOptions -) : - DefaultCompilationDetails( - target, - compilationPurpose, - defaultSourceSet, - kotlinOptions - ) { + @Suppress("DEPRECATION") + createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, + @Suppress("DEPRECATION") + createKotlinOptions: DefaultCompilationDetails.() -> KotlinCommonOptions +) : DefaultCompilationDetails( + target, + compilationPurpose, + defaultSourceSet, + createCompilerOptions, + createKotlinOptions +) { override val friendArtifacts: FileCollection get() = super.friendArtifacts.plus(run { @@ -464,12 +478,13 @@ internal open class VariantMappedCompilationDetailsWithRuntime( +internal class WithJavaCompilationDetails( target: KotlinTarget, compilationPurpose: String, defaultSourceSet: KotlinSourceSet, - kotlinOptions: T -) : DefaultCompilationDetailsWithRuntime(target, compilationPurpose, defaultSourceSet, kotlinOptions) { + createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, + createKotlinOptions: DefaultCompilationDetails.() -> T +) : DefaultCompilationDetailsWithRuntime(target, compilationPurpose, defaultSourceSet, createCompilerOptions, createKotlinOptions) { override val compilation: KotlinWithJavaCompilation get() = super.compilation as KotlinWithJavaCompilation @@ -504,11 +519,22 @@ class AndroidCompilationDetails( val androidVariant: BaseVariant, /** 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 -) : DefaultCompilationDetailsWithRuntime( +) : DefaultCompilationDetailsWithRuntime( target, compilationPurpose, defaultSourceSet, - KotlinJvmOptionsImpl() + { + object : HasCompilerOptions { + 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() @@ -549,13 +575,23 @@ internal class MetadataCompilationDetails( target: KotlinTarget, name: String, defaultSourceSet: KotlinSourceSet, -) : - DefaultCompilationDetails( - target, - name, - defaultSourceSet, - KotlinMultiplatformCommonOptionsImpl() - ) { +) : DefaultCompilationDetails( + target, + name, + defaultSourceSet, + { + object : HasCompilerOptions { + override val options: CompilerMultiplatformCommonOptions = + target.project.objects.newInstance(CompilerMultiplatformCommonOptionsDefault::class.java) + } + }, + { + object : KotlinMultiplatformCommonOptions { + override val options: CompilerMultiplatformCommonOptions + get() = compilerOptions.options + } + } +) { override val friendArtifacts: FileCollection get() = super.friendArtifacts.plus(run { @@ -569,8 +605,22 @@ internal open class JsCompilationDetails( target: KotlinTarget, compilationPurpose: String, defaultSourceSet: KotlinSourceSet, -) : DefaultCompilationDetailsWithRuntime( - target, compilationPurpose, defaultSourceSet, KotlinJsOptionsImpl() +) : DefaultCompilationDetailsWithRuntime( + target, + compilationPurpose, + defaultSourceSet, + { + object : HasCompilerOptions { + 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(