Cleanup GranularMetadataTransformation after refactoring

This commit is contained in:
Sergey Igushkin
2020-09-15 20:19:05 +03:00
parent 3817aa32a1
commit f19ef0184c
2 changed files with 17 additions and 82 deletions
@@ -282,20 +282,6 @@ internal class GranularMetadataTransformation(
module, resolvedToProject, projectStructureMetadata, allVisibleSourceSets, visibleSourceSetsExcludingDependsOn, module, resolvedToProject, projectStructureMetadata, allVisibleSourceSets, visibleSourceSetsExcludingDependsOn,
transitiveDependenciesToVisit, mppDependencyMetadataExtractor transitiveDependenciesToVisit, mppDependencyMetadataExtractor
) )
/*
return object : MetadataDependencyResolution.ChooseVisibleSourceSets(
module,
projectDependency,
projectStructureMetadata,
allVisibleSourceSets,
visibleSourceSetsExcludingDependsOn,
transitiveDependenciesToVisit
) {
override fun getExtractableMetadataFiles(baseDir: File): ExtractableMetadataFiles =
mppDependencyMetadataExtractor.getExtractableMetadataFiles(visibleSourceSetsExcludingDependsOn, baseDir)
}
*/
} }
private class ChooseVisibleSourceSetsImpl( private class ChooseVisibleSourceSetsImpl(
@@ -315,12 +301,7 @@ internal class GranularMetadataTransformation(
visibleTransitiveDependencies visibleTransitiveDependencies
) { ) {
override fun getExtractableMetadataFiles(baseDir: File): ExtractableMetadataFiles = override fun getExtractableMetadataFiles(baseDir: File): ExtractableMetadataFiles =
object : ExtractableMetadataFiles() { metadataExtractor.getExtractableMetadataFiles(visibleSourceSetNamesExcludingDependsOn, baseDir)
override fun getMetadataFilesPerSourceSet(doProcessFiles: Boolean) : Map<String, FileCollection>
= metadataExtractor.getExtractableMetadataFiles(visibleSourceSetNamesExcludingDependsOn, baseDir, doProcessFiles)
.getMetadataFilesPerSourceSet(doProcessFiles)
}
} }
} }
@@ -329,8 +310,7 @@ private abstract class MppDependencyMetadataExtractor(val project: Project, val
abstract fun getExtractableMetadataFiles( abstract fun getExtractableMetadataFiles(
visibleSourceSetNames: Set<String>, visibleSourceSetNames: Set<String>,
baseDir: File, baseDir: File
doProcessFiles: Boolean
): ExtractableMetadataFiles ): ExtractableMetadataFiles
} }
@@ -344,8 +324,7 @@ private class ProjectMppDependencyMetadataExtractor(
override fun getExtractableMetadataFiles( override fun getExtractableMetadataFiles(
visibleSourceSetNames: Set<String>, visibleSourceSetNames: Set<String>,
baseDir: File, baseDir: File
doProcessFiles: Boolean
): ExtractableMetadataFiles { ): ExtractableMetadataFiles {
val result = dependencyProject.multiplatformExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME).compilations val result = dependencyProject.multiplatformExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME).compilations
.filter { it.name in visibleSourceSetNames } .filter { it.name in visibleSourceSetNames }
@@ -380,62 +359,35 @@ private class JarArtifactMppDependencyMetadataExtractor(
override fun getExtractableMetadataFiles( override fun getExtractableMetadataFiles(
visibleSourceSetNames: Set<String>, visibleSourceSetNames: Set<String>,
baseDir: File, baseDir: File
doProcessFiles: Boolean
): ExtractableMetadataFiles { ): ExtractableMetadataFiles {
// val artifactFile = artifact.file
val primaryArtifact = primaryArtifact val primaryArtifact = primaryArtifact
val moduleId = ModuleIds.fromComponent(project, dependency) val moduleId = ModuleIds.fromComponent(project, dependency)
// val jarArtifact = artifact
// ?: return object : ExtractableMetadataFiles() {
// override fun getMetadataFilesPerSourceSet(doProcessFiles: Boolean): Map<String, FileCollection> = emptyMap()
// }
return JarExtractableMetadataFiles( return JarExtractableMetadataFiles(
moduleId, moduleId,
project, project,
primaryArtifact,
// artifactJar,
// visibleSourceSetNames,
baseDir, baseDir,
doProcessFiles, visibleSourceSetNames.associate { it to (metadataArtifactBySourceSet[it] ?: primaryArtifact) },
visibleSourceSetNames.associate { it to (metadataArtifactBySourceSet[it] ?: primaryArtifact) } checkNotNull(getProjectStructureMetadata()) { "project structure metadata is needed to extract files" }
) )
} }
private class JarExtractableMetadataFiles( private class JarExtractableMetadataFiles(
private val module: ModuleDependencyIdentifier, private val module: ModuleDependencyIdentifier,
private val project: Project, private val project: Project,
private val primaryArtifact: File,
private val baseDir: File, private val baseDir: File,
doProcessFiles: Boolean, private val artifactBySourceSet: Map<String, File>,
private val artifactBySourceSet: Map<String, File> private val projectStructureMetadata: KotlinProjectStructureMetadata
) : ExtractableMetadataFiles() { ) : ExtractableMetadataFiles() {
//TODO its part of extractor. Move it
fun getProjectStructureMetadata(): KotlinProjectStructureMetadata? {
return ZipFile(primaryArtifact).use { zip ->
val metadata = zip.getEntry("META-INF/$MULTIPLATFORM_PROJECT_METADATA_FILE_NAME")
?: return null
val metadataXmlDocument = zip.getInputStream(metadata).use { inputStream ->
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream)
}
parseKotlinSourceSetMetadataFromXml(metadataXmlDocument)
}
}
override fun getMetadataFilesPerSourceSet(doProcessFiles: Boolean): Map<String, FileCollection> { override fun getMetadataFilesPerSourceSet(doProcessFiles: Boolean): Map<String, FileCollection> {
val moduleString = "${module.groupId}-${module.moduleId}" val moduleString = "${module.groupId}-${module.moduleId}"
val transformedModuleRoot = run { baseDir.resolve(moduleString).also { it.mkdirs() } } val transformedModuleRoot = run { baseDir.resolve(moduleString).also { it.mkdirs() } }
val resultFiles = mutableMapOf<String, FileCollection>() val resultFiles = mutableMapOf<String, FileCollection>()
val projectStructureMetadata = checkNotNull(getProjectStructureMetadata()) { val projectStructureMetadata = projectStructureMetadata
"can't extract metadata from a module without project structure metadata"
}
// val artifactJar :File= artifactBySourceSet.values().first()
artifactBySourceSet.forEach { (sourceSetName, artifact) -> artifactBySourceSet.forEach { (sourceSetName, artifact) ->
ZipFile(artifact).use { zip -> ZipFile(artifact).use { zip ->
val entries = zip.entries().asSequence().filter { it.name.startsWith("$sourceSetName/") }.toList() val entries = zip.entries().asSequence().filter { it.name.startsWith("$sourceSetName/") }.toList()
@@ -94,33 +94,16 @@ open class TransformKotlinGranularMetadata
transformation.metadataDependencyResolutions transformation.metadataDependencyResolutions
} }
//TODO avoid using it private val extractableFilesByResolution: Map<out MetadataDependencyResolution, ExtractableMetadataFiles>
get() = metadataDependencyResolutions
.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>()
.associate { it to it.getExtractableMetadataFiles(outputsDir) }
@get:Internal @get:Internal
internal val filesByResolution: Map<out MetadataDependencyResolution, FileCollection> internal val filesByResolution: Map<out MetadataDependencyResolution, FileCollection>
get() = metadataDependencyResolutions.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>() get() = extractableFilesByResolution.mapValues { (_, value) -> project.files(value.getMetadataFilesPerSourceSet(false).values) }
.associate { it to project.files(it.getMetadataFilesBySourceSet(outputsDir, doProcessFiles = false).values) }
// @get:Internal private val extractableFiles by project.provider { extractableFilesByResolution.values }
// internal val filesByOriginalFiles: Map<out Iterable<File>, FileCollection> by project.provider {
// metadataDependencyResolutions.associate {
// it.originalArtifactFiles to project.files(
// when (it) {
// is MetadataDependencyResolution.ChooseVisibleSourceSets ->
// it.getMetadataFilesBySourceSet(outputsDir, doProcessFiles = false).values
// is MetadataDependencyResolution.ExcludeAsUnrequested ->
// emptyList()
// is MetadataDependencyResolution.KeepOriginalDependency ->
// it.originalArtifactFiles
// }
// )
// }
// }
private val extractableFiles by project.provider {
transformation.metadataDependencyResolutions
.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>()
.map { it.getExtractableMetadataFiles(outputsDir) }
}
@TaskAction @TaskAction
fun transformMetadata() { fun transformMetadata() {