[Gradle] Implement KotlinCommonCompilation with underlying KotlinCompilationImpl
KT-54312
This commit is contained in:
committed by
Space Team
parent
4cbd715b17
commit
0729d7519c
+16
-14
@@ -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<T : KotlinCommonOptions> : KotlinCompilation<T>
|
||||
|
||||
abstract class KotlinCommonCompilation @Inject constructor(
|
||||
compilationDetails: CompilationDetails<KotlinMultiplatformCommonOptions>
|
||||
) : AbstractKotlinCompilation<KotlinMultiplatformCommonOptions>(compilationDetails),
|
||||
KotlinMetadataCompilation<KotlinMultiplatformCommonOptions> {
|
||||
interface KotlinMetadataCompilation<T : KotlinCommonOptions> : KotlinCompilation<T>
|
||||
|
||||
open class KotlinCommonCompilation @Inject internal constructor(
|
||||
private val compilation: KotlinCompilationImpl
|
||||
) : InternalKotlinCompilation<KotlinCommonOptions> by compilation,
|
||||
KotlinMetadataCompilation<KotlinCommonOptions> {
|
||||
@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<KotlinCompilationTask<KotlinMultiplatformCommonCompilerOptions>>
|
||||
get() = super.compileTaskProvider as TaskProvider<KotlinCompilationTask<KotlinMultiplatformCommonCompilerOptions>>
|
||||
override val compileTaskProvider: TaskProvider<KotlinCompilationTask<CompilerMultiplatformCommonOptions>>
|
||||
get() = compilation.compileTaskProvider as TaskProvider<KotlinCompilationTask<CompilerMultiplatformCommonOptions>>
|
||||
|
||||
internal val isKlibCompilation: Boolean
|
||||
get() = target.project.isKotlinGranularMetadataEnabled && !forceCompilationToKotlinMetadata
|
||||
|
||||
internal var forceCompilationToKotlinMetadata: Boolean = false
|
||||
}
|
||||
|
||||
|
||||
+26
-4
@@ -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<KotlinCommonCompilation> {
|
||||
override val itemClass: Class<KotlinCommonCompilation>
|
||||
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)
|
||||
)
|
||||
}
|
||||
|
||||
+29
@@ -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<CompilerMultiplatformCommonOptions> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
+2
@@ -21,3 +21,5 @@ internal object JvmCompilerOptionsFactory : KotlinCompilationImplFactory.Compile
|
||||
return KotlinCompilationImplFactory.CompilerOptionsFactory.Options(compilerOptions, kotlinOptions)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-1
@@ -306,7 +306,9 @@ class KotlinMetadataTargetConfigurator :
|
||||
defaultSourceSet = sourceSet
|
||||
)
|
||||
|
||||
else -> KotlinCommonCompilationFactory(target)
|
||||
else -> KotlinCommonCompilationFactory(
|
||||
target = target, defaultSourceSet = sourceSet
|
||||
)
|
||||
}
|
||||
|
||||
return compilationFactory.create(compilationName).apply {
|
||||
|
||||
+5
-2
@@ -26,8 +26,11 @@ class KotlinMetadataTargetPreset(
|
||||
override val itemClass: Class<KotlinCompilation<*>>
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -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<KotlinSharedNativeCompilation> {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user