[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
|
@get:OutputFile
|
||||||
internal val transformedLibrariesFileIndex: RegularFileProperty = objectFactory
|
internal val transformedLibrariesFileIndex: RegularFileProperty = objectFactory
|
||||||
.fileProperty()
|
.fileProperty()
|
||||||
.apply { set(outputsDir.resolve("${kotlinSourceSet.name}.transformedLibraries")) }
|
.apply { set(outputsDir.resolve("${kotlinSourceSet.name}.libraries")) }
|
||||||
|
|
||||||
@get:OutputFile
|
@get:OutputFile
|
||||||
internal val visibleSourceSetsFile: RegularFileProperty = objectFactory
|
internal val visibleSourceSetsFile: RegularFileProperty = objectFactory
|
||||||
@@ -154,8 +154,7 @@ open class MetadataDependencyTransformationTask
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun writeTransformedLibraries(files: List<File>) {
|
private fun writeTransformedLibraries(files: List<File>) {
|
||||||
val content = files.joinToString(System.lineSeparator())
|
KotlinMetadataLibrariesIndexFile(transformedLibrariesFileIndex.get().asFile).write(files)
|
||||||
transformedLibrariesFileIndex.get().asFile.writeText(content)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun writeVisibleSourceSets(visibleSourceSetsByComponentId: Map<String, Set<String>>) {
|
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
|
@get:Internal // Warning! ownTransformedLibraries is available only after Task Execution
|
||||||
internal val ownTransformedLibraries: FileCollection = project.filesProvider {
|
internal val ownTransformedLibraries: FileCollection = project.filesProvider {
|
||||||
transformedLibrariesFileIndex.map { regularFile ->
|
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.FileCollection
|
||||||
import org.gradle.api.file.RegularFileProperty
|
import org.gradle.api.file.RegularFileProperty
|
||||||
import org.gradle.api.model.ObjectFactory
|
import org.gradle.api.model.ObjectFactory
|
||||||
import org.gradle.api.provider.Provider
|
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
@@ -197,12 +196,12 @@ internal open class CInteropMetadataDependencyTransformationTask @Inject constru
|
|||||||
@get:OutputFile
|
@get:OutputFile
|
||||||
val outputLibrariesFileIndex: RegularFileProperty = objectFactory
|
val outputLibrariesFileIndex: RegularFileProperty = objectFactory
|
||||||
.fileProperty()
|
.fileProperty()
|
||||||
.apply { set(outputDirectory.resolve("${sourceSet.name}.transformedCinteropLibraries")) }
|
.apply { set(outputDirectory.resolve("${sourceSet.name}.cinteropLibraries")) }
|
||||||
|
|
||||||
@get:Internal
|
@get:Internal
|
||||||
val outputLibraryFiles: FileCollection = project.filesProvider {
|
val outputLibraryFiles: FileCollection = project.filesProvider {
|
||||||
outputLibrariesFileIndex.map { file ->
|
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)
|
outputLibraryFilesDiscovery.resolveOutputLibraryFiles(outputDirectory, chooseVisibleSourceSets)
|
||||||
chooseVisibleSourceSets.forEach(::materializeMetadata)
|
chooseVisibleSourceSets.forEach(::materializeMetadata)
|
||||||
val transformedLibraries = outputLibraryFilesDiscovery.resolveOutputLibraryFiles(outputDirectory, chooseVisibleSourceSets)
|
val transformedLibraries = outputLibraryFilesDiscovery.resolveOutputLibraryFiles(outputDirectory, chooseVisibleSourceSets)
|
||||||
TransformedCinteropLibrariesFile(outputLibrariesFileIndex.get().asFile).write(transformedLibraries)
|
KotlinMetadataLibrariesIndexFile(outputLibrariesFileIndex.get().asFile).write(transformedLibraries)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun materializeMetadata(
|
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