diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt index bd964c8d369..fd36051ff60 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt @@ -316,12 +316,8 @@ class ClassicFrontendFacade( ): AnalysisResult { val runtimeKlibsNames = JsEnvironmentConfigurator.getStdlibPathsForModule(module) val runtimeKlibs = loadKlib(runtimeKlibsNames, configuration) - val transitiveLibraries = configuration[JSConfigurationKeys.TRANSITIVE_LIBRARIES]!!.map { - testServices.jsLibraryProvider.getDescriptorByPath(File(it).absolutePath.replace("_v5.meta.js", "").replace("outputDir", "outputKlibDir")) - } - val friendLibraries = configuration[JSConfigurationKeys.FRIEND_PATHS]!!.map { - testServices.jsLibraryProvider.getDescriptorByPath(File(it).absolutePath.replace("_v5.meta.js", "").replace("outputDir", "outputKlibDir")) - } + val transitiveLibraries = JsEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.RegularDependency) + val friendLibraries = JsEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.FriendDependency) val allDependencies = runtimeKlibs + dependentDescriptors + transitiveLibraries val analyzer = AnalyzerWithCompilerReport(configuration) diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JsEnvironmentConfigurator.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JsEnvironmentConfigurator.kt index eeb58ecc85e..8ce4326e190 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JsEnvironmentConfigurator.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JsEnvironmentConfigurator.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.js.config.* import org.jetbrains.kotlin.js.facade.MainCallParameters @@ -22,15 +21,17 @@ import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.directives.ConfigurationDirectives import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives +import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.ERROR_POLICY +import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.EXPECT_ACTUAL_LINKER import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.MODULE_KIND import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.NO_INLINE -import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.ERROR_POLICY import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.SOURCE_MAP_EMBED_SOURCES -import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.EXPECT_ACTUAL_LINKER import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.TYPED_ARRAYS import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider +import org.jetbrains.kotlin.test.model.ArtifactKinds import org.jetbrains.kotlin.test.model.DependencyDescription +import org.jetbrains.kotlin.test.model.DependencyRelation import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.util.joinToArrayString @@ -72,19 +73,19 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu } fun getJsModuleArtifactPath(testServices: TestServices, moduleName: String): String { - return getJsArtifactsOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName) + "_v5" + return getJsArtifactsOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName) + "_v5" } fun getJsKlibArtifactPath(testServices: TestServices, moduleName: String): String { - return getJsKlibOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName) + return getJsKlibOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName) } fun getDceJsArtifactPath(testServices: TestServices, moduleName: String): String { - return getDceJsArtifactsOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName) + "_v5" + return getDceJsArtifactsOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName) + "_v5" } fun getPirJsArtifactPath(testServices: TestServices, moduleName: String): String { - return getPirJsArtifactsOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName) + "_v5" + return getPirJsArtifactsOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName) + "_v5" } fun getJsArtifactsOutputDir(testServices: TestServices): File { @@ -150,6 +151,23 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu return names.map { System.getProperty("kotlin.js.$it.path") } } + fun getDependencies(module: TestModule, testServices: TestServices, kind: DependencyRelation): List { + val visited = mutableSetOf() + fun getRecursive(module: TestModule, kind: DependencyRelation) { + val dependencies = if (kind == DependencyRelation.FriendDependency) module.friendDependencies else module.regularDependencies + dependencies.map { testServices.dependencyProvider.getTestModule(it.moduleName) }.forEach { + if (it !in visited) { + visited += it + getRecursive(it, kind) + } + } + } + getRecursive(module, kind) + return visited + .map { testServices.dependencyProvider.getArtifact(it, ArtifactKinds.KLib).outputFile } + .map { testServices.jsLibraryProvider.getDescriptorByPath(it.absolutePath) } + } + fun getMainCallParametersForModule(module: TestModule): MainCallParameters { return when (JsEnvironmentConfigurationDirectives.CALL_MAIN) { in module.directives -> MainCallParameters.mainWithArguments(listOf()) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/testNew/converters/JsIrBackendFacade.kt b/js/js.tests/test/org/jetbrains/kotlin/js/testNew/converters/JsIrBackendFacade.kt index 1de1d27d20d..90bebaf779d 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/testNew/converters/JsIrBackendFacade.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/testNew/converters/JsIrBackendFacade.kt @@ -34,10 +34,7 @@ import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider -import org.jetbrains.kotlin.test.model.AbstractTestFacade -import org.jetbrains.kotlin.test.model.ArtifactKinds -import org.jetbrains.kotlin.test.model.BinaryArtifacts -import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.model.* import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull @@ -181,14 +178,8 @@ class JsIrBackendFacade( val moduleDescriptor = testServices.moduleDescriptorProvider.getModuleDescriptor(module) val mainModuleLib = testServices.jsLibraryProvider.getCompiledLibraryByDescriptor(moduleDescriptor) - val friendLibraries = configuration[JSConfigurationKeys.FRIEND_PATHS]!!.map { - val descriptor = testServices.jsLibraryProvider.getDescriptorByPath( - File(it).absolutePath - .replace("_v5.meta.js", "") - .replace("outputDir", "outputKlibDir") - ) - testServices.jsLibraryProvider.getCompiledLibraryByDescriptor(descriptor) - } + val friendLibraries = JsEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.FriendDependency) + .map { testServices.jsLibraryProvider.getCompiledLibraryByDescriptor(it) } val friendModules = mapOf(mainModuleLib.uniqueName to friendLibraries.map { it.uniqueName }) return getIrModuleInfoForKlib(