From 898e2beecb2bb82461679aa240716b7b03a34c0f Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Wed, 19 Apr 2023 16:07:15 +0200 Subject: [PATCH] [Gradle] ExternalTargetApi: Rename 'ExternalDecoratedKotlinCompilation' to 'DecoratedExternalKotlinCompilation' To be consistent with 'DecoratedExternalKotlinTarget' KT-55524 --- .../android/PrototypeAndroidCompilation.kt | 4 +-- .../api/kotlin-gradle-plugin.api | 10 +++++-- ... => DecoratedExternalKotlinCompilation.kt} | 16 ++++++++++- .../external/DecoratedExternalKotlinTarget.kt | 28 ++++++++++++++++++- .../ExternalKotlinCompilationDescriptor.kt | 18 ++++++------ .../mpp/external/ExternalKotlinTargetImpl.kt | 4 +-- .../createExternalKotlinCompilation.kt | 10 +++---- 7 files changed, 67 insertions(+), 23 deletions(-) rename libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/{ExternalDecoratedKotlinCompilation.kt => DecoratedExternalKotlinCompilation.kt} (52%) 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 64fe122dcd0..d0e411e9b4c 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.ExternalDecoratedKotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.external.DecoratedExternalKotlinCompilation -class PrototypeAndroidCompilation(delegate: Delegate) : ExternalDecoratedKotlinCompilation(delegate) { +class PrototypeAndroidCompilation(delegate: Delegate) : DecoratedExternalKotlinCompilation(delegate) { override val kotlinOptions: KotlinCommonOptions get() = super.kotlinOptions as KotlinJvmOptions 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 4a5c3bb5a42..02b7c84698d 100644 --- a/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api +++ b/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api @@ -176,8 +176,8 @@ public final class org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/Id } public final class org/jetbrains/kotlin/gradle/plugin/mpp/external/CreateExternalKotlinCompilationKt { - public static final fun createCompilation (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation; - public static final fun createCompilation (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget;Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation; + public static final fun createCompilation (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation; + public static final fun createCompilation (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget;Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation; } public final class org/jetbrains/kotlin/gradle/plugin/mpp/external/CreateExternalKotlinTargetKt { @@ -185,7 +185,11 @@ public final class org/jetbrains/kotlin/gradle/plugin/mpp/external/CreateExterna public static final fun createExternalKotlinTarget (Lorg/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension;Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetDescriptor;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget; } -public abstract class org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget : org/jetbrains/kotlin/gradle/plugin/mpp/InternalKotlinTarget { +public abstract class org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation : org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation { + public fun (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation$Delegate;)V +} + +public class org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget : org/jetbrains/kotlin/gradle/plugin/mpp/InternalKotlinTarget { public fun (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget$Delegate;)V public fun attributes (Lkotlin/jvm/functions/Function1;)V public fun attributes (Lorg/gradle/api/Action;)V diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation.kt similarity index 52% rename from libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation.kt rename to libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation.kt index b8332819a4e..55e2ce407b7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalDecoratedKotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation.kt @@ -12,8 +12,22 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl +/** + * Renamed DecoratedExternalKotlinCompilation: + * Scheduled for removal with Kotlin 2.0 + */ +@Deprecated( + "Renamed to 'DecoratedExternalKotlinCompilation'", level = DeprecationLevel.ERROR, + replaceWith = ReplaceWith("DecoratedExternalKotlinCompilation") +) @ExternalKotlinTargetApi abstract class ExternalDecoratedKotlinCompilation(delegate: Delegate) : DecoratedKotlinCompilation(delegate.compilation) { - class Delegate internal constructor(internal val compilation: KotlinCompilationImpl) + 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/DecoratedExternalKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget.kt index a0decc8246f..f44c4f1b9da 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 @@ -8,12 +8,38 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.external import org.gradle.api.artifacts.Configuration import org.gradle.api.logging.Logger import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.InternalKotlinTarget +/** + * Class intended to be used to implement a given adhoc/external KotlinTarget maintained outside kotlin.git. + * The implementation will be backed by the [Delegate] holding an internal implementation of [KotlinTarget] + * Methods of [KotlinTarget] will be handled by this backing implementation. + * This method shall be used for decorating the class with additional, domain specific properties + * + * #### Sample + * + * ```kotlin + * class MyCustomJvmTarget(delegate: Delegate): DecoratedExternalKotlinTarget(delegate) { + * // Some property decorating our target + * val myCustomProperty: String = "hello there" + * + * // Covariant override that allows for narrowing the type of compilations that this target contains + * override val compilations: NamedDomainObjectContainer + * get() = super.compilations as NamedDomainObjectContainer + * } + * ``` + * + * #### Create an instance + * Creating an instance of such classes will require an instance of [Delegate]. + * This instance can only be retrieved by calling the [KotlinMultiplatformExtension.createExternalKotlinTarget] function, + * providing a factory function in the [ExternalKotlinTargetDescriptor] + */ @ExternalKotlinTargetApi -abstract class DecoratedExternalKotlinTarget internal constructor( +open class DecoratedExternalKotlinTarget internal constructor( internal val delegate: ExternalKotlinTargetImpl ) : InternalKotlinTarget by delegate { constructor(delegate: Delegate) : this(delegate.impl) 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 199aa1c14b9..f87d1b15661 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 @@ -13,17 +13,17 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilation import kotlin.properties.Delegates @ExternalKotlinTargetApi -interface ExternalKotlinCompilationDescriptor { +interface ExternalKotlinCompilationDescriptor { fun interface DecoratedKotlinCompilationFactory> { - fun create(delegate: ExternalDecoratedKotlinCompilation.Delegate): T + fun create(delegate: DecoratedExternalKotlinCompilation.Delegate): T } - fun interface FriendArtifactResolver { + fun interface FriendArtifactResolver { fun resolveFriendPaths(compilation: T): FileCollection } - fun interface CompilationAssociator { - fun associate(auxiliary: T, main: ExternalDecoratedKotlinCompilation) + fun interface CompilationAssociator { + fun associate(auxiliary: T, main: DecoratedExternalKotlinCompilation) } val compilationName: String @@ -37,7 +37,7 @@ interface ExternalKotlinCompilationDescriptor ExternalKotlinCompilationDescriptor( +fun ExternalKotlinCompilationDescriptor( configure: ExternalKotlinCompilationDescriptorBuilder.() -> Unit ): ExternalKotlinCompilationDescriptor { return ExternalKotlinCompilationDescriptorBuilderImpl().also(configure).run { @@ -55,7 +55,7 @@ fun ExternalKotlinCompilationDescriptor } @ExternalKotlinTargetApi -interface ExternalKotlinCompilationDescriptorBuilder { +interface ExternalKotlinCompilationDescriptorBuilder { var compilationName: String var compileTaskName: String? var compileAllTaskName: String? @@ -72,7 +72,7 @@ interface ExternalKotlinCompilationDescriptorBuilder : +private class ExternalKotlinCompilationDescriptorBuilderImpl : ExternalKotlinCompilationDescriptorBuilder { override var compilationName: String by Delegates.notNull() override var compileTaskName: String? = null @@ -85,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/ExternalKotlinTargetImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt index 864d78c22d9..c5ef86bdf5a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt @@ -87,8 +87,8 @@ internal class ExternalKotlinTargetImpl internal constructor( setOf(ExternalKotlinTargetSoftwareComponent(this)) } - override val compilations: NamedDomainObjectContainer by lazy { - project.container(ExternalDecoratedKotlinCompilation::class.java) + override val compilations: NamedDomainObjectContainer by lazy { + project.container(DecoratedExternalKotlinCompilation::class.java) } @Suppress("unchecked_cast") 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 aba11fb0cd6..4c9fa87076f 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 @@ -14,7 +14,7 @@ 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.ExternalDecoratedKotlinCompilation.Delegate +import org.jetbrains.kotlin.gradle.plugin.mpp.external.DecoratedExternalKotlinCompilation.Delegate import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider /** @@ -29,7 +29,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider * container */ @ExternalKotlinTargetApi -fun DecoratedExternalKotlinTarget.createCompilation( +fun DecoratedExternalKotlinTarget.createCompilation( descriptor: ExternalKotlinCompilationDescriptor ): T { val compilationImplFactory = KotlinCompilationImplFactory( @@ -52,7 +52,7 @@ fun DecoratedExternalKotlinTarget.creat compilationAssociator = descriptor.compilationAssociator?.let { declaredAssociator -> @Suppress("unchecked_cast") KotlinCompilationAssociator { _, first, second -> - declaredAssociator.associate(first.decoratedInstance as T, second.decoratedInstance as ExternalDecoratedKotlinCompilation) + declaredAssociator.associate(first.decoratedInstance as T, second.decoratedInstance as DecoratedExternalKotlinCompilation) } } ?: DefaultKotlinCompilationAssociator, compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver( @@ -82,14 +82,14 @@ fun DecoratedExternalKotlinTarget.creat * @see createCompilation */ @ExternalKotlinTargetApi -fun DecoratedExternalKotlinTarget.createCompilation( +fun DecoratedExternalKotlinTarget.createCompilation( descriptor: ExternalKotlinCompilationDescriptorBuilder.() -> Unit ): T { return createCompilation(ExternalKotlinCompilationDescriptor(descriptor)) } private fun DecoratedExternalKotlinTarget.setupCompileTask( - compilation: ExternalDecoratedKotlinCompilation + compilation: DecoratedExternalKotlinCompilation ) { val tasksProvider = KotlinTasksProvider() val compilationInfo = KotlinCompilationInfo(compilation)