[Gradle] Share KotlinMetadataLibrariesIndexFile impl for cinterop and regular metadata transformation
KT-49933
This commit is contained in:
committed by
Space Team
parent
70046ffc20
commit
755958f41c
+22
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropMetadataDependencyTransformationTask
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Files used by the [MetadataDependencyTransformationTask] and [CInteropMetadataDependencyTransformationTask] to
|
||||
* store the resulting 'metadata path' in this index file.
|
||||
*/
|
||||
internal class KotlinMetadataLibrariesIndexFile(private val file: File) {
|
||||
fun read(): List<File> = file.readLines().map { File(it) }
|
||||
|
||||
fun write(files: Iterable<File>) {
|
||||
val content = files.joinToString(System.lineSeparator()) { it.path }
|
||||
file.writeText(content)
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -99,7 +99,7 @@ open class MetadataDependencyTransformationTask
|
||||
@get:OutputFile
|
||||
internal val transformedLibrariesFileIndex: RegularFileProperty = objectFactory
|
||||
.fileProperty()
|
||||
.apply { set(outputsDir.resolve("${kotlinSourceSet.name}.transformedLibraries")) }
|
||||
.apply { set(outputsDir.resolve("${kotlinSourceSet.name}.libraries")) }
|
||||
|
||||
@get:OutputFile
|
||||
internal val visibleSourceSetsFile: RegularFileProperty = objectFactory
|
||||
@@ -154,8 +154,7 @@ open class MetadataDependencyTransformationTask
|
||||
}
|
||||
|
||||
private fun writeTransformedLibraries(files: List<File>) {
|
||||
val content = files.joinToString(System.lineSeparator())
|
||||
transformedLibrariesFileIndex.get().asFile.writeText(content)
|
||||
KotlinMetadataLibrariesIndexFile(transformedLibrariesFileIndex.get().asFile).write(files)
|
||||
}
|
||||
|
||||
private fun writeVisibleSourceSets(visibleSourceSetsByComponentId: Map<String, Set<String>>) {
|
||||
@@ -175,7 +174,7 @@ open class MetadataDependencyTransformationTask
|
||||
@get:Internal // Warning! ownTransformedLibraries is available only after Task Execution
|
||||
internal val ownTransformedLibraries: FileCollection = project.filesProvider {
|
||||
transformedLibrariesFileIndex.map { regularFile ->
|
||||
regularFile.asFile.readLines().map { File(it) }
|
||||
KotlinMetadataLibrariesIndexFile(regularFile.asFile).read()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-14
@@ -12,7 +12,6 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.file.RegularFileProperty
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.*
|
||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
@@ -197,12 +196,12 @@ internal open class CInteropMetadataDependencyTransformationTask @Inject constru
|
||||
@get:OutputFile
|
||||
val outputLibrariesFileIndex: RegularFileProperty = objectFactory
|
||||
.fileProperty()
|
||||
.apply { set(outputDirectory.resolve("${sourceSet.name}.transformedCinteropLibraries")) }
|
||||
.apply { set(outputDirectory.resolve("${sourceSet.name}.cinteropLibraries")) }
|
||||
|
||||
@get:Internal
|
||||
val outputLibraryFiles: FileCollection = project.filesProvider {
|
||||
outputLibrariesFileIndex.map { file ->
|
||||
TransformedCinteropLibrariesFile(file.asFile).read()
|
||||
KotlinMetadataLibrariesIndexFile(file.asFile).read()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,7 +214,7 @@ internal open class CInteropMetadataDependencyTransformationTask @Inject constru
|
||||
outputLibraryFilesDiscovery.resolveOutputLibraryFiles(outputDirectory, chooseVisibleSourceSets)
|
||||
chooseVisibleSourceSets.forEach(::materializeMetadata)
|
||||
val transformedLibraries = outputLibraryFilesDiscovery.resolveOutputLibraryFiles(outputDirectory, chooseVisibleSourceSets)
|
||||
TransformedCinteropLibrariesFile(outputLibrariesFileIndex.get().asFile).write(transformedLibraries)
|
||||
KotlinMetadataLibrariesIndexFile(outputLibrariesFileIndex.get().asFile).write(transformedLibraries)
|
||||
}
|
||||
|
||||
private fun materializeMetadata(
|
||||
@@ -242,13 +241,3 @@ internal open class CInteropMetadataDependencyTransformationTask @Inject constru
|
||||
}
|
||||
}
|
||||
|
||||
private class TransformedCinteropLibrariesFile(
|
||||
private val indexFile: File
|
||||
) {
|
||||
fun read(): Set<File> = indexFile.readLines().mapTo(mutableSetOf()) { File(it) }
|
||||
|
||||
fun write(files: Iterable<File>) {
|
||||
val content = files.joinToString(System.lineSeparator())
|
||||
indexFile.writeText(content)
|
||||
}
|
||||
}
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* 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("FunctionName")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataLibrariesIndexFile
|
||||
import org.junit.Rule
|
||||
import org.junit.rules.TemporaryFolder
|
||||
import java.io.File
|
||||
import java.io.FileNotFoundException
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFailsWith
|
||||
|
||||
class KotlinMetadataLibrariesIndexFileTest {
|
||||
|
||||
@get:Rule
|
||||
val temporaryFolder = TemporaryFolder()
|
||||
|
||||
@Test
|
||||
fun `test - empty list`() {
|
||||
testWriteRead(emptyList())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - absolute and relative files`() {
|
||||
testWriteRead(listOf(File("relative"), File("absolute").absoluteFile))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - file does not exist - read`() {
|
||||
assertFailsWith<FileNotFoundException> {
|
||||
KotlinMetadataLibrariesIndexFile(temporaryFolder.newFolder().resolve("does-not-exist")).read()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - file and parent file does not exist - write`() {
|
||||
KotlinMetadataLibrariesIndexFile(temporaryFolder.newFolder().resolve("does-not-exist")).apply {
|
||||
write(emptyList())
|
||||
assertEquals(emptyList(), read())
|
||||
}
|
||||
}
|
||||
|
||||
private fun testWriteRead(files: Iterable<File>) {
|
||||
val index = KotlinMetadataLibrariesIndexFile(temporaryFolder.newFile())
|
||||
index.write(files)
|
||||
assertEquals(files.toList(), index.read())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user