[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.KotlinJvmCompilerOptions
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
|
||||||
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
|
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
|
override val kotlinOptions: KotlinCommonOptions
|
||||||
get() = super.kotlinOptions as KotlinJvmOptions
|
get() = super.kotlinOptions as KotlinJvmOptions
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -5,10 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.mpp.external
|
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.ExternalKotlinTargetApi
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
abstract class DecoratedExternalKotlinTarget(
|
abstract class DecoratedExternalKotlinTarget(
|
||||||
internal val delegate: ExternalKotlinTarget
|
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
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
abstract class ExternalKotlinCompilation(delegate: Delegate) :
|
abstract class ExternalDecoratedKotlinCompilation(delegate: Delegate) :
|
||||||
DecoratedKotlinCompilation<KotlinCommonOptions>(delegate.compilation) {
|
DecoratedKotlinCompilation<KotlinCommonOptions>(delegate.compilation) {
|
||||||
class Delegate internal constructor(internal val compilation: KotlinCompilationImpl)
|
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.gradle.api.file.FileCollection
|
||||||
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
|
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.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.*
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
interface ExternalKotlinCompilationDescriptor<T : ExternalKotlinCompilation> {
|
interface ExternalKotlinCompilationDescriptor<T : ExternalDecoratedKotlinCompilation> {
|
||||||
fun interface DecoratedKotlinCompilationFactory<T : DecoratedKotlinCompilation<*>> {
|
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 resolveFriendPaths(compilation: T): FileCollection
|
||||||
}
|
}
|
||||||
|
|
||||||
fun interface CompilationAssociator<T : ExternalKotlinCompilation> {
|
fun interface CompilationAssociator<T : ExternalDecoratedKotlinCompilation> {
|
||||||
fun associate(compilation: T, main: ExternalKotlinCompilation)
|
fun associate(compilation: T, main: ExternalDecoratedKotlinCompilation)
|
||||||
}
|
}
|
||||||
|
|
||||||
val compilationName: String
|
val compilationName: String
|
||||||
@@ -38,7 +37,7 @@ interface ExternalKotlinCompilationDescriptor<T : ExternalKotlinCompilation> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
fun <T : ExternalKotlinCompilation> ExternalKotlinCompilationDescriptor(
|
fun <T : ExternalDecoratedKotlinCompilation> ExternalKotlinCompilationDescriptor(
|
||||||
configure: ExternalKotlinCompilationDescriptorBuilder<T>.() -> Unit
|
configure: ExternalKotlinCompilationDescriptorBuilder<T>.() -> Unit
|
||||||
): ExternalKotlinCompilationDescriptor<T> {
|
): ExternalKotlinCompilationDescriptor<T> {
|
||||||
return ExternalKotlinCompilationDescriptorBuilderImpl<T>().also(configure).run {
|
return ExternalKotlinCompilationDescriptorBuilderImpl<T>().also(configure).run {
|
||||||
@@ -56,7 +55,7 @@ fun <T : ExternalKotlinCompilation> ExternalKotlinCompilationDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
interface ExternalKotlinCompilationDescriptorBuilder<T : ExternalKotlinCompilation> {
|
interface ExternalKotlinCompilationDescriptorBuilder<T : ExternalDecoratedKotlinCompilation> {
|
||||||
var compilationName: String
|
var compilationName: String
|
||||||
var compileTaskName: String?
|
var compileTaskName: String?
|
||||||
var compileAllTaskName: String?
|
var compileAllTaskName: String?
|
||||||
@@ -73,7 +72,7 @@ interface ExternalKotlinCompilationDescriptorBuilder<T : ExternalKotlinCompilati
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
private class ExternalKotlinCompilationDescriptorBuilderImpl<T : ExternalKotlinCompilation> :
|
private class ExternalKotlinCompilationDescriptorBuilderImpl<T : ExternalDecoratedKotlinCompilation> :
|
||||||
ExternalKotlinCompilationDescriptorBuilder<T> {
|
ExternalKotlinCompilationDescriptorBuilder<T> {
|
||||||
override var compilationName: String by Delegates.notNull()
|
override var compilationName: String by Delegates.notNull()
|
||||||
override var compileTaskName: String? = null
|
override var compileTaskName: String? = null
|
||||||
@@ -86,7 +85,7 @@ private class ExternalKotlinCompilationDescriptorBuilderImpl<T : ExternalKotlinC
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
private data class ExternalKotlinCompilationDescriptorImpl<T : ExternalKotlinCompilation>(
|
private data class ExternalKotlinCompilationDescriptorImpl<T : ExternalDecoratedKotlinCompilation>(
|
||||||
override val compilationName: String,
|
override val compilationName: String,
|
||||||
override val compileTaskName: String?,
|
override val compileTaskName: String?,
|
||||||
override val compileAllTaskName: String?,
|
override val compileAllTaskName: String?,
|
||||||
|
|||||||
+2
-2
@@ -64,8 +64,8 @@ class ExternalKotlinTarget internal constructor(
|
|||||||
project.buildAdhocComponentsFromKotlinVariants(kotlinComponents)
|
project.buildAdhocComponentsFromKotlinVariants(kotlinComponents)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val compilations: NamedDomainObjectContainer<ExternalKotlinCompilation> by lazy {
|
override val compilations: NamedDomainObjectContainer<ExternalDecoratedKotlinCompilation> by lazy {
|
||||||
project.container(ExternalKotlinCompilation::class.java)
|
project.container(ExternalDecoratedKotlinCompilation::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun mavenPublication(action: Action<MavenPublication>) {
|
override fun mavenPublication(action: Action<MavenPublication>) {
|
||||||
|
|||||||
+32
-20
@@ -6,9 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.mpp.external
|
package org.jetbrains.kotlin.gradle.plugin.mpp.external
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
|
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
|
||||||
import org.jetbrains.kotlin.gradle.plugin.Kotlin2JvmSourceSetProcessor
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationAssociator
|
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.DefaultKotlinCompilationFriendPathsResolver
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationAssociator
|
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.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory.KotlinCompilationTaskNamesContainerFactory
|
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.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.KotlinTasksProvider
|
||||||
import org.jetbrains.kotlin.gradle.tasks.configuration.KotlinCompileConfig
|
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
|
fun <T : ExternalDecoratedKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
|
||||||
descriptor: ExternalKotlinCompilationDescriptor<T>
|
descriptor: ExternalKotlinCompilationDescriptor<T>
|
||||||
): T {
|
): T {
|
||||||
val compilationImplFactory = KotlinCompilationImplFactory(
|
val compilationImplFactory = KotlinCompilationImplFactory(
|
||||||
@@ -44,7 +41,7 @@ fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilat
|
|||||||
compilationAssociator = descriptor.compilationAssociator?.let { declaredAssociator ->
|
compilationAssociator = descriptor.compilationAssociator?.let { declaredAssociator ->
|
||||||
@Suppress("unchecked_cast")
|
@Suppress("unchecked_cast")
|
||||||
KotlinCompilationAssociator { _, first, second ->
|
KotlinCompilationAssociator { _, first, second ->
|
||||||
declaredAssociator.associate(first.decoratedInstance as T, second.decoratedInstance as ExternalKotlinCompilation)
|
declaredAssociator.associate(first.decoratedInstance as T, second.decoratedInstance as ExternalDecoratedKotlinCompilation)
|
||||||
}
|
}
|
||||||
} ?: DefaultKotlinCompilationAssociator,
|
} ?: DefaultKotlinCompilationAssociator,
|
||||||
compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver(
|
compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver(
|
||||||
@@ -65,25 +62,40 @@ fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilat
|
|||||||
descriptor.configure?.invoke(decoratedCompilation)
|
descriptor.configure?.invoke(decoratedCompilation)
|
||||||
this.delegate.compilations.add(decoratedCompilation)
|
this.delegate.compilations.add(decoratedCompilation)
|
||||||
|
|
||||||
|
setupCompileTask(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}")
|
|
||||||
|
|
||||||
return decoratedCompilation
|
return decoratedCompilation
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
fun <T : ExternalKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
|
fun <T : ExternalDecoratedKotlinCompilation> DecoratedExternalKotlinTarget.createCompilation(
|
||||||
descriptor: ExternalKotlinCompilationDescriptorBuilder<T>.() -> Unit
|
descriptor: ExternalKotlinCompilationDescriptorBuilder<T>.() -> Unit
|
||||||
): T {
|
): T {
|
||||||
return createCompilation(ExternalKotlinCompilationDescriptor(descriptor))
|
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()
|
target.onCreated()
|
||||||
descriptor.configure?.invoke(decorated)
|
descriptor.configure?.invoke(decorated)
|
||||||
targets.add(decorated)
|
targets.add(decorated)
|
||||||
|
decorated.logger.info("Created ${descriptor.platformType} target")
|
||||||
return decorated
|
return decorated
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user