Fix requiresVisibilityOf in the Gradle plugin (KT-34312)
* Fix adding new items (which was untested, as the logic was only tested by unit tests) * Exclude the source set's dependsOn transitive closure from the requiresVisibilityOf checks (i.e. these source sets are considered visible) * Fix minor issues in the `UnsatisfiedSourceSetVisibilityException` message * Add `requiresVisibilityOf` to integration tests Issue #KT-34312 Fixed
This commit is contained in:
+9
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.UnusedSourceSetsChecker
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.METADATA_CONFIGURATION_NAME_SUFFIX
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.SourceSetConsistencyChecks
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.UnsatisfiedSourceSetVisibilityException
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||
import org.jetbrains.kotlin.gradle.util.*
|
||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||
@@ -2104,6 +2105,14 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
// Native:
|
||||
assertFileExists("build/classes/kotlin/$nativeHostTargetName/integrationTest/integrationTest.klib")
|
||||
}
|
||||
|
||||
gradleBuildScript().appendText(
|
||||
"\nkotlin.sourceSets { getByName(\"commonTest\").requiresVisibilityOf(getByName(\"commonIntegrationTest\")) }"
|
||||
)
|
||||
build {
|
||||
assertFailed()
|
||||
assertContains(UnsatisfiedSourceSetVisibilityException::class.java.simpleName)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+7
-1
@@ -22,7 +22,10 @@ kotlin {
|
||||
}
|
||||
}
|
||||
|
||||
create("commonIntegrationTest")
|
||||
create("commonIntegrationTest") {
|
||||
requiresVisibilityOf(getByName("commonMain"))
|
||||
requiresVisibilityOf(getByName("commonTest"))
|
||||
}
|
||||
}
|
||||
|
||||
jvm {
|
||||
@@ -51,6 +54,9 @@ kotlin {
|
||||
compilations.create("integrationTest") {
|
||||
associateWith(compilations["test"])
|
||||
defaultSourceSet.dependsOn(sourceSets["commonIntegrationTest"])
|
||||
defaultSourceSet.requiresVisibilityOf(sourceSets["commonMain"])
|
||||
defaultSourceSet.requiresVisibilityOf(sourceSets["commonTest"])
|
||||
defaultSourceSet.requiresVisibilityOf(sourceSets["commonIntegrationTest"])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -124,7 +124,7 @@ class DefaultKotlinSourceSet(
|
||||
get() = Collections.unmodifiableSet(_requiresVisibilityOf)
|
||||
|
||||
override fun requiresVisibilityOf(other: KotlinSourceSet) {
|
||||
requiresVisibilityOf += other
|
||||
_requiresVisibilityOf += other
|
||||
}
|
||||
|
||||
//region IDE import for Granular source sets metadata
|
||||
|
||||
+5
-5
@@ -66,7 +66,7 @@ class UnsatisfiedSourceSetVisibilityException(
|
||||
append(
|
||||
"The source set ${sourceSet.name} requires visibility of the " +
|
||||
singularOrPlural(requiredButNotVisible, "source set", "source sets:") + " " +
|
||||
"${requiredButNotVisible.joinToString()}. " +
|
||||
"${requiredButNotVisible.joinToString { it.name }}. " +
|
||||
"This requirement was not satisfied.\n\n"
|
||||
)
|
||||
|
||||
@@ -90,7 +90,7 @@ class UnsatisfiedSourceSetVisibilityException(
|
||||
|
||||
append(
|
||||
if (isAssociatedCompilation)
|
||||
", which compiles" +
|
||||
", which compiles " +
|
||||
singularOrPlural(allKotlinSourceSets, "source set ", "source sets: ") +
|
||||
allKotlinSourceSets.joinToString { it.name } +
|
||||
"\n"
|
||||
@@ -109,9 +109,9 @@ class UnsatisfiedSourceSetVisibilityException(
|
||||
} else {
|
||||
append(
|
||||
"${indent}To ensure the required visibility, the compilation " + compilationWithTarget(compilation) +
|
||||
"must have a direct or indirect associate that compiles the source " +
|
||||
" must have a direct or indirect associate that compiles the source " +
|
||||
singularOrPlural(missingRequiredSourceSets, "set ", "sets: ") +
|
||||
missingRequiredSourceSets.joinToString() + "\n"
|
||||
missingRequiredSourceSets.joinToString { it.name } + "\n"
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -140,7 +140,7 @@ internal fun checkSourceSetVisibilityRequirements(
|
||||
val inferredVisibility =
|
||||
getVisibleSourceSetsFromAssociateCompilations(compilationsBySourceSet[sourceSet].orEmpty())
|
||||
|
||||
val requiredButNotVisible = requiredVisibility - inferredVisibility //TODO minus dependsOn?
|
||||
val requiredButNotVisible = requiredVisibility - inferredVisibility - sourceSet.getSourceSetHierarchy()
|
||||
|
||||
if (requiredButNotVisible.isNotEmpty()) {
|
||||
val compilations = compilationsBySourceSet.getValue(sourceSet)
|
||||
|
||||
Reference in New Issue
Block a user