[Gradle] Implement CompilationAssociator.default, ...
... to allow extending the default behaviour for ExternalTargetApi consumers ^KT-59562 Verification Pending
This commit is contained in:
committed by
Space Team
parent
966a342bf1
commit
4e85434536
@@ -747,9 +747,14 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/external/
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator {
|
||||
public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator$Companion;
|
||||
public abstract fun associate (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation;Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation;)V
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator$Companion {
|
||||
public final fun getDefault ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationAssociator;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinCompilationDescriptor$CompilationFactory {
|
||||
public abstract fun create (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation$Delegate;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/DecoratedKotlinCompilation;
|
||||
}
|
||||
|
||||
+13
-4
@@ -12,7 +12,9 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.hierarchy.KotlinSourceSetTreeClassifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationAssociator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.SourceSetTreeClassifier
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
@@ -45,8 +47,15 @@ interface ExternalKotlinCompilationDescriptor<T : DecoratedExternalKotlinCompila
|
||||
* handling them on behalf of the authors of the external [KotlinTarget]
|
||||
*/
|
||||
@ExternalKotlinTargetApi
|
||||
fun interface CompilationAssociator<T : DecoratedExternalKotlinCompilation> {
|
||||
fun interface CompilationAssociator<in T : DecoratedExternalKotlinCompilation> {
|
||||
fun associate(auxiliary: T, main: DecoratedExternalKotlinCompilation)
|
||||
|
||||
@ExternalKotlinTargetApi
|
||||
companion object {
|
||||
val default = CompilationAssociator<DecoratedExternalKotlinCompilation> { aux, main ->
|
||||
DefaultKotlinCompilationAssociator.associate(aux.target, aux.compilation.internal, main.compilation.internal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val compilationName: String
|
||||
@@ -55,7 +64,7 @@ interface ExternalKotlinCompilationDescriptor<T : DecoratedExternalKotlinCompila
|
||||
val defaultSourceSet: KotlinSourceSet
|
||||
val compilationFactory: CompilationFactory<T>
|
||||
val friendArtifactResolver: FriendArtifactResolver<T>?
|
||||
val compilationAssociator: CompilationAssociator<T>?
|
||||
val compilationAssociator: CompilationAssociator<T>
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Deprecated("Use .sourceSetTreeClassifierV2 instead")
|
||||
@@ -93,7 +102,7 @@ class ExternalKotlinCompilationDescriptorBuilder<T : DecoratedExternalKotlinComp
|
||||
var defaultSourceSet: KotlinSourceSet by Delegates.notNull()
|
||||
var compilationFactory: CompilationFactory<T> by Delegates.notNull()
|
||||
var friendArtifactResolver: FriendArtifactResolver<T>? = null
|
||||
var compilationAssociator: CompilationAssociator<T>? = null
|
||||
var compilationAssociator: CompilationAssociator<T> = CompilationAssociator.default
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Deprecated("Use sourceSetTreeClassifierV2 instead")
|
||||
@@ -117,7 +126,7 @@ private data class ExternalKotlinCompilationDescriptorImpl<T : DecoratedExternal
|
||||
override val defaultSourceSet: KotlinSourceSet,
|
||||
override val compilationFactory: CompilationFactory<T>,
|
||||
override val friendArtifactResolver: FriendArtifactResolver<T>?,
|
||||
override val compilationAssociator: CompilationAssociator<T>?,
|
||||
override val compilationAssociator: CompilationAssociator<T>,
|
||||
@Deprecated("Use .sourceSetTreeClassifierV2 instead")
|
||||
@Suppress("DEPRECATION")
|
||||
override val sourceSetTreeClassifier: SourceSetTreeClassifier,
|
||||
|
||||
+6
-7
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.hierarchy.SourceSetTreeClassifierWrapper
|
||||
import org.jetbrains.kotlin.gradle.plugin.hierarchy.sourceSetTreeClassifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationAssociator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationAssociator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
|
||||
@@ -50,12 +49,12 @@ fun <T : DecoratedExternalKotlinCompilation> DecoratedExternalKotlinTarget.creat
|
||||
compileAllTaskName = descriptor.compileAllTaskName ?: default.compileAllTaskName
|
||||
)
|
||||
},
|
||||
compilationAssociator = descriptor.compilationAssociator?.let { declaredAssociator ->
|
||||
@Suppress("unchecked_cast")
|
||||
KotlinCompilationAssociator { _, first, second ->
|
||||
declaredAssociator.associate(first.decoratedInstance as T, second.decoratedInstance as DecoratedExternalKotlinCompilation)
|
||||
}
|
||||
} ?: DefaultKotlinCompilationAssociator,
|
||||
compilationAssociator = @Suppress("unchecked_cast") KotlinCompilationAssociator { _, first, second ->
|
||||
descriptor.compilationAssociator.associate(
|
||||
first.decoratedInstance as T,
|
||||
second.decoratedInstance as DecoratedExternalKotlinCompilation
|
||||
)
|
||||
},
|
||||
compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver(
|
||||
DefaultKotlinCompilationFriendPathsResolver.FriendArtifactResolver.composite(
|
||||
DefaultKotlinCompilationFriendPathsResolver.DefaultFriendArtifactResolver,
|
||||
|
||||
+54
@@ -17,12 +17,15 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree
|
||||
import org.jetbrains.kotlin.gradle.plugin.hierarchy.KotlinSourceSetTreeClassifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.hierarchy.orNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.launchInStage
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.CompilationAssociator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptor.CompilationFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilationDescriptorBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.createCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.createExternalKotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.util.*
|
||||
import org.jetbrains.kotlin.gradle.utils.property
|
||||
import org.jetbrains.kotlin.gradle.utils.toMap
|
||||
import org.jetbrains.kotlin.tooling.core.extrasKeyOf
|
||||
import kotlin.test.*
|
||||
|
||||
class ExternalKotlinTargetApiTests {
|
||||
@@ -77,6 +80,57 @@ class ExternalKotlinTargetApiTests {
|
||||
assertNull(KotlinSourceSetTree.orNull(auxCompilation))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - compilation associator - default`() {
|
||||
val target = kotlin.createExternalKotlinTarget<FakeTarget> { defaults() }
|
||||
|
||||
val mainCompilation = target.createCompilation<FakeCompilation> {
|
||||
assertEquals(
|
||||
CompilationAssociator.default, compilationAssociator,
|
||||
"Expected CompilationAssociator.default being set in ${ExternalKotlinCompilationDescriptorBuilder::class.simpleName}"
|
||||
)
|
||||
|
||||
defaults(kotlin)
|
||||
compileTaskName = "main"
|
||||
}
|
||||
|
||||
val auxCompilation = target.createCompilation<FakeCompilation> {
|
||||
defaults(kotlin)
|
||||
compilationName = "aux"
|
||||
}
|
||||
|
||||
auxCompilation.associateWith(mainCompilation)
|
||||
assertEquals(setOf(mainCompilation), auxCompilation.associateWith.toSet())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - compilation associator - custom`() {
|
||||
val target = kotlin.createExternalKotlinTarget<FakeTarget> { defaults() }
|
||||
val testTraceKey = extrasKeyOf<String>("testTrace")
|
||||
|
||||
val compilationAssociator = CompilationAssociator<FakeCompilation> { auxiliary, main ->
|
||||
auxiliary.extras[testTraceKey] = "aux"
|
||||
main.extras[testTraceKey] = "main"
|
||||
}
|
||||
|
||||
val mainCompilation = target.createCompilation<FakeCompilation> {
|
||||
defaults(kotlin)
|
||||
this.compilationAssociator = compilationAssociator
|
||||
this.compileTaskName = "main"
|
||||
}
|
||||
|
||||
val auxCompilation = target.createCompilation<FakeCompilation> {
|
||||
defaults(kotlin)
|
||||
this.compilationName = "aux"
|
||||
this.compilationAssociator = compilationAssociator
|
||||
}
|
||||
|
||||
auxCompilation.associateWith(mainCompilation)
|
||||
|
||||
assertEquals("aux", auxCompilation.extras[testTraceKey])
|
||||
assertEquals("main", mainCompilation.extras[testTraceKey])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - sourcesElements - default configuration`() = buildProjectWithMPP().runLifecycleAwareTest {
|
||||
val target = kotlin.createExternalKotlinTarget<FakeTarget> { defaults() }
|
||||
|
||||
Reference in New Issue
Block a user