[Gradle] Make ExternalKotlinTargetImpl internal

^KT-54766 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-11-04 14:12:41 +01:00
committed by Space Team
parent f34875b161
commit 25fe9589b4
7 changed files with 28 additions and 26 deletions
@@ -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<PrototypeAndroidTarget> {
targetName = "android"
platformType = KotlinPlatformType.jvm
decoratedExternalTargetFactory = DecoratedExternalTargetFactory { externalTarget ->
PrototypeAndroidTarget(externalTarget, PrototypeAndroidDsl(31))
targetFactory = TargetFactory { delegate ->
PrototypeAndroidTarget(delegate, PrototypeAndroidDsl(31))
}
}
@@ -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<KotlinMultiplatformExtension>()
) : DecoratedExternalKotlinTarget(delegate) {
internal val kotlin = super.project.extensions.getByType<KotlinMultiplatformExtension>()
@Suppress("unchecked_cast")
override val compilations: NamedDomainObjectContainer<PrototypeAndroidCompilation>
get() = target.compilations as NamedDomainObjectContainer<PrototypeAndroidCompilation>
get() = super.compilations as NamedDomainObjectContainer<PrototypeAndroidCompilation>
}
@@ -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")
}
@@ -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")
}
@@ -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<T : DecoratedExternalKotlinTarget> {
fun interface DecoratedExternalTargetFactory<T : DecoratedExternalKotlinTarget> {
fun create(target: ExternalKotlinTarget): T
fun interface TargetFactory<T : DecoratedExternalKotlinTarget> {
fun create(target: DecoratedExternalKotlinTarget.Delegate): T
}
val targetName: String
val platformType: KotlinPlatformType
val decoratedExternalTargetFactory: DecoratedExternalTargetFactory<T>
val targetFactory: TargetFactory<T>
val configure: ((T) -> Unit)?
}
@@ -27,7 +27,7 @@ interface ExternalKotlinTargetDescriptor<T : DecoratedExternalKotlinTarget> {
interface ExternalKotlinTargetDescriptorBuilder<T : DecoratedExternalKotlinTarget> {
var targetName: String
var platformType: KotlinPlatformType
var decoratedExternalTargetFactory: DecoratedExternalTargetFactory<T>
var targetFactory: TargetFactory<T>
var configure: ((T) -> Unit)?
fun configure(action: (T) -> Unit) = apply {
val configure = this.configure
@@ -47,13 +47,13 @@ fun <T : DecoratedExternalKotlinTarget> ExternalKotlinTargetDescriptor(
private class ExternalKotlinTargetDescriptorBuilderImpl<T : DecoratedExternalKotlinTarget> : ExternalKotlinTargetDescriptorBuilder<T> {
override var targetName: String by Delegates.notNull()
override var platformType: KotlinPlatformType by Delegates.notNull()
override var decoratedExternalTargetFactory: DecoratedExternalTargetFactory<T> by Delegates.notNull()
override var targetFactory: TargetFactory<T> by Delegates.notNull()
override var configure: ((T) -> Unit)? = null
fun build(): ExternalKotlinTargetDescriptorImpl<T> = ExternalKotlinTargetDescriptorImpl(
targetName = targetName,
platformType = platformType,
decoratedExternalTargetFactory = decoratedExternalTargetFactory,
targetFactory = targetFactory,
configure = configure
)
}
@@ -62,7 +62,7 @@ private class ExternalKotlinTargetDescriptorBuilderImpl<T : DecoratedExternalKot
private data class ExternalKotlinTargetDescriptorImpl<T : DecoratedExternalKotlinTarget>(
override val targetName: String,
override val platformType: KotlinPlatformType,
override val decoratedExternalTargetFactory: DecoratedExternalTargetFactory<T>,
override val targetFactory: TargetFactory<T>,
override val configure: ((T) -> Unit)?
) : ExternalKotlinTargetDescriptor<T>
@@ -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<out Task>
fun locate(target: ExternalKotlinTargetImpl): TaskProvider<out Task>
}
val kotlin = project.multiplatformExtension
@@ -20,11 +20,11 @@ fun <T : DecoratedExternalKotlinTarget> 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<Jar>(lowerCamelCaseName(descriptor.targetName, "jar"))
}
val target = ExternalKotlinTarget(
val target = ExternalKotlinTargetImpl(
project = project,
targetName = descriptor.targetName,
platformType = descriptor.platformType,
@@ -36,7 +36,7 @@ fun <T : DecoratedExternalKotlinTarget> 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)