[ObjCExport] Fe10: Implement test with exported and non exported klib dependencies

KT-65670
This commit is contained in:
Sebastian Sellmair
2024-02-23 11:33:03 +01:00
committed by Space Team
parent b26f9cb274
commit e377a98815
18 changed files with 361 additions and 13 deletions
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.backend.konan.UnitSuspendFunctionObjCExport
import org.jetbrains.kotlin.backend.konan.objcexport.*
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.tooling.core.closure
import org.junit.jupiter.api.extension.AfterEachCallback
import org.junit.jupiter.api.extension.ExtensionContext
import org.junit.jupiter.api.extension.ParameterContext
@@ -59,14 +61,18 @@ private class Fe10HeaderGeneratorImpl(private val disposable: Disposable) : Head
val environment: KotlinCoreEnvironment = createKotlinCoreEnvironment(disposable)
val kotlinFiles = root.walkTopDown().filter { it.isFile }.filter { it.extension == "kt" }.toList()
val moduleDescriptors = setOf(createModuleDescriptor(environment, kotlinFiles))
val moduleDescriptors = setOf(createModuleDescriptor(environment, kotlinFiles, configuration.dependencies))
val mapper = ObjCExportMapper(
unitSuspendFunctionExport = UnitSuspendFunctionObjCExport.DEFAULT
)
val exportedModuleDescriptors = moduleDescriptors + moduleDescriptors
.closure<ModuleDescriptor> { it.allDependencyModules }
.filter { it.name.asStringStripSpecialMarkers() in configuration.exportedDependencyModuleNames }
val namer = ObjCExportNamerImpl(
moduleDescriptors = moduleDescriptors,
moduleDescriptors = exportedModuleDescriptors,
builtIns = DefaultBuiltIns.Instance,
mapper = mapper,
problemCollector = ObjCExportProblemCollector.SILENT,
@@ -76,7 +82,7 @@ private class Fe10HeaderGeneratorImpl(private val disposable: Disposable) : Head
)
return ObjCExportHeaderGeneratorImpl(
moduleDescriptors = moduleDescriptors.toList(),
moduleDescriptors = exportedModuleDescriptors.toList(),
mapper = mapper,
namer = namer,
problemCollector = ObjCExportProblemCollector.SILENT,
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.util.KtTestUtil
import java.io.File
import java.nio.file.Path
fun createModuleDescriptor(
environment: KotlinCoreEnvironment,
@@ -51,9 +52,8 @@ fun createModuleDescriptor(
fun createModuleDescriptor(
environment: KotlinCoreEnvironment,
kotlinFiles: List<File>,
dependencyKlibs: List<Path> = emptyList(),
): ModuleDescriptor {
val psiFactory = KtPsiFactory(environment.project)
val kotlinPsiFiles = kotlinFiles.map { file -> psiFactory.createFile(file.name, KtTestUtil.doLoadFile(file)) }
val klibFactory = KlibMetadataFactories(::KonanBuiltIns, DynamicTypeDeserializer)
@@ -64,6 +64,15 @@ fun createModuleDescriptor(
packageAccessHandler = null
).also { it.setDependencies(it) }
val dependencyKlibDescriptors = dependencyKlibs.map { dependencyKlib ->
klibFactory.DefaultDeserializedDescriptorFactory.createDescriptorAndNewBuiltIns(
library = resolveSingleFileKlib(org.jetbrains.kotlin.konan.file.File(dependencyKlib)),
languageVersionSettings = createLanguageVersionSettings(),
storageManager = LockBasedStorageManager.NO_LOCKS,
packageAccessHandler = null,
).also { it.setDependencies(it, stdlibModuleDescriptor) }
}
val moduleDescriptor = ModuleDescriptorImpl(
moduleName = Name.special("<test_module>"),
storageManager = LockBasedStorageManager.NO_LOCKS,
@@ -78,7 +87,7 @@ fun createModuleDescriptor(
moduleDescriptor.setDependencies(
ModuleDependenciesImpl(
allDependencies = listOf(moduleDescriptor, stdlibModuleDescriptor),
allDependencies = listOf(moduleDescriptor, stdlibModuleDescriptor) + dependencyKlibDescriptors,
modulesWhoseInternalsAreVisible = emptySet(),
directExpectedByDependencies = emptyList(),
allExpectedByDependencies = emptySet()
@@ -87,6 +96,9 @@ fun createModuleDescriptor(
val projectContext = ProjectContext(environment.project, "test project context")
val psiFactory = KtPsiFactory(environment.project)
val kotlinPsiFiles = kotlinFiles.map { file -> psiFactory.createFile(file.name, KtTestUtil.doLoadFile(file)) }
return FakeTopDownAnalyzerFacadeForNative.analyzeFilesWithGivenTrace(
files = kotlinPsiFiles,
trace = NoScopeRecordCliBindingTrace(),