diff --git a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/createAndroidCompilation.kt b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/createAndroidCompilation.kt index 6e730f506d3..1e2650d8921 100644 --- a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/createAndroidCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/createAndroidCompilation.kt @@ -12,7 +12,7 @@ import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMEN import org.gradle.kotlin.dsl.named import org.jetbrains.kotlin.gradle.android.AndroidKotlinSourceSet.Companion.android import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor -import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.DecoratedKotlinCompilationFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.CompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.external.createCompilation @@ -22,7 +22,7 @@ internal fun PrototypeAndroidTarget.createAndroidCompilation(name: String): Prot defaultSourceSet = kotlin.sourceSets.maybeCreate(camelCase("prototype", targetName, name)).apply { android = AndroidKotlinSourceSet() } - decoratedKotlinCompilationFactory = DecoratedKotlinCompilationFactory(::PrototypeAndroidCompilation) + compilationFactory = CompilationFactory(::PrototypeAndroidCompilation) compileTaskName = camelCase("prototype", "compile", targetName, name) /* diff --git a/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api b/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api index 02b7c84698d..4bbaa5bbf25 100644 --- a/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api +++ b/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api @@ -231,6 +231,7 @@ public abstract class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDe public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor { public abstract fun getCompilationAssociator ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator; + public abstract fun getCompilationFactory ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationFactory; public abstract fun getCompilationName ()Ljava/lang/String; public abstract fun getCompileAllTaskName ()Ljava/lang/String; public abstract fun getCompileTaskName ()Ljava/lang/String; @@ -240,24 +241,26 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/external/ public abstract fun getFriendArtifactResolver ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$FriendArtifactResolver; } -public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptorBuilder { - public abstract fun configure (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptorBuilder; - public abstract fun getCompilationAssociator ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator; - public abstract fun getCompilationName ()Ljava/lang/String; - public abstract fun getCompileAllTaskName ()Ljava/lang/String; - public abstract fun getCompileTaskName ()Ljava/lang/String; - public abstract fun getConfigure ()Lkotlin/jvm/functions/Function1; - public abstract fun getDecoratedKotlinCompilationFactory ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$DecoratedKotlinCompilationFactory; - public abstract fun getDefaultSourceSet ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinSourceSet; - public abstract fun getFriendArtifactResolver ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$FriendArtifactResolver; - public abstract fun setCompilationAssociator (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator;)V - public abstract fun setCompilationName (Ljava/lang/String;)V - public abstract fun setCompileAllTaskName (Ljava/lang/String;)V - public abstract fun setCompileTaskName (Ljava/lang/String;)V - public abstract fun setConfigure (Lkotlin/jvm/functions/Function1;)V - public abstract fun setDecoratedKotlinCompilationFactory (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$DecoratedKotlinCompilationFactory;)V - public abstract fun setDefaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinSourceSet;)V - public abstract fun setFriendArtifactResolver (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$FriendArtifactResolver;)V +public final class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptorBuilder { + public final fun configure (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptorBuilder; + public final fun getCompilationAssociator ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator; + public final fun getCompilationFactory ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationFactory; + public final fun getCompilationName ()Ljava/lang/String; + public final fun getCompileAllTaskName ()Ljava/lang/String; + public final fun getCompileTaskName ()Ljava/lang/String; + public final fun getConfigure ()Lkotlin/jvm/functions/Function1; + public final fun getDecoratedKotlinCompilationFactory ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$DecoratedKotlinCompilationFactory; + public final fun getDefaultSourceSet ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinSourceSet; + public final fun getFriendArtifactResolver ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$FriendArtifactResolver; + public final fun setCompilationAssociator (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator;)V + public final fun setCompilationFactory (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationFactory;)V + public final fun setCompilationName (Ljava/lang/String;)V + public final fun setCompileAllTaskName (Ljava/lang/String;)V + public final fun setCompileTaskName (Ljava/lang/String;)V + public final fun setConfigure (Lkotlin/jvm/functions/Function1;)V + public final fun setDecoratedKotlinCompilationFactory (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$DecoratedKotlinCompilationFactory;)V + public final fun setDefaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinSourceSet;)V + public final fun setFriendArtifactResolver (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$FriendArtifactResolver;)V } public final class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptorKt { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation.kt index 55e2ce407b7..7d6c2fb3022 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation.kt @@ -3,15 +3,29 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -@file:Suppress("DEPRECATION") - package org.jetbrains.kotlin.gradle.plugin.mpp.external import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl +/** + * Similar to [DecoratedExternalKotlinTarget]: + * This class is intended to be decorated: Enabling external target authors to give compilations a custom type. + * The implementation of [KotlinCompilation] is handled by a backed, internal, opaque instance provided by the [Delegate] + * + * #### Create an instance + * Creating an instance will require an instance of [Delegate] which can only be retrieved by calling into the + * [DecoratedExternalKotlinTarget.createCompilation] functions and providing a [ExternalKotlinCompilationDescriptor.compilationFactory] + */ +@Suppress("deprecation_error") +@ExternalKotlinTargetApi +abstract class DecoratedExternalKotlinCompilation(delegate: Delegate) : ExternalDecoratedKotlinCompilation(delegate) { + class Delegate internal constructor(compilation: KotlinCompilationImpl) : ExternalDecoratedKotlinCompilation.Delegate(compilation) +} + /** * Renamed DecoratedExternalKotlinCompilation: * Scheduled for removal with Kotlin 2.0 @@ -26,8 +40,3 @@ abstract class ExternalDecoratedKotlinCompilation(delegate: Delegate) : open class Delegate internal constructor(internal open val compilation: KotlinCompilationImpl) } -@Suppress("deprecation_error") -@ExternalKotlinTargetApi -abstract class DecoratedExternalKotlinCompilation(delegate: Delegate) : ExternalDecoratedKotlinCompilation(delegate) { - class Delegate internal constructor(compilation: KotlinCompilationImpl) : ExternalDecoratedKotlinCompilation.Delegate(compilation) -} \ 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 f87d1b15661..88cad667d76 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 @@ -14,7 +14,17 @@ import kotlin.properties.Delegates @ExternalKotlinTargetApi interface ExternalKotlinCompilationDescriptor { - fun interface DecoratedKotlinCompilationFactory> { + + /** + * Scheduled for removal in Kotlin 2.0 + */ + @Deprecated( + "Renamed to 'CompilationFactory'", level = DeprecationLevel.ERROR, + replaceWith = ReplaceWith("CompilationFactory") + ) + fun interface DecoratedKotlinCompilationFactory> : CompilationFactory + + fun interface CompilationFactory> { fun create(delegate: DecoratedExternalKotlinCompilation.Delegate): T } @@ -30,7 +40,14 @@ interface ExternalKotlinCompilationDescriptor + val compilationFactory: CompilationFactory val friendArtifactResolver: FriendArtifactResolver? val compilationAssociator: CompilationAssociator? val configure: ((T) -> Unit)? @@ -40,13 +57,13 @@ interface ExternalKotlinCompilationDescriptor ExternalKotlinCompilationDescriptor( configure: ExternalKotlinCompilationDescriptorBuilder.() -> Unit ): ExternalKotlinCompilationDescriptor { - return ExternalKotlinCompilationDescriptorBuilderImpl().also(configure).run { + return ExternalKotlinCompilationDescriptorBuilder().also(configure).run { ExternalKotlinCompilationDescriptorImpl( compilationName = compilationName, compileTaskName = compileTaskName, compileAllTaskName = compileAllTaskName, defaultSourceSet = defaultSourceSet, - decoratedKotlinCompilationFactory = decoratedKotlinCompilationFactory, + compilationFactory = compilationFactory ?: decoratedKotlinCompilationFactory, friendArtifactResolver = friendArtifactResolver, compilationAssociator = compilationAssociator, configure = this.configure @@ -55,15 +72,20 @@ fun ExternalKotlinCompilationDescriptor } @ExternalKotlinTargetApi -interface ExternalKotlinCompilationDescriptorBuilder { - var compilationName: String - var compileTaskName: String? - var compileAllTaskName: String? - var defaultSourceSet: KotlinSourceSet - var decoratedKotlinCompilationFactory: DecoratedKotlinCompilationFactory - var friendArtifactResolver: FriendArtifactResolver? - var compilationAssociator: CompilationAssociator? - var configure: ((T) -> Unit)? +class ExternalKotlinCompilationDescriptorBuilder internal constructor() { + var compilationName: String by Delegates.notNull() + var compileTaskName: String? = null + var compileAllTaskName: String? = null + var defaultSourceSet: KotlinSourceSet by Delegates.notNull() + + @Suppress("deprecation_error") + var decoratedKotlinCompilationFactory: DecoratedKotlinCompilationFactory by Delegates.notNull() + var compilationFactory: CompilationFactory? = null + + var friendArtifactResolver: FriendArtifactResolver? = null + var compilationAssociator: CompilationAssociator? = null + var configure: ((T) -> Unit)? = null + fun configure(action: (T) -> Unit) = apply { val configure = this.configure if (configure == null) this.configure = action @@ -71,27 +93,18 @@ interface ExternalKotlinCompilationDescriptorBuilder : - ExternalKotlinCompilationDescriptorBuilder { - override var compilationName: String by Delegates.notNull() - override var compileTaskName: String? = null - override var compileAllTaskName: String? = null - override var defaultSourceSet: KotlinSourceSet by Delegates.notNull() - override var decoratedKotlinCompilationFactory: DecoratedKotlinCompilationFactory by Delegates.notNull() - override var friendArtifactResolver: FriendArtifactResolver? = null - override var compilationAssociator: CompilationAssociator? = null - override var configure: ((T) -> Unit)? = null -} - @ExternalKotlinTargetApi private data class ExternalKotlinCompilationDescriptorImpl( override val compilationName: String, override val compileTaskName: String?, override val compileAllTaskName: String?, override val defaultSourceSet: KotlinSourceSet, - override val decoratedKotlinCompilationFactory: DecoratedKotlinCompilationFactory, + override val compilationFactory: CompilationFactory, override val friendArtifactResolver: FriendArtifactResolver?, override val compilationAssociator: CompilationAssociator?, override val configure: ((T) -> Unit)? -) : ExternalKotlinCompilationDescriptor \ No newline at end of file +) : ExternalKotlinCompilationDescriptor { + @Suppress("deprecation_error", "OVERRIDE_DEPRECATION") + override val decoratedKotlinCompilationFactory: DecoratedKotlinCompilationFactory + get() = DecoratedKotlinCompilationFactory { compilationFactory.create(it) } +} \ No newline at end of file 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 4c9fa87076f..9dad556cb95 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 @@ -69,7 +69,7 @@ fun DecoratedExternalKotlinTarget.creat ) val compilationImpl = compilationImplFactory.create(this, descriptor.compilationName) - val decoratedCompilation = descriptor.decoratedKotlinCompilationFactory.create(Delegate(compilationImpl)) + val decoratedCompilation = descriptor.compilationFactory.create(Delegate(compilationImpl)) descriptor.configure?.invoke(decoratedCompilation) this.delegate.compilations.add(decoratedCompilation)