diff --git a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidCompilation.kt b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidCompilation.kt index a690372801c..64fe122dcd0 100644 --- a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidCompilation.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget.kt index ca58188a7ed..35a77725c5d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget.kt @@ -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 \ No newline at end of file +) : KotlinTarget by delegate { + internal val logger: Logger = Logging.getLogger("${ExternalKotlinTarget::class.qualifiedName}: $name") +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation.kt similarity index 91% rename from libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilation.kt rename to libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation.kt index 4d9f90a8d44..b8332819a4e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation.kt @@ -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(delegate.compilation) { class Delegate internal constructor(internal val compilation: KotlinCompilationImpl) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor.kt index 38292eb7dc4..aaf1e7727e2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor.kt @@ -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 { +interface ExternalKotlinCompilationDescriptor { fun interface DecoratedKotlinCompilationFactory> { - fun create(delegate: ExternalKotlinCompilation.Delegate): T + fun create(delegate: ExternalDecoratedKotlinCompilation.Delegate): T } - fun interface FriendArtifactResolver { + fun interface FriendArtifactResolver { fun resolveFriendPaths(compilation: T): FileCollection } - fun interface CompilationAssociator { - fun associate(compilation: T, main: ExternalKotlinCompilation) + fun interface CompilationAssociator { + fun associate(compilation: T, main: ExternalDecoratedKotlinCompilation) } val compilationName: String @@ -38,7 +37,7 @@ interface ExternalKotlinCompilationDescriptor { } @ExternalKotlinTargetApi -fun ExternalKotlinCompilationDescriptor( +fun ExternalKotlinCompilationDescriptor( configure: ExternalKotlinCompilationDescriptorBuilder.() -> Unit ): ExternalKotlinCompilationDescriptor { return ExternalKotlinCompilationDescriptorBuilderImpl().also(configure).run { @@ -56,7 +55,7 @@ fun ExternalKotlinCompilationDescriptor( } @ExternalKotlinTargetApi -interface ExternalKotlinCompilationDescriptorBuilder { +interface ExternalKotlinCompilationDescriptorBuilder { var compilationName: String var compileTaskName: String? var compileAllTaskName: String? @@ -73,7 +72,7 @@ interface ExternalKotlinCompilationDescriptorBuilder : +private class ExternalKotlinCompilationDescriptorBuilderImpl : ExternalKotlinCompilationDescriptorBuilder { override var compilationName: String by Delegates.notNull() override var compileTaskName: String? = null @@ -86,7 +85,7 @@ private class ExternalKotlinCompilationDescriptorBuilderImpl( +private data class ExternalKotlinCompilationDescriptorImpl( override val compilationName: String, override val compileTaskName: String?, override val compileAllTaskName: String?, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTarget.kt index 7b4d7105f7d..d45d3a7e480 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTarget.kt @@ -64,8 +64,8 @@ class ExternalKotlinTarget internal constructor( project.buildAdhocComponentsFromKotlinVariants(kotlinComponents) } - override val compilations: NamedDomainObjectContainer by lazy { - project.container(ExternalKotlinCompilation::class.java) + override val compilations: NamedDomainObjectContainer by lazy { + project.container(ExternalDecoratedKotlinCompilation::class.java) } override fun mavenPublication(action: Action) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinCompilation.kt index d11f31bbc9b..397dc97bec0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinCompilation.kt @@ -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 DecoratedExternalKotlinTarget.createCompilation( +fun DecoratedExternalKotlinTarget.createCompilation( descriptor: ExternalKotlinCompilationDescriptor ): T { val compilationImplFactory = KotlinCompilationImplFactory( @@ -44,7 +41,7 @@ fun 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 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 DecoratedExternalKotlinTarget.createCompilation( +fun DecoratedExternalKotlinTarget.createCompilation( descriptor: ExternalKotlinCompilationDescriptorBuilder.() -> 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}") } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt index 0c556462ef6..f1c531de506 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt @@ -40,6 +40,7 @@ fun KotlinMultiplatformExtension.createExter target.onCreated() descriptor.configure?.invoke(decorated) targets.add(decorated) + decorated.logger.info("Created ${descriptor.platformType} target") return decorated }