Skip to content

Commit bfa35a1

Browse files
ddolovovSpace Team
authored and
Space Team
committed
KLIB Loading, Native: Don't use CommonKlibResolver in Native tests
Use a new entry point instead: loadNativeKlibsInTestPipeline(). ^KT-65837
1 parent 3d0ee32 commit bfa35a1

File tree

4 files changed

+33
-67
lines changed

4 files changed

+33
-67
lines changed

compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt

Lines changed: 12 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,19 @@ import org.jetbrains.kotlin.analyzer.ModuleInfo
1212
import org.jetbrains.kotlin.analyzer.common.CommonDependenciesContainer
1313
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
1414
import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
15-
import org.jetbrains.kotlin.backend.common.CommonKLibResolver
1615
import org.jetbrains.kotlin.backend.common.reportLoadingProblemsIfAny
1716
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
1817
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
1918
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
2019
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
21-
import org.jetbrains.kotlin.cli.common.messages.getLogger
2220
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
2321
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForWasm
2422
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
2523
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
2624
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
2725
import org.jetbrains.kotlin.codegen.forTestCompile.TestCompilePaths.KOTLIN_MOCKJDK_RUNTIME_PATH
28-
import org.jetbrains.kotlin.config.CompilerConfiguration
29-
import org.jetbrains.kotlin.config.JVMConfigurationKeys
26+
import org.jetbrains.kotlin.config.*
3027
import org.jetbrains.kotlin.config.JVMConfigurationKeys.JVM_TARGET
31-
import org.jetbrains.kotlin.config.JvmTarget
32-
import org.jetbrains.kotlin.config.LanguageFeature
33-
import org.jetbrains.kotlin.config.languageVersionSettings
3428
import org.jetbrains.kotlin.container.get
3529
import org.jetbrains.kotlin.context.ModuleContext
3630
import org.jetbrains.kotlin.context.ProjectContext
@@ -84,6 +78,7 @@ import org.jetbrains.kotlin.test.services.*
8478
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
8579
import org.jetbrains.kotlin.test.services.configuration.NativeEnvironmentConfigurator
8680
import org.jetbrains.kotlin.test.services.configuration.getDependencies
81+
import org.jetbrains.kotlin.test.services.configuration.nativeEnvironmentConfigurator
8782
import org.jetbrains.kotlin.test.util.KtTestUtil
8883
import org.jetbrains.kotlin.utils.addToStdlib.runIf
8984
import org.jetbrains.kotlin.utils.closure
@@ -310,43 +305,6 @@ class ClassicFrontendFacade(
310305
}
311306
}
312307

