[Gradle] Extract setupCompileTask into separate function

^KT-54766 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-11-03 10:12:02 +01:00
committed by Space Team
parent 9599c16d95
commit 966ed6b7fb
7 changed files with 52 additions and 36 deletions
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalDecoratedKotlinCompilation
class PrototypeAndroidCompilation(delegate: Delegate) : ExternalKotlinCompilation(delegate) {
class PrototypeAndroidCompilation(delegate: Delegate) : ExternalDecoratedKotlinCompilation(delegate) {
override val kotlinOptions: KotlinCommonOptions
get() = super.kotlinOptions as KotlinJvmOptions
@@ -5,10 +5,14 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.external
import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
@ExternalKotlinTargetApi
abstract class DecoratedExternalKotlinTarget(
internal val delegate: ExternalKotlinTarget
) : KotlinTarget by delegate
) : KotlinTarget by delegate {
internal val logger: Logger = Logging.getLogger("${ExternalKotlinTarget::class.qualifiedName}: $name")
}
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl
@ExternalKotlinTargetApi
abstract class ExternalKotlinCompilation(delegate: Delegate) :
abstract class ExternalDecoratedKotlinCompilation(delegate: Delegate) :
DecoratedKotlinCompilation<KotlinCommonOptions>(delegate.compilation) {
class Delegate internal constructor(internal val compilation: KotlinCompilationImpl)
}
@@ -7,24 +7,23 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.external
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.*
import kotlin.properties.Delegates
@ExternalKotlinTargetApi
interface ExternalKotlinCompilationDescriptor<T : ExternalKotlinCompilation> {
interface ExternalKotlinCompilationDescriptor<T : ExternalDecoratedKotlinCompilation> {
fun interface DecoratedKotlinCompilationFactory<T : DecoratedKotlinCompilation<*>> {
fun create(delegate: ExternalKotlinCompilation.Delegate): T
fun create(delegate: ExternalDecoratedKotlinCompilation.Delegate): T
}
fun interface FriendArtifactResolver<T : ExternalKotlinCompilation> {
fun interface FriendArtifactResolver<T : ExternalDecoratedKotlinCompilation> {
fun resolveFriendPaths(compilation: T): FileCollection
}
fun interface CompilationAssociator<T : ExternalKotlinCompilation> {
fun associate(compilation: T, main: ExternalKotlinCompilation)
fun interface CompilationAssociator<T : ExternalDecoratedKotlinCompilation> {
fun associate(compilation: T, main: ExternalDecoratedKotlinCompilation)
}
val compilationName: String
@@ -38,7 +37,7 @@ interface ExternalKotlinCompilationDescriptor<T : ExternalKotlinCompilation> {
}
@ExternalKotlinTargetApi
fun <T : ExternalKotlinCompilation> ExternalKotlinCompilationDescriptor(
fun <T : ExternalDecoratedKotlinCompilation> ExternalKotlinCompilationDescriptor(
configure: ExternalKotlinCompilationDescriptorBuilder<T>.() -> Unit
): ExternalKotlinCompilationDescriptor<T> {
return ExternalKotlinCompilationDescriptorBuilderImpl<T>().also(configure).run {
@@ -56,7 +55,7 @@ fun <T : ExternalKotlinCompilation> ExternalKotlinCompilationDescriptor(
}
@ExternalKotlinTargetApi
interface ExternalKotlinCompilationDescriptorBuilder<T : ExternalKotlinCompilation> {
interface ExternalKotlinCompilationDescriptorBuilder<T : ExternalDecoratedKotlinCompilation> {
var compilationName: String
var compileTaskName: String?
var compileAllTaskName: String?
@@ -73,7 +72,7 @@ interface ExternalKotlinCompilationDescriptorBuilder<T : ExternalKotlinCompilati
}
@ExternalKotlinTargetApi
private class ExternalKotlinCompilationDescriptorBuilderImpl<T : ExternalKotlinCompilation> :
private class ExternalKotlinCompilationDescriptorBuilderImpl<T : ExternalDecoratedKotlinCompilation> :
ExternalKotlinCompilationDescriptorBuilder<T> {
override var compilationName: String by Delegates.notNull()
override var compileTaskName: String? = null
@@ -86,7 +85,7 @@ private class ExternalKotlinCompilationDescriptorBuilderImpl<T : ExternalKotlinC
}
@ExternalKotlinTargetApi
private data class ExternalKotlinCompilationDescriptorImpl<T : ExternalKotlinCompilation>(
private data class ExternalKotlinCompilationDescriptorImpl<T : ExternalDecoratedKotlinCompilation>(
override val compilationName: String,
override val compileTaskName: String?,
override val compileAllTaskName: String?,
@@ -64,8 +64,8 @@ class ExternalKotlinTarget internal constructor(
project.buildAdhocComponentsFromKotlinVariants(kotlinComponents)
}
override val compilations: NamedDomainObjectContainer<ExternalKotlinCompilation> by lazy {
project.container(ExternalKotlinCompilation::class.java)
override val compilations: NamedDomainObjectContainer<ExternalDecoratedKotlinCompilation> by lazy {
project.container(ExternalDecoratedKotlinCompilation::class.java)
}
override fun mavenPublication(action: Action<MavenPublication>) {
@@ -6,9 +6,7 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.external
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
import org.jetbrains.kotlin.gradle.plugin.Kotlin2JvmSourceSetProcessor
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationAssociator
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationAssociator
@@ -16,12 +14,11 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationS
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.*
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory.KotlinCompilationTaskNamesContainerFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.decoratedInstance
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilation.Delegate
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalDecoratedKotlinCompilation.Delegate
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.tasks.configuration.KotlinCompileConfig
@ExternalKotlinTargetApi
fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
fun <T : ExternalDecoratedKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
descriptor: ExternalKotlinCompilationDescriptor<T>
): T {
val compilationImplFactory = KotlinCompilationImplFactory(
@@ -44,7 +41,7 @@ fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilat
compilationAssociator = descriptor.compilationAssociator?.let { declaredAssociator ->
@Suppress("unchecked_cast")
KotlinCompilationAssociator { _, first, second ->
declaredAssociator.associate(first.decoratedInstance as T, second.decoratedInstance as ExternalKotlinCompilation)
declaredAssociator.associate(first.decoratedInstance as T, second.decoratedInstance as ExternalDecoratedKotlinCompilation)
}
} ?: DefaultKotlinCompilationAssociator,
compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver(
@@ -65,25 +62,40 @@ fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilat
descriptor.configure?.invoke(decoratedCompilation)
this.delegate.compilations.add(decoratedCompilation)
val tasksProvider = KotlinTasksProvider()
val compilationInfo = KotlinCompilationInfo(decoratedCompilation)
val config = KotlinCompileConfig(compilationInfo)
config.configureTask { task ->
task.useModuleDetection.value(true).disallowChanges()
task.destinationDirectory.set(project.layout.buildDirectory.dir("tmp/kotlin-classes/debug"))
}
Kotlin2JvmSourceSetProcessor(tasksProvider, compilationInfo).run()
project.logger.quiet("Registered: ${compilationInfo.compileKotlinTaskName}")
setupCompileTask(decoratedCompilation)
return decoratedCompilation
}
@ExternalKotlinTargetApi
fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
fun <T : ExternalDecoratedKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
descriptor: ExternalKotlinCompilationDescriptorBuilder<T>.() -> Unit
): T {
return createCompilation(ExternalKotlinCompilationDescriptor(descriptor))
}
@OptIn(ExternalKotlinTargetApi::class)
private fun DecoratedExternalKotlinTarget.setupCompileTask(
compilation: ExternalDecoratedKotlinCompilation
) {
val tasksProvider = KotlinTasksProvider()
val compilationInfo = KotlinCompilationInfo(compilation)
val sourceSetProcessor = when (platformType) {
KotlinPlatformType.common ->
KotlinCommonSourceSetProcessor(compilationInfo, tasksProvider)
KotlinPlatformType.jvm, KotlinPlatformType.androidJvm ->
Kotlin2JvmSourceSetProcessor(tasksProvider, compilationInfo)
KotlinPlatformType.js ->
KotlinJsIrSourceSetProcessor(tasksProvider, compilationInfo)
else -> throw UnsupportedOperationException("KotlinPlatformType.$platformType is not supported")
}
sourceSetProcessor.run()
logger.info("Created compile task: ${sourceSetProcessor.kotlinTask.name}")
}
@@ -40,6 +40,7 @@ fun <T : DecoratedExternalKotlinTarget> KotlinMultiplatformExtension.createExter
target.onCreated()
descriptor.configure?.invoke(decorated)
targets.add(decorated)
decorated.logger.info("Created ${descriptor.platformType} target")
return decorated
}