[Gradle] Remove requiresVisibilityOf API and related checks
^KT-58228 Verification Pending
This commit is contained in:
committed by
Space Team
parent
10ed26991d
commit
2f7f69ed4f
@@ -1060,14 +1060,12 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinSourceS
|
||||
public abstract fun getImplementationMetadataConfigurationName ()Ljava/lang/String;
|
||||
public abstract fun getKotlin ()Lorg/gradle/api/file/SourceDirectorySet;
|
||||
public abstract fun getLanguageSettings ()Lorg/jetbrains/kotlin/gradle/plugin/LanguageSettingsBuilder;
|
||||
public abstract fun getRequiresVisibilityOf ()Ljava/util/Set;
|
||||
public abstract fun getResources ()Lorg/gradle/api/file/SourceDirectorySet;
|
||||
public abstract fun getRuntimeOnlyMetadataConfigurationName ()Ljava/lang/String;
|
||||
public abstract fun kotlin (Lkotlin/jvm/functions/Function1;)Lorg/gradle/api/file/SourceDirectorySet;
|
||||
public abstract fun kotlin (Lorg/gradle/api/Action;)Lorg/gradle/api/file/SourceDirectorySet;
|
||||
public abstract fun languageSettings (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/LanguageSettingsBuilder;
|
||||
public abstract fun languageSettings (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/LanguageSettingsBuilder;
|
||||
public abstract fun requiresVisibilityOf (Lorg/jetbrains/kotlin/gradle/plugin/KotlinSourceSet;)V
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/plugin/KotlinSourceSet$Companion {
|
||||
|
||||
-6
@@ -43,12 +43,6 @@ interface KotlinSourceSet : Named, HasProject, HasMutableExtras, HasKotlinDepend
|
||||
const val COMMON_TEST_SOURCE_SET_NAME = "commonTest"
|
||||
}
|
||||
|
||||
@Deprecated("Scheduled for removal with Kotlin 2.0")
|
||||
val requiresVisibilityOf: Set<KotlinSourceSet>
|
||||
|
||||
@Deprecated("Scheduled for removal with Kotlin 2.0")
|
||||
fun requiresVisibilityOf(other: KotlinSourceSet)
|
||||
|
||||
val customSourceFilesExtensions: Iterable<String> // lazy iterable expected
|
||||
fun addCustomSourceFilesExtensions(extensions: List<String>) {}
|
||||
}
|
||||
|
||||
-8
@@ -1780,14 +1780,6 @@ open class NewMultiplatformIT : BaseGradleIT() {
|
||||
// Native:
|
||||
assertFileExists("build/classes/kotlin/linux64/integrationTest/klib/new-mpp-associate-compilations_integrationTest.klib")
|
||||
}
|
||||
|
||||
gradleBuildScript().appendText(
|
||||
"\nkotlin.sourceSets { getByName(\"commonTest\").requiresVisibilityOf(getByName(\"commonIntegrationTest\")) }"
|
||||
)
|
||||
build {
|
||||
assertFailed()
|
||||
assertContains(UnsatisfiedSourceSetVisibilityException::class.java.simpleName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-7
@@ -22,10 +22,7 @@ kotlin {
|
||||
}
|
||||
}
|
||||
|
||||
create("commonIntegrationTest") {
|
||||
requiresVisibilityOf(getByName("commonMain"))
|
||||
requiresVisibilityOf(getByName("commonTest"))
|
||||
}
|
||||
create("commonIntegrationTest")
|
||||
}
|
||||
|
||||
jvm {
|
||||
@@ -57,9 +54,6 @@ kotlin {
|
||||
compilations.create("integrationTest") {
|
||||
associateWith(compilations["test"])
|
||||
defaultSourceSet.dependsOn(sourceSets["commonIntegrationTest"])
|
||||
defaultSourceSet.requiresVisibilityOf(sourceSets["commonMain"])
|
||||
defaultSourceSet.requiresVisibilityOf(sourceSets["commonTest"])
|
||||
defaultSourceSet.requiresVisibilityOf(sourceSets["commonIntegrationTest"])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-8
@@ -22,10 +22,8 @@ import org.jetbrains.kotlin.gradle.plugin.ide.locateOrRegisterIdeResolveDependen
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.addBuildListenerForXcode
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.runDeprecationDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.awaitPlatformCompilations
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.checkSourceSetVisibilityRequirements
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
|
||||
@@ -174,12 +172,6 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
||||
project.launch {
|
||||
project.setupDefaultKotlinHierarchy()
|
||||
}
|
||||
|
||||
project.launchInStage(KotlinPluginLifecycle.Stage.ReadyForExecution) {
|
||||
project.runProjectConfigurationHealthCheck {
|
||||
checkSourceSetVisibilityRequirements(project)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupTargetsBuildStatsReport(project: Project) {
|
||||
|
||||
-12
@@ -121,18 +121,6 @@ abstract class DefaultKotlinSourceSet @Inject constructor(
|
||||
explicitlyAddedCustomSourceFilesExtensions.addAll(extensions)
|
||||
}
|
||||
|
||||
|
||||
private val _requiresVisibilityOf = mutableSetOf<KotlinSourceSet>()
|
||||
|
||||
@Deprecated("Scheduled for removal with Kotlin 2.0")
|
||||
override val requiresVisibilityOf: MutableSet<KotlinSourceSet>
|
||||
get() = Collections.unmodifiableSet(_requiresVisibilityOf)
|
||||
|
||||
@Deprecated("Scheduled for removal with Kotlin 2.0")
|
||||
override fun requiresVisibilityOf(other: KotlinSourceSet) {
|
||||
_requiresVisibilityOf += other
|
||||
}
|
||||
|
||||
//region IDE import for Granular source sets metadata
|
||||
|
||||
data class MetadataDependencyTransformation(
|
||||
|
||||
+1
-28
@@ -118,31 +118,4 @@ class UnsatisfiedSourceSetVisibilityException(
|
||||
append("\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun checkSourceSetVisibilityRequirements(project: Project) = checkSourceSetVisibilityRequirements(
|
||||
project.kotlinExtension.sourceSets
|
||||
)
|
||||
|
||||
internal fun checkSourceSetVisibilityRequirements(
|
||||
sourceSets: Iterable<KotlinSourceSet>,
|
||||
) {
|
||||
sourceSets.forEach { sourceSet ->
|
||||
val requiredVisibility = sourceSet.requiresVisibilityOf
|
||||
val inferredVisibility =
|
||||
getVisibleSourceSetsFromAssociateCompilations(sourceSet.internal.compilations)
|
||||
|
||||
val requiredButNotVisible = requiredVisibility - inferredVisibility - sourceSet.internal.withDependsOnClosure
|
||||
|
||||
if (requiredButNotVisible.isNotEmpty()) {
|
||||
val compilations = sourceSet.internal.compilations
|
||||
|
||||
throw UnsatisfiedSourceSetVisibilityException(
|
||||
sourceSet,
|
||||
compilations,
|
||||
inferredVisibility,
|
||||
requiredButNotVisible
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+170
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* Copyright 2010-2023 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("DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests.sources
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
|
||||
class SourceSetVisibilityFromAssociatedCompilationsTest {
|
||||
private val project = buildProjectWithMPP()
|
||||
private val kotlin = project.multiplatformExtension.apply {
|
||||
applyDefaultHierarchyTemplate()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testBasicSuccessful() {
|
||||
kotlin.jvm()
|
||||
kotlin.linuxX64()
|
||||
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
val jvmMain = kotlin.sourceSets.getByName("jvmMain")
|
||||
val jvmTest = kotlin.sourceSets.getByName("jvmTest")
|
||||
|
||||
jvmTest.assertVisibleSourceSetsFromAssociatedCompilations(commonMain, jvmMain)
|
||||
commonTest.assertVisibleSourceSetsFromAssociatedCompilations(commonMain)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testBambooSourceSetStructureVisibility() {
|
||||
kotlin.apply {
|
||||
jvm()
|
||||
iosArm64()
|
||||
iosX64()
|
||||
|
||||
sourceSets.apply {
|
||||
// NB: nativeTest sees iosMain because it participates only in iosX64 and iosArm64 test compilations.
|
||||
nativeTest.get().assertVisibleSourceSetsFromAssociatedCompilations(
|
||||
iosMain.get(),
|
||||
appleMain.get(),
|
||||
nativeMain.get(),
|
||||
commonMain.get(),
|
||||
)
|
||||
commonTest.get().assertVisibleSourceSetsFromAssociatedCompilations(commonMain.get())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCustomCompilationWithoutAssociation() {
|
||||
val jvm = kotlin.jvm()
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
val jvmSpecialTest = kotlin.sourceSets.create("jvmSpecialTest")
|
||||
|
||||
jvmSpecialTest.dependsOn(commonTest)
|
||||
|
||||
val jvmSpecialTestCompilation = jvm.compilations.create("specialTest") // note: No association with jvmMain!
|
||||
assertEquals(jvmSpecialTest, jvmSpecialTestCompilation.defaultSourceSet)
|
||||
|
||||
jvmSpecialTest.assertVisibleSourceSetsFromAssociatedCompilations(*arrayOf())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCustomCompilationAssociatesWithMainCompilation() {
|
||||
val jvm = kotlin.jvm()
|
||||
kotlin.linuxX64()
|
||||
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||
val jvmMain = kotlin.sourceSets.getByName("jvmMain")
|
||||
val jvmSpecialTest = kotlin.sourceSets.create("jvmSpecialTest")
|
||||
|
||||
jvmSpecialTest.dependsOn(commonTest)
|
||||
|
||||
val jvmSpecialTestCompilation = jvm.compilations.create("specialTest")
|
||||
assertEquals(jvmSpecialTest, jvmSpecialTestCompilation.defaultSourceSet)
|
||||
|
||||
jvmSpecialTestCompilation.associateWith(jvm.compilations.getByName("main"))
|
||||
|
||||
jvmSpecialTest.assertVisibleSourceSetsFromAssociatedCompilations(commonMain, jvmMain)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testInferenceForHierarchy() {
|
||||
kotlin.jvm()
|
||||
kotlin.js()
|
||||
kotlin.linuxX64("linux")
|
||||
|
||||
listOf("Main", "Test").forEach { suffix ->
|
||||
val common = kotlin.sourceSets.getByName("common$suffix")
|
||||
val jvmAndJs = kotlin.sourceSets.create("jvmAndJs$suffix")
|
||||
val linuxAndJs = kotlin.sourceSets.create("linuxAndJs$suffix")
|
||||
val jvm = kotlin.sourceSets.getByName("jvm$suffix")
|
||||
val linux = kotlin.sourceSets.getByName("linux$suffix")
|
||||
val js = kotlin.sourceSets.getByName("js$suffix")
|
||||
|
||||
jvmAndJs.dependsOn(common)
|
||||
linuxAndJs.dependsOn(common)
|
||||
|
||||
jvm.dependsOn(jvmAndJs)
|
||||
js.dependsOn(jvmAndJs)
|
||||
js.dependsOn(linuxAndJs)
|
||||
linux.dependsOn(linuxAndJs)
|
||||
}
|
||||
|
||||
"commonMain".assertVisibleSourceSetsFromAssociatedCompilations(*arrayOf())
|
||||
"jvmMain".assertVisibleSourceSetsFromAssociatedCompilations(*arrayOf())
|
||||
"jvmAndJsMain".assertVisibleSourceSetsFromAssociatedCompilations(*arrayOf())
|
||||
|
||||
"commonTest".assertVisibleSourceSetsFromAssociatedCompilations("commonMain")
|
||||
"jvmAndJsTest".assertVisibleSourceSetsFromAssociatedCompilations("commonMain", "jvmAndJsMain")
|
||||
"linuxAndJsTest".assertVisibleSourceSetsFromAssociatedCompilations("commonMain", "linuxAndJsMain")
|
||||
"jvmTest".assertVisibleSourceSetsFromAssociatedCompilations("commonMain", "jvmAndJsMain", "jvmMain")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testInferenceThroughIndirectAssociation() {
|
||||
kotlin.jvm()
|
||||
kotlin.js()
|
||||
|
||||
listOf(null, "Main", "Test", "IntegrationTest").zipWithNext().forEach { (previousSuffix, suffix) ->
|
||||
val common = kotlin.sourceSets.maybeCreate("common$suffix")
|
||||
val jvm = kotlin.sourceSets.maybeCreate("jvm$suffix")
|
||||
val js = kotlin.sourceSets.maybeCreate("js$suffix")
|
||||
|
||||
if (previousSuffix != null) {
|
||||
assertNotNull(suffix)
|
||||
jvm.dependsOn(common)
|
||||
js.dependsOn(common)
|
||||
|
||||
val previousJvmCompilation = kotlin.jvm().compilations.maybeCreate(previousSuffix.decapitalizeAsciiOnly())
|
||||
val jvmCompilation = kotlin.jvm().compilations.maybeCreate(suffix.decapitalizeAsciiOnly())
|
||||
assertEquals(jvm, jvmCompilation.defaultSourceSet)
|
||||
jvmCompilation.associateWith(previousJvmCompilation)
|
||||
|
||||
val previousJsCompilation = kotlin.js().compilations.maybeCreate(previousSuffix.decapitalizeAsciiOnly())
|
||||
val jsCompilation = kotlin.js().compilations.maybeCreate(suffix.decapitalizeAsciiOnly())
|
||||
assertEquals(js, jsCompilation.defaultSourceSet)
|
||||
jsCompilation.associateWith(previousJsCompilation)
|
||||
}
|
||||
}
|
||||
|
||||
"commonIntegrationTest".assertVisibleSourceSetsFromAssociatedCompilations("commonMain", "commonTest")
|
||||
"jvmIntegrationTest".assertVisibleSourceSetsFromAssociatedCompilations("commonMain", "jvmMain", "commonTest", "jvmTest")
|
||||
}
|
||||
|
||||
private fun String.assertVisibleSourceSetsFromAssociatedCompilations(
|
||||
vararg expectedVisibleSourceSets: String
|
||||
) = assertEquals(
|
||||
expectedVisibleSourceSets.toSet(),
|
||||
getVisibleSourceSetsFromAssociateCompilations(kotlin.sourceSets.getByName(this).internal.compilations).map { it.name }.toSet()
|
||||
)
|
||||
|
||||
private fun KotlinSourceSet.assertVisibleSourceSetsFromAssociatedCompilations(
|
||||
vararg expectedVisibleSourceSets: KotlinSourceSet
|
||||
) = assertEquals(
|
||||
expectedVisibleSourceSets.map { it.name }.toSet(),
|
||||
getVisibleSourceSetsFromAssociateCompilations(this.internal.compilations).map { it.name }.toSet()
|
||||
)
|
||||
}
|
||||
-218
@@ -1,218 +0,0 @@
|
||||
/*
|
||||
* 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("DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests.sources
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.UnsatisfiedSourceSetVisibilityException
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.checkSourceSetVisibilityRequirements
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFailsWith
|
||||
import kotlin.test.assertNotNull
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
class SourceSetVisibilityInferenceTest {
|
||||
private val project = buildProjectWithMPP()
|
||||
private val kotlin = project.multiplatformExtension.apply {
|
||||
applyDefaultHierarchyTemplate()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testBasicSuccessful() {
|
||||
kotlin.jvm()
|
||||
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
val jvmMain = kotlin.sourceSets.getByName("jvmMain")
|
||||
val jvmTest = kotlin.sourceSets.getByName("jvmTest")
|
||||
|
||||
commonTest.requiresVisibilityOf(commonMain)
|
||||
jvmTest.requiresVisibilityOf(jvmMain)
|
||||
|
||||
jvmTest.checkInferredSourceSetsVisibility(commonMain, jvmMain)
|
||||
checkSourceSetVisibilityRequirements(kotlin.sourceSets)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFailureWithNoAssociation() {
|
||||
val jvm = kotlin.jvm()
|
||||
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
val jvmMain = kotlin.sourceSets.getByName("jvmMain")
|
||||
val jvmSpecialTest = kotlin.sourceSets.create("jvmSpecialTest")
|
||||
|
||||
commonTest.requiresVisibilityOf(commonMain)
|
||||
jvmSpecialTest.requiresVisibilityOf(jvmMain)
|
||||
jvmSpecialTest.dependsOn(commonTest)
|
||||
|
||||
val jvmTestCompilation = jvm.compilations.getByName("test")
|
||||
val jvmSpecialTestCompilation = jvm.compilations.create("specialTest") // note: No association with jvmMain!
|
||||
assertEquals(jvmSpecialTest, jvmSpecialTestCompilation.defaultSourceSet)
|
||||
|
||||
jvmSpecialTest.checkInferredSourceSetsVisibility(*arrayOf())
|
||||
|
||||
assertFailsWith<UnsatisfiedSourceSetVisibilityException> {
|
||||
checkSourceSetVisibilityRequirements(setOf(jvmSpecialTest))
|
||||
}.apply {
|
||||
assertEquals(jvmSpecialTest, sourceSet)
|
||||
assertEquals(emptyList(), visibleSourceSets)
|
||||
assertEquals(setOf(jvmMain), requiredButNotVisible)
|
||||
assertEquals(setOf(jvmSpecialTestCompilation), compilations)
|
||||
}
|
||||
|
||||
assertFailsWith<UnsatisfiedSourceSetVisibilityException> {
|
||||
checkSourceSetVisibilityRequirements(setOf(commonTest))
|
||||
}.apply {
|
||||
assertEquals(commonTest, sourceSet)
|
||||
assertEquals(emptyList(), visibleSourceSets)
|
||||
assertEquals(setOf(commonMain), requiredButNotVisible)
|
||||
assertEquals(setOf(jvmTestCompilation, jvmSpecialTestCompilation), compilations)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testInferenceForHierarchy() {
|
||||
kotlin.jvm()
|
||||
kotlin.js()
|
||||
kotlin.linuxX64("linux")
|
||||
|
||||
listOf("Main", "Test").forEach { suffix ->
|
||||
val common = kotlin.sourceSets.getByName("common$suffix")
|
||||
val jvmAndJs = kotlin.sourceSets.create("jvmAndJs$suffix")
|
||||
val linuxAndJs = kotlin.sourceSets.create("linuxAndJs$suffix")
|
||||
val jvm = kotlin.sourceSets.getByName("jvm$suffix")
|
||||
val linux = kotlin.sourceSets.getByName("linux$suffix")
|
||||
val js = kotlin.sourceSets.getByName("js$suffix")
|
||||
|
||||
if (suffix == "Test") {
|
||||
jvmAndJs.requiresVisibilityOf(kotlin.sourceSets.getByName("jvmAndJsMain"))
|
||||
linuxAndJs.requiresVisibilityOf(kotlin.sourceSets.getByName("linuxAndJsMain"))
|
||||
jvm.requiresVisibilityOf(kotlin.sourceSets.getByName("jvmMain"))
|
||||
linux.requiresVisibilityOf(kotlin.sourceSets.getByName("linuxMain"))
|
||||
js.requiresVisibilityOf(kotlin.sourceSets.getByName("jsMain"))
|
||||
}
|
||||
|
||||
jvmAndJs.dependsOn(common)
|
||||
linuxAndJs.dependsOn(common)
|
||||
|
||||
jvm.dependsOn(jvmAndJs)
|
||||
js.dependsOn(jvmAndJs)
|
||||
js.dependsOn(linuxAndJs)
|
||||
linux.dependsOn(linuxAndJs)
|
||||
}
|
||||
|
||||
"commonMain".checkInferredSourceSetsVisibility(*arrayOf())
|
||||
"jvmMain".checkInferredSourceSetsVisibility(* arrayOf())
|
||||
"jvmAndJsMain".checkInferredSourceSetsVisibility(*arrayOf())
|
||||
|
||||
"commonTest".checkInferredSourceSetsVisibility("commonMain")
|
||||
"jvmAndJsTest".checkInferredSourceSetsVisibility("commonMain", "jvmAndJsMain")
|
||||
"linuxAndJsTest".checkInferredSourceSetsVisibility("commonMain", "linuxAndJsMain")
|
||||
"jvmTest".checkInferredSourceSetsVisibility("commonMain", "jvmAndJsMain", "jvmMain")
|
||||
|
||||
checkSourceSetVisibilityRequirements(kotlin.sourceSets)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testInferenceThroughIndirectAssociation() {
|
||||
kotlin.jvm()
|
||||
kotlin.js()
|
||||
|
||||
listOf(null, "Main", "Test", "IntegrationTest").zipWithNext().forEach { (previousSuffix, suffix) ->
|
||||
val common = kotlin.sourceSets.maybeCreate("common$suffix")
|
||||
val jvm = kotlin.sourceSets.maybeCreate("jvm$suffix")
|
||||
val js = kotlin.sourceSets.maybeCreate("js$suffix")
|
||||
|
||||
if (previousSuffix != null) {
|
||||
assertNotNull(suffix)
|
||||
common.requiresVisibilityOf(kotlin.sourceSets.getByName("common$previousSuffix"))
|
||||
jvm.requiresVisibilityOf(kotlin.sourceSets.getByName("jvm$previousSuffix"))
|
||||
js.requiresVisibilityOf(kotlin.sourceSets.getByName("js$previousSuffix"))
|
||||
jvm.dependsOn(common)
|
||||
js.dependsOn(common)
|
||||
|
||||
val previousJvmCompilation = kotlin.jvm().compilations.maybeCreate(previousSuffix.decapitalizeAsciiOnly())
|
||||
val jvmCompilation = kotlin.jvm().compilations.maybeCreate(suffix.decapitalizeAsciiOnly())
|
||||
assertEquals(jvm, jvmCompilation.defaultSourceSet)
|
||||
jvmCompilation.associateWith(previousJvmCompilation)
|
||||
|
||||
val previousJsCompilation = kotlin.js().compilations.maybeCreate(previousSuffix.decapitalizeAsciiOnly())
|
||||
val jsCompilation = kotlin.js().compilations.maybeCreate(suffix.decapitalizeAsciiOnly())
|
||||
assertEquals(js, jsCompilation.defaultSourceSet)
|
||||
jsCompilation.associateWith(previousJsCompilation)
|
||||
}
|
||||
}
|
||||
|
||||
"commonIntegrationTest".checkInferredSourceSetsVisibility("commonMain", "commonTest")
|
||||
"jvmIntegrationTest".checkInferredSourceSetsVisibility("commonMain", "jvmMain", "commonTest", "jvmTest")
|
||||
checkSourceSetVisibilityRequirements(kotlin.sourceSets)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testInferenceThroughIndirectAssociationWithMissingAssociateWith() {
|
||||
kotlin.jvm()
|
||||
kotlin.js()
|
||||
|
||||
listOf(null, "Main", "Test", "IntegrationTest").zipWithNext().forEach { (previousSuffix, suffix) ->
|
||||
val common = kotlin.sourceSets.maybeCreate("common$suffix")
|
||||
val jvm = kotlin.sourceSets.maybeCreate("jvm$suffix")
|
||||
val js = kotlin.sourceSets.maybeCreate("js$suffix")
|
||||
|
||||
if (previousSuffix != null) {
|
||||
assertNotNull(suffix)
|
||||
common.requiresVisibilityOf(kotlin.sourceSets.getByName("common$previousSuffix"))
|
||||
jvm.requiresVisibilityOf(kotlin.sourceSets.getByName("jvm$previousSuffix"))
|
||||
js.requiresVisibilityOf(kotlin.sourceSets.getByName("js$previousSuffix"))
|
||||
jvm.dependsOn(common)
|
||||
js.dependsOn(common)
|
||||
|
||||
val jvmCompilation = kotlin.jvm().compilations.maybeCreate(suffix.decapitalizeAsciiOnly())
|
||||
assertEquals(jvm, jvmCompilation.defaultSourceSet)
|
||||
|
||||
val jsCompilation = kotlin.js().compilations.maybeCreate(suffix.decapitalizeAsciiOnly())
|
||||
assertEquals(js, jsCompilation.defaultSourceSet)
|
||||
}
|
||||
}
|
||||
|
||||
val commonIntegrationTest = kotlin.sourceSets.getByName("commonIntegrationTest")
|
||||
commonIntegrationTest.requiresVisibilityOf(kotlin.sourceSets.getByName("commonMain"))
|
||||
|
||||
assertFailsWith<UnsatisfiedSourceSetVisibilityException> {
|
||||
checkSourceSetVisibilityRequirements(setOf(commonIntegrationTest))
|
||||
}.apply {
|
||||
assertEquals(commonIntegrationTest, this.sourceSet)
|
||||
assertEquals(setOf(), visibleSourceSets.map { it.name }.toSet())
|
||||
assertEquals(setOf("commonTest", "commonMain"), requiredButNotVisible.map { it.name }.toSet())
|
||||
assertEquals(
|
||||
setOf(
|
||||
kotlin.jvm().compilations.getByName("integrationTest"),
|
||||
kotlin.js().compilations.getByName("integrationTest")
|
||||
),
|
||||
compilations.toSet()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.checkInferredSourceSetsVisibility(
|
||||
vararg expectedVisibleSourceSets: String
|
||||
) = assertEquals(
|
||||
expectedVisibleSourceSets.toSet(),
|
||||
getVisibleSourceSetsFromAssociateCompilations(kotlin.sourceSets.getByName(this).internal.compilations).map { it.name }.toSet()
|
||||
)
|
||||
|
||||
private fun KotlinSourceSet.checkInferredSourceSetsVisibility(
|
||||
vararg expectedVisibleSourceSets: KotlinSourceSet
|
||||
) = assertEquals(
|
||||
expectedVisibleSourceSets.map { it.name }.toSet(),
|
||||
getVisibleSourceSetsFromAssociateCompilations(this.internal.compilations).map { it.name }.toSet()
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user