[Gradle] Introduce InternalKotlinTarget
KT-54981
This commit is contained in:
committed by
Space Team
parent
e5398e6be7
commit
c33b172988
+1
-1
@@ -30,7 +30,7 @@ internal const val PRIMARY_SINGLE_COMPONENT_NAME = "kotlin"
|
||||
|
||||
abstract class AbstractKotlinTarget(
|
||||
final override val project: Project
|
||||
) : KotlinTarget {
|
||||
) : InternalKotlinTarget {
|
||||
private val attributeContainer = HierarchyAttributeContainer(parent = null)
|
||||
|
||||
override fun getAttributes(): AttributeContainer = attributeContainer
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
|
||||
internal interface InternalKotlinTarget : KotlinTarget
|
||||
|
||||
internal val KotlinTarget.internal: InternalKotlinTarget
|
||||
get() = (this as? InternalKotlinTarget) ?: throw IllegalArgumentException(
|
||||
"KotlinTarget($name) ${this::class} does not implement ${InternalKotlinTarget::class}"
|
||||
)
|
||||
+2
-2
@@ -9,12 +9,12 @@ import org.gradle.api.artifacts.Configuration
|
||||
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
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.InternalKotlinTarget
|
||||
|
||||
@ExternalKotlinTargetApi
|
||||
abstract class DecoratedExternalKotlinTarget internal constructor(
|
||||
internal val delegate: ExternalKotlinTargetImpl
|
||||
) : KotlinTarget by delegate {
|
||||
) : InternalKotlinTarget by delegate {
|
||||
constructor(delegate: Delegate) : this(delegate.impl)
|
||||
|
||||
class Delegate internal constructor(internal val impl: ExternalKotlinTargetImpl)
|
||||
|
||||
+2
-2
@@ -16,8 +16,8 @@ import org.gradle.api.publish.maven.MavenPublication
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
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.InternalKotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.buildAdhocComponentsFromKotlinVariants
|
||||
|
||||
internal class ExternalKotlinTargetImpl internal constructor(
|
||||
@@ -30,7 +30,7 @@ internal class ExternalKotlinTargetImpl internal constructor(
|
||||
override val publishable: Boolean,
|
||||
internal val kotlinComponents: Set<KotlinTargetComponent>,
|
||||
private val artifactsTaskLocator: ArtifactsTaskLocator,
|
||||
) : KotlinTarget {
|
||||
) : InternalKotlinTarget {
|
||||
|
||||
fun interface ArtifactsTaskLocator {
|
||||
fun locate(target: ExternalKotlinTargetImpl): TaskProvider<out Task>
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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("FunctionName")
|
||||
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.InternalKotlinTarget
|
||||
import kotlin.test.Test
|
||||
|
||||
class InternalKotlinTargetTest {
|
||||
@Test
|
||||
fun `test - all implementations of KotlinTarget - implement InternalKotlinTarget`() {
|
||||
assertAllImplementationsAlsoImplement(KotlinTarget::class, InternalKotlinTarget::class)
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -16,11 +16,11 @@ fun assertAllImplementationsAlsoImplement(
|
||||
baseInterface: KClass<*>,
|
||||
requiredInterface: KClass<*>
|
||||
) {
|
||||
reflections.getSubTypesOf(baseInterface.java)
|
||||
val badImplementations = reflections.getSubTypesOf(baseInterface.java)
|
||||
.filter { subtype -> !subtype.isInterface }
|
||||
.forEach { implementation ->
|
||||
if (!implementation.kotlin.isSubclassOf(requiredInterface)) {
|
||||
fail("${implementation.kotlin} does not implement $requiredInterface")
|
||||
}
|
||||
}
|
||||
.filter { implementation -> !implementation.kotlin.isSubclassOf(requiredInterface) }
|
||||
|
||||
if (badImplementations.isNotEmpty()) {
|
||||
fail("${badImplementations.map { it.kotlin }} does not implement $requiredInterface")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user