From 25fe9589b42f31f739ede5efa7e783776365577e Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Fri, 4 Nov 2022 14:12:41 +0100 Subject: [PATCH] [Gradle] Make ExternalKotlinTargetImpl internal ^KT-54766 Verification Pending --- .../gradle/android/AndroidTargetPrototype.kt | 6 +++--- .../gradle/android/PrototypeAndroidTarget.kt | 9 ++++----- .../tools/kotlin-gradle-plugin/build.gradle.kts | 1 + .../external/DecoratedExternalKotlinTarget.kt | 10 +++++++--- .../external/ExternalKotlinTargetDescriptor.kt | 16 ++++++++-------- ...tlinTarget.kt => ExternalKotlinTargetImpl.kt} | 6 ++---- .../mpp/external/createExternalKotlinTarget.kt | 6 +++--- 7 files changed, 28 insertions(+), 26 deletions(-) rename libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/{ExternalKotlinTarget.kt => ExternalKotlinTargetImpl.kt} (93%) diff --git a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetPrototype.kt b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetPrototype.kt index 640f3b6ad57..c4cd3fd6ccc 100644 --- a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetPrototype.kt +++ b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetPrototype.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi import org.jetbrains.kotlin.gradle.kpm.external.project import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.external.* -import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTargetDescriptor.DecoratedExternalTargetFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTargetDescriptor.TargetFactory @OptIn(ExternalVariantApi::class) fun KotlinMultiplatformExtension.androidTargetPrototype(): PrototypeAndroidTarget { @@ -46,8 +46,8 @@ fun KotlinMultiplatformExtension.androidTargetPrototype(): PrototypeAndroidTarge val androidTarget = createExternalKotlinTarget { targetName = "android" platformType = KotlinPlatformType.jvm - decoratedExternalTargetFactory = DecoratedExternalTargetFactory { externalTarget -> - PrototypeAndroidTarget(externalTarget, PrototypeAndroidDsl(31)) + targetFactory = TargetFactory { delegate -> + PrototypeAndroidTarget(delegate, PrototypeAndroidDsl(31)) } } diff --git a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidTarget.kt b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidTarget.kt index ea1020d8b02..ab20614fda8 100644 --- a/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin-tcs-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/PrototypeAndroidTarget.kt @@ -9,19 +9,18 @@ import org.gradle.api.NamedDomainObjectContainer import org.gradle.kotlin.dsl.getByType import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.mpp.external.DecoratedExternalKotlinTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTarget data class PrototypeAndroidDsl( var compileSdk: Int ) class PrototypeAndroidTarget( - private val target: ExternalKotlinTarget, + delegate: Delegate, val androidDsl: PrototypeAndroidDsl -) : DecoratedExternalKotlinTarget(target) { - internal val kotlin = target.project.extensions.getByType() +) : DecoratedExternalKotlinTarget(delegate) { + internal val kotlin = super.project.extensions.getByType() @Suppress("unchecked_cast") override val compilations: NamedDomainObjectContainer - get() = target.compilations as NamedDomainObjectContainer + get() = super.compilations as NamedDomainObjectContainer } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index 60f0ad988f3..1ff9fb1daf1 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -27,6 +27,7 @@ kotlin.sourceSets.all { languageSettings.optIn("org.jetbrains.kotlin.gradle.plugin.mpp.pm20.AdvancedKotlinGradlePluginApi") languageSettings.optIn("org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi") languageSettings.optIn("org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi") + languageSettings.optIn("org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi") languageSettings.optIn("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } 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 35a77725c5d..b6a04066e8c 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 @@ -11,8 +11,12 @@ import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi import org.jetbrains.kotlin.gradle.plugin.KotlinTarget @ExternalKotlinTargetApi -abstract class DecoratedExternalKotlinTarget( - internal val delegate: ExternalKotlinTarget +abstract class DecoratedExternalKotlinTarget internal constructor( + internal val delegate: ExternalKotlinTargetImpl ) : KotlinTarget by delegate { - internal val logger: Logger = Logging.getLogger("${ExternalKotlinTarget::class.qualifiedName}: $name") + constructor(delegate: Delegate) : this(delegate.impl) + + class Delegate internal constructor(internal val impl: ExternalKotlinTargetImpl) + + internal val logger: Logger = Logging.getLogger("${ExternalKotlinTargetImpl::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/ExternalKotlinTargetDescriptor.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetDescriptor.kt index 47707de099d..1488ff7a191 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetDescriptor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetDescriptor.kt @@ -7,19 +7,19 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.external import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTargetDescriptor.DecoratedExternalTargetFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTargetDescriptor.TargetFactory import kotlin.properties.Delegates @ExternalKotlinTargetApi interface ExternalKotlinTargetDescriptor { - fun interface DecoratedExternalTargetFactory { - fun create(target: ExternalKotlinTarget): T + fun interface TargetFactory { + fun create(target: DecoratedExternalKotlinTarget.Delegate): T } val targetName: String val platformType: KotlinPlatformType - val decoratedExternalTargetFactory: DecoratedExternalTargetFactory + val targetFactory: TargetFactory val configure: ((T) -> Unit)? } @@ -27,7 +27,7 @@ interface ExternalKotlinTargetDescriptor { interface ExternalKotlinTargetDescriptorBuilder { var targetName: String var platformType: KotlinPlatformType - var decoratedExternalTargetFactory: DecoratedExternalTargetFactory + var targetFactory: TargetFactory var configure: ((T) -> Unit)? fun configure(action: (T) -> Unit) = apply { val configure = this.configure @@ -47,13 +47,13 @@ fun ExternalKotlinTargetDescriptor( private class ExternalKotlinTargetDescriptorBuilderImpl : ExternalKotlinTargetDescriptorBuilder { override var targetName: String by Delegates.notNull() override var platformType: KotlinPlatformType by Delegates.notNull() - override var decoratedExternalTargetFactory: DecoratedExternalTargetFactory by Delegates.notNull() + override var targetFactory: TargetFactory by Delegates.notNull() override var configure: ((T) -> Unit)? = null fun build(): ExternalKotlinTargetDescriptorImpl = ExternalKotlinTargetDescriptorImpl( targetName = targetName, platformType = platformType, - decoratedExternalTargetFactory = decoratedExternalTargetFactory, + targetFactory = targetFactory, configure = configure ) } @@ -62,7 +62,7 @@ private class ExternalKotlinTargetDescriptorBuilderImpl( override val targetName: String, override val platformType: KotlinPlatformType, - override val decoratedExternalTargetFactory: DecoratedExternalTargetFactory, + override val targetFactory: TargetFactory, override val configure: ((T) -> Unit)? ) : ExternalKotlinTargetDescriptor 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/ExternalKotlinTargetImpl.kt similarity index 93% rename from libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTarget.kt rename to libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt index d45d3a7e480..d40916f94a5 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/ExternalKotlinTargetImpl.kt @@ -14,15 +14,13 @@ import org.gradle.api.attributes.AttributeContainer import org.gradle.api.component.SoftwareComponent import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.tasks.TaskProvider -import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent import org.jetbrains.kotlin.gradle.plugin.mpp.buildAdhocComponentsFromKotlinVariants -@ExternalKotlinTargetApi -class ExternalKotlinTarget internal constructor( +internal class ExternalKotlinTargetImpl internal constructor( override val project: Project, override val targetName: String, override val platformType: KotlinPlatformType, @@ -35,7 +33,7 @@ class ExternalKotlinTarget internal constructor( ) : KotlinTarget { fun interface ArtifactsTaskLocator { - fun locate(target: ExternalKotlinTarget): TaskProvider + fun locate(target: ExternalKotlinTargetImpl): TaskProvider } val kotlin = project.multiplatformExtension 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 f1c531de506..19635bc0f5a 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 @@ -20,11 +20,11 @@ fun KotlinMultiplatformExtension.createExter val defaultConfiguration = project.configurations.maybeCreate(lowerCamelCaseName(descriptor.targetName, "default")) val apiElementsConfiguration = project.configurations.maybeCreate(lowerCamelCaseName(descriptor.targetName, "apiElements")) val runtimeElementsConfiguration = project.configurations.maybeCreate(lowerCamelCaseName(descriptor.targetName, "runtimeElements")) - val artifactsTaskLocator = ExternalKotlinTarget.ArtifactsTaskLocator { target -> + val artifactsTaskLocator = ExternalKotlinTargetImpl.ArtifactsTaskLocator { target -> target.project.locateOrRegisterTask(lowerCamelCaseName(descriptor.targetName, "jar")) } - val target = ExternalKotlinTarget( + val target = ExternalKotlinTargetImpl( project = project, targetName = descriptor.targetName, platformType = descriptor.platformType, @@ -36,7 +36,7 @@ fun KotlinMultiplatformExtension.createExter artifactsTaskLocator = artifactsTaskLocator ) - val decorated = descriptor.decoratedExternalTargetFactory.create(target) + val decorated = descriptor.targetFactory.create(DecoratedExternalKotlinTarget.Delegate(target)) target.onCreated() descriptor.configure?.invoke(decorated) targets.add(decorated)