313-
// TODO (KT-65837): This function is only used in Kotlin/Native. We shall use createModuleDescriptorsForKlibs() instead.
314-
private fun loadKlib(
315-
factories: KlibMetadataFactories,
316-
names: List<String>,
317-
configuration: CompilerConfiguration
318-
): List<ModuleDescriptor> {
319-
val resolvedLibraries = CommonKLibResolver.resolve(
320-
names,
321-
configuration.getLogger(treatWarningsAsErrors = true),
322-
knownIrProviders = listOf("kotlin.native.cinterop"), // FIXME use KonanLibraryProperResolver instead, as in production.
323-
).getFullResolvedList()
324-
325-
var builtInsModule: KotlinBuiltIns? = null
326-
val dependencies = mutableListOf<ModuleDescriptorImpl>()
327-
328-
return resolvedLibraries.map { resolvedLibrary ->
329-
testServices.libraryProvider.getOrCreateStdlibByPath(resolvedLibrary.library.libraryFile.absolutePath) {
330-
val storageManager = LockBasedStorageManager("ModulesStructure")
331-
val isBuiltIns = resolvedLibrary.library.isAnyPlatformStdlib
332-
333-
val moduleDescriptor = factories.DefaultDeserializedDescriptorFactory.createDescriptorOptionalBuiltIns(
334-
resolvedLibrary.library,
335-
configuration.languageVersionSettings,
336-
storageManager,
337-
builtInsModule,
338-
packageAccessHandler = null,
339-
lookupTracker = LookupTracker.DO_NOTHING
340-
)
341-
if (isBuiltIns) builtInsModule = moduleDescriptor.builtIns
342-
dependencies += moduleDescriptor
343-
moduleDescriptor.setDependencies(ArrayList(dependencies))
344-
345-
Pair(moduleDescriptor, resolvedLibrary.library)
346-
}
347-
}
348-
}
349-
350308
private fun performJsModuleResolve(
351309
module: TestModule,
352310
project: Project,
@@ -436,12 +394,19 @@ class ClassicFrontendFacade(
436394
val moduleTrace = NoScopeRecordCliBindingTrace(project)
437395
val runtimeKlibsNames = NativeEnvironmentConfigurator.getRuntimePathsForModule(module, testServices)
438396
val nativeFactories = KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer)
439-
val runtimeKlibs = loadKlib(nativeFactories, runtimeKlibsNames, configuration).mapNotNull { it as? ModuleDescriptorImpl }
440-
val stdlibBuiltInsModule = runtimeKlibs.single { it.name == Name.special("<stdlib>") }.builtIns.builtInsModule
397+
398+
val runtimeModuleDescriptors = createModuleDescriptorsForKlibs(
399+
libraryPaths = runtimeKlibsNames,
400+
klibPlatformChecker = KlibPlatformChecker.Native(testServices.nativeEnvironmentConfigurator.getNativeTarget(module).name),
401+
factories = nativeFactories,
402+
configuration = configuration,
403+
)
404+
405+
val stdlibBuiltInsModule = runtimeModuleDescriptors.single { it.name == Name.special("<stdlib>") }.builtIns.builtInsModule
441406

442407
val moduleContext = createModuleContext(
443408
module, project,
444-
dependencyDescriptors = dependencyDescriptors + runtimeKlibs,
409+
dependencyDescriptors = dependencyDescriptors + runtimeModuleDescriptors,
445410
friendsDescriptors = friendsDescriptors,
446411
dependsOnDescriptors = dependsOnDescriptors,
447412
capabilities = mapOf(

compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirNativeSessionFactory.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55

66
package org.jetbrains.kotlin.test.frontend.fir
77

8-
import org.jetbrains.kotlin.backend.common.CommonKLibResolver
9-
import org.jetbrains.kotlin.cli.common.messages.getLogger
8+
import org.jetbrains.kotlin.backend.konan.serialization.loadNativeKlibsInTestPipeline
109
import org.jetbrains.kotlin.config.CompilerConfiguration
1110
import org.jetbrains.kotlin.fir.FirSession
1211
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.test.services.configuration.NativeEnvironmentConfigu
1716
import org.jetbrains.kotlin.name.Name
1817
import org.jetbrains.kotlin.test.model.TestModule
1918
import org.jetbrains.kotlin.test.services.TestServices
19+
import org.jetbrains.kotlin.test.services.configuration.nativeEnvironmentConfigurator
2020

2121
object TestFirNativeSessionFactory {
2222
fun createLibrarySession(
@@ -28,11 +28,11 @@ object TestFirNativeSessionFactory {
2828
configuration: CompilerConfiguration,
2929
extensionRegistrars: List<FirExtensionRegistrar>,
3030
): FirSession {
31-
val resolvedLibraries = CommonKLibResolver.resolve(
32-
getAllNativeDependenciesPaths(module, testServices),
33-
configuration.getLogger(treatWarningsAsErrors = true),
34-
knownIrProviders = listOf("kotlin.native.cinterop"), // FIXME use KonanLibraryProperResolver instead, as in production.
35-
).getFullResolvedList().map { it.library }
31+
val libraries = loadNativeKlibsInTestPipeline(
32+
configuration = configuration,
33+
libraryPaths = getAllNativeDependenciesPaths(module, testServices),
34+
nativeTarget = testServices.nativeEnvironmentConfigurator.getNativeTarget(module),
35+
).all
3636

3737
val sharedLibrarySession = FirNativeSessionFactory.createSharedLibrarySession(
3838
mainModuleName,
@@ -42,7 +42,7 @@ object TestFirNativeSessionFactory {
4242
)
4343

4444
return FirNativeSessionFactory.createLibrarySession(
45-
resolvedLibraries,
45+
libraries,
4646
sessionProvider,
4747
sharedLibrarySession,
4848
moduleDataProvider,

native/native.tests/tests/org/jetbrains/kotlin/konan/test/Fir2IrNativeResultsConverter.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ class Fir2IrNativeResultsConverter(testServices: TestServices) : AbstractFir2IrR
106106

107107
companion object {
108108
/**
109-
* Unlike [org.jetbrains.kotlin.backend.common.CommonKLibResolver.resolve], which does not distinguish
110-
* "default" (i.e., [KotlinLibrary.isDefault]) from "non-default" libraries, this function does that kind of distinction:
109+
* Note: This function distinguishes "default" from "non-default" libraries:
111110
* - "default" libraries is anything implicitly added by the Kotlin/Native compiler. For example, stdlib & platform libraries.
112111
* - "non-default" libraries are the libraries that are explicitly passed to the compiler via compiler CLI arguments.
113112
* In tests, these are the libraries that were explicitly specified by `// MODULE` test directives in test data.

native/native.tests/tests/org/jetbrains/kotlin/konan/test/NativeKlibSerializerFacade.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,23 @@
55

66
package org.jetbrains.kotlin.konan.test
77

8-
import org.jetbrains.kotlin.backend.common.CommonKLibResolver
98
import org.jetbrains.kotlin.backend.common.klibAbiVersionForManifest
109
import org.jetbrains.kotlin.backend.common.serialization.IrSerializationSettings
1110
import org.jetbrains.kotlin.backend.common.serialization.SerializerOutput
1211
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataMonolithicSerializer
1312
import org.jetbrains.kotlin.backend.common.serialization.serializeModuleIntoKlib
1413
import org.jetbrains.kotlin.backend.konan.serialization.KonanIrModuleSerializer
14+
import org.jetbrains.kotlin.backend.konan.serialization.loadNativeKlibsInTestPipeline
1515
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
16-
import org.jetbrains.kotlin.cli.common.messages.getLogger
1716
import org.jetbrains.kotlin.config.*
1817
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
1918
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
2019
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
2120
import org.jetbrains.kotlin.incremental.components.LookupTracker
2221
import org.jetbrains.kotlin.ir.KtDiagnosticReporterWithImplicitIrBasedContext
23-
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
2422
import org.jetbrains.kotlin.konan.library.impl.buildLibrary
25-
import org.jetbrains.kotlin.library.*
23+
import org.jetbrains.kotlin.library.KotlinLibrary
24+
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
2625
import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
2726
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
2827
import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -32,7 +31,10 @@ import org.jetbrains.kotlin.test.directives.KlibBasedCompilerTestDirectives.SKIP
3231
import org.jetbrains.kotlin.test.frontend.classic.ModuleDescriptorProvider
3332
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
3433
import org.jetbrains.kotlin.test.frontend.fir.getAllNativeDependenciesPaths
35-
import org.jetbrains.kotlin.test.model.*
34+
import org.jetbrains.kotlin.test.model.ArtifactKinds
35+
import org.jetbrains.kotlin.test.model.BinaryArtifacts
36+
import org.jetbrains.kotlin.test.model.FrontendKinds
37+
import org.jetbrains.kotlin.test.model.TestModule
3638
import org.jetbrains.kotlin.test.services.*
3739
import org.jetbrains.kotlin.test.services.configuration.NativeEnvironmentConfigurator.Companion.getKlibArtifactFile
3840
import org.jetbrains.kotlin.test.services.configuration.nativeEnvironmentConfigurator
@@ -119,11 +121,11 @@ abstract class AbstractNativeKlibSerializerFacade(
119121

120122
val dependencyPaths = getAllNativeDependenciesPaths(module, testServices)
121123

122-
val library = CommonKLibResolver.resolve(
123-
libraries = dependencyPaths + outputArtifact.outputFile.path,
124-
logger = configuration.getLogger(treatWarningsAsErrors = true),
125-
knownIrProviders = listOf(KLIB_INTEROP_IR_PROVIDER_IDENTIFIER)
126-
).getFullResolvedList().last().library
124+
val library = loadNativeKlibsInTestPipeline(
125+
configuration = configuration,
126+
libraryPaths = listOf(outputArtifact.outputFile.path),
127+
nativeTarget = testServices.nativeEnvironmentConfigurator.getNativeTarget(module),
128+
).all.single()
127129

128130
val moduleDescriptor = nativeFactories.DefaultDeserializedDescriptorFactory.createDescriptorOptionalBuiltIns(
129131
library,

0 commit comments

Comments
 (0)