diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilation.kt index 064235ad31b..113630d4186 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilation.kt @@ -1,36 +1,38 @@ - /* - * Copyright 2010-2018 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. - */ +/* +* Copyright 2010-2018 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.mpp import org.gradle.api.tasks.TaskProvider -import org.jetbrains.kotlin.gradle.dsl.* +import org.jetbrains.kotlin.gradle.dsl.CompilerMultiplatformCommonOptions +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompileCommon import javax.inject.Inject - interface KotlinMetadataCompilation : KotlinCompilation - -abstract class KotlinCommonCompilation @Inject constructor( - compilationDetails: CompilationDetails -) : AbstractKotlinCompilation(compilationDetails), - KotlinMetadataCompilation { +interface KotlinMetadataCompilation : KotlinCompilation +open class KotlinCommonCompilation @Inject internal constructor( + private val compilation: KotlinCompilationImpl +) : InternalKotlinCompilation by compilation, + KotlinMetadataCompilation { @Suppress("DEPRECATION") @Deprecated("Accessing task instance directly is deprecated", replaceWith = ReplaceWith("compileTaskProvider")) override val compileKotlinTask: KotlinCompileCommon - get() = super.compileKotlinTask as KotlinCompileCommon + get() = compilation.compileKotlinTask as KotlinCompileCommon @Suppress("UNCHECKED_CAST") - override val compileTaskProvider: TaskProvider> - get() = super.compileTaskProvider as TaskProvider> + override val compileTaskProvider: TaskProvider> + get() = compilation.compileTaskProvider as TaskProvider> internal val isKlibCompilation: Boolean get() = target.project.isKotlinGranularMetadataEnabled && !forceCompilationToKotlinMetadata internal var forceCompilationToKotlinMetadata: Boolean = false } + diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt index 2dacb6a4bea..c080797d80b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt @@ -5,15 +5,37 @@ package org.jetbrains.kotlin.gradle.plugin.mpp -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.MetadataCompilationDetails +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.CommonCompilerOptionsFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.DefaultKotlinCompilationDependencyConfigurationsFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory -class KotlinCommonCompilationFactory( - override val target: KotlinOnlyTarget<*> +class KotlinCommonCompilationFactory internal constructor( + override val target: KotlinOnlyTarget<*>, + private val defaultSourceSet: KotlinSourceSet, + private val compilationFactory: KotlinCompilationImplFactory = + KotlinCompilationImplFactory( + compilationDependencyConfigurationsFactory = DefaultKotlinCompilationDependencyConfigurationsFactory.WithoutRuntime, + compilerOptionsFactory = CommonCompilerOptionsFactory, + compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver( + friendArtifactResolver = DefaultKotlinCompilationFriendPathsResolver.FriendArtifactResolver.composite( + DefaultKotlinCompilationFriendPathsResolver.DefaultFriendArtifactResolver, + DefaultKotlinCompilationFriendPathsResolver.AdditionalMetadataFriendArtifactResolver + ) + ), + /* + Metadata compilations are created *because* of a pre-existing SourceSet. + We therefore can create the container inline + */ + compilationSourceSetsContainerFactory = { _, _ -> KotlinCompilationSourceSetsContainer(defaultSourceSet) } + ) ) : KotlinCompilationFactory { override val itemClass: Class get() = KotlinCommonCompilation::class.java override fun create(name: String): KotlinCommonCompilation = target.project.objects.newInstance( - KotlinCommonCompilation::class.java, MetadataCompilationDetails(target, name, getOrCreateDefaultSourceSet(name)) + itemClass, compilationFactory.create(target, name) ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/CommonCompilerOptionsFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/CommonCompilerOptionsFactory.kt new file mode 100644 index 00000000000..cea6862e7da --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/CommonCompilerOptionsFactory.kt @@ -0,0 +1,29 @@ +/* + * 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.mpp.compilationImpl.factory + +import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions +import org.jetbrains.kotlin.gradle.dsl.CompilerMultiplatformCommonOptions +import org.jetbrains.kotlin.gradle.dsl.CompilerMultiplatformCommonOptionsDefault +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions +import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget + +internal object CommonCompilerOptionsFactory : KotlinCompilationImplFactory.CompilerOptionsFactory { + override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationImplFactory.CompilerOptionsFactory.Options { + val compilerOptions = object : HasCompilerOptions { + override val options: CompilerMultiplatformCommonOptions = + target.project.objects.newInstance(CompilerMultiplatformCommonOptionsDefault::class.java) + } + + val kotlinOptions = object : KotlinCommonOptions { + override val options: CompilerCommonOptions + get() = compilerOptions.options + } + + return KotlinCompilationImplFactory.CompilerOptionsFactory.Options(compilerOptions, kotlinOptions) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JvmCompilerOptionsFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JvmCompilerOptionsFactory.kt index 5e3d399e755..1f76e56d651 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JvmCompilerOptionsFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JvmCompilerOptionsFactory.kt @@ -21,3 +21,5 @@ internal object JvmCompilerOptionsFactory : KotlinCompilationImplFactory.Compile return KotlinCompilationImplFactory.CompilerOptionsFactory.Options(compilerOptions, kotlinOptions) } } + + diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt index df5ca2c258e..03c1a7235d8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt @@ -306,7 +306,9 @@ class KotlinMetadataTargetConfigurator : defaultSourceSet = sourceSet ) - else -> KotlinCommonCompilationFactory(target) + else -> KotlinCommonCompilationFactory( + target = target, defaultSourceSet = sourceSet + ) } return compilationFactory.create(compilationName).apply { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt index 7e67017f76e..b68b274ca13 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt @@ -26,8 +26,11 @@ class KotlinMetadataTargetPreset( override val itemClass: Class> get() = KotlinCompilation::class.java - override fun create(name: String): AbstractKotlinCompilation<*> = when (name) { - KotlinCompilation.MAIN_COMPILATION_NAME -> KotlinCommonCompilationFactory(forTarget).create(name) + override fun create(name: String): InternalKotlinCompilation<*> = when (name) { + KotlinCompilation.MAIN_COMPILATION_NAME -> KotlinCommonCompilationFactory( + forTarget, getOrCreateDefaultSourceSet(name) + ).create(name) + else -> error("Can't create custom metadata compilations by name") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt index a417cfe6ae3..9446d40599a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt @@ -41,9 +41,7 @@ open class KotlinSharedNativeCompilationFactory internal constructor( Metadata compilations are created *because* of a pre-existing SourceSet. We therefore can create the container inline */ - compilationSourceSetsContainerFactory = KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory { _, _ -> - KotlinCompilationSourceSetsContainer(defaultSourceSet) - } + compilationSourceSetsContainerFactory = { _, _ -> KotlinCompilationSourceSetsContainer(defaultSourceSet) } ) ) : KotlinCompilationFactory {