[ObjCExport] Fe10: Implement test with exported and non exported klib dependencies
KT-65670
This commit is contained in:
committed by
Space Team
parent
b26f9cb274
commit
e377a98815
+9
-3
@@ -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,
|
||||
|
||||
+15
-3
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user