[Gradle] Extract setupCompileTask into separate function
^KT-54766 Verification Pending
This commit is contained in:
committed by
Space Team
parent
9599c16d95
commit
966ed6b7fb
+2
-2
@@ -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
-1
@@ -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")
|
||||
}
|
||||
+1
-1
@@ -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)
|
||||
}
|
||||
+9
-10
@@ -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?,
|
||||
|
||||
+2
-2
@@ -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>) {
|
||||
|
||||
+32
-20
@@ -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}")
|
||||
}
|
||||
+1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user