[Gradle] Handle multiplatform composite builds when metadata.jar is not yet present
KT-52172
This commit is contained in:
committed by
Space Team
parent
90f8edbe80
commit
b872d42723
+5
@@ -21,6 +21,11 @@ internal interface CompositeMetadataArtifact {
|
|||||||
* Alternatively use the [read] function instead.
|
* Alternatively use the [read] function instead.
|
||||||
*/
|
*/
|
||||||
fun open(): CompositeMetadataArtifactContent
|
fun open(): CompositeMetadataArtifactContent
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if physical files are present on disk
|
||||||
|
*/
|
||||||
|
fun exists(): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+4
@@ -26,6 +26,10 @@ internal class CompositeMetadataArtifactImpl(
|
|||||||
private val hostSpecificArtifactFilesBySourceSetName: Map<String, File>
|
private val hostSpecificArtifactFilesBySourceSetName: Map<String, File>
|
||||||
) : CompositeMetadataArtifact {
|
) : CompositeMetadataArtifact {
|
||||||
|
|
||||||
|
override fun exists(): Boolean {
|
||||||
|
return primaryArtifactFile.exists() && hostSpecificArtifactFilesBySourceSetName.values.all { it.exists() }
|
||||||
|
}
|
||||||
|
|
||||||
override fun open(): CompositeMetadataArtifactContent {
|
override fun open(): CompositeMetadataArtifactContent {
|
||||||
return CompositeMetadataArtifactContentImpl()
|
return CompositeMetadataArtifactContentImpl()
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-2
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.targets.metadata.ResolvedMetadataFilesProvide
|
|||||||
import org.jetbrains.kotlin.gradle.targets.metadata.dependsOnClosureWithInterCompilationDependencies
|
import org.jetbrains.kotlin.gradle.targets.metadata.dependsOnClosureWithInterCompilationDependencies
|
||||||
import org.jetbrains.kotlin.gradle.utils.getValue
|
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||||
import org.jetbrains.kotlin.gradle.utils.notCompatibleWithConfigurationCacheCompat
|
import org.jetbrains.kotlin.gradle.utils.notCompatibleWithConfigurationCacheCompat
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@@ -117,8 +118,11 @@ open class MetadataDependencyTransformationTask
|
|||||||
get() = metadataDependencyResolutions
|
get() = metadataDependencyResolutions
|
||||||
.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>()
|
.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>()
|
||||||
.associateWith { chooseVisibleSourceSets ->
|
.associateWith { chooseVisibleSourceSets ->
|
||||||
val files = project.transformMetadataLibrariesForBuild(chooseVisibleSourceSets, outputsDir, materializeFiles = false)
|
outputFilesProvider {
|
||||||
project.files(files).builtBy(this)
|
project.transformMetadataLibrariesForBuild(
|
||||||
|
chooseVisibleSourceSets, outputsDir, materializeFiles = false
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
|
|||||||
+10
@@ -82,6 +82,16 @@ private fun transformMetadataLibrariesForBuild(
|
|||||||
materializeFiles: Boolean,
|
materializeFiles: Boolean,
|
||||||
compositeMetadataArtifact: CompositeMetadataArtifact
|
compositeMetadataArtifact: CompositeMetadataArtifact
|
||||||
): Set<File> {
|
): Set<File> {
|
||||||
|
/*
|
||||||
|
Careful handling of composite builds:
|
||||||
|
Right now, composite multiplatform builds will compile against the composite artifact build by the producer build (not
|
||||||
|
against compiled source sets directly).
|
||||||
|
|
||||||
|
This means, that this function might be called to figure out task inputs at a time, where
|
||||||
|
this composite artifact is not present on disk yet.
|
||||||
|
*/
|
||||||
|
if (!materializeFiles && !compositeMetadataArtifact.exists()) return emptySet()
|
||||||
|
|
||||||
return compositeMetadataArtifact.read { artifactContent ->
|
return compositeMetadataArtifact.read { artifactContent ->
|
||||||
resolution.visibleSourceSetNamesExcludingDependsOn.mapNotNull { visibleSourceSetName ->
|
resolution.visibleSourceSetNamesExcludingDependsOn.mapNotNull { visibleSourceSetName ->
|
||||||
val sourceSetContent = artifactContent.findSourceSet(visibleSourceSetName) ?: return@mapNotNull null
|
val sourceSetContent = artifactContent.findSourceSet(visibleSourceSetName) ?: return@mapNotNull null
|
||||||
|
|||||||
Reference in New Issue
Block a user