[Test] Unify work with KLIB artifact paths and dependencies
Unify functions from `JsEnvironmentConfigurator` and `WasmEnvironmentConfigurator` that do the same logic. Make this logic also be available for `NativeEnvironmentConfigurator`: - get*ArtifactSimpleName() - get*KlibArtifactPath() - get*KlibOutputDir() - getAllRecursiveLibrariesFor() - getAllRecursiveDependenciesFor() - getAllDependenciesMappingFor() - getKlibDependencies() This would allow to have the same logic in one place, and also reuse it in `IrBackendFacade`s to be implemented for Native. ^KT-65117
This commit is contained in:
committed by
Space Team
parent
7e9e064748
commit
f204293e4d
+2
-52
@@ -13,12 +13,9 @@ import org.jetbrains.kotlin.config.AnalysisFlags.allowFullyQualifiedNameInKClass
|
|||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode
|
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode
|
||||||
import org.jetbrains.kotlin.js.config.*
|
import org.jetbrains.kotlin.js.config.*
|
||||||
import org.jetbrains.kotlin.js.facade.MainCallParameters
|
import org.jetbrains.kotlin.js.facade.MainCallParameters
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
|
||||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||||
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||||
@@ -37,11 +34,9 @@ import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives
|
|||||||
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.TYPED_ARRAYS
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.TYPED_ARRAYS
|
||||||
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||||
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
|
|
||||||
import org.jetbrains.kotlin.test.model.*
|
import org.jetbrains.kotlin.test.model.*
|
||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
import org.jetbrains.kotlin.test.util.joinToArrayString
|
import org.jetbrains.kotlin.test.util.joinToArrayString
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
|
|
||||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -49,7 +44,7 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
|
|||||||
override val directiveContainers: List<DirectivesContainer>
|
override val directiveContainers: List<DirectivesContainer>
|
||||||
get() = listOf(JsEnvironmentConfigurationDirectives)
|
get() = listOf(JsEnvironmentConfigurationDirectives)
|
||||||
|
|
||||||
companion object {
|
companion object : KlibBasedEnvironmentConfiguratorUtils {
|
||||||
const val TEST_DATA_DIR_PATH = "js/js.translator/testData"
|
const val TEST_DATA_DIR_PATH = "js/js.translator/testData"
|
||||||
const val OLD_MODULE_SUFFIX = "_old"
|
const val OLD_MODULE_SUFFIX = "_old"
|
||||||
|
|
||||||
@@ -63,7 +58,6 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
|
|||||||
TranslationMode.PER_FILE_PROD_MINIMIZED_NAMES to "outPfMin"
|
TranslationMode.PER_FILE_PROD_MINIMIZED_NAMES to "outPfMin"
|
||||||
)
|
)
|
||||||
|
|
||||||
private const val OUTPUT_KLIB_DIR_NAME = "outputKlibDir"
|
|
||||||
private const val MINIFICATION_OUTPUT_DIR_NAME = "minOutputDir"
|
private const val MINIFICATION_OUTPUT_DIR_NAME = "minOutputDir"
|
||||||
|
|
||||||
object ExceptionThrowingReporter : JsConfig.Reporter() {
|
object ExceptionThrowingReporter : JsConfig.Reporter() {
|
||||||
@@ -81,12 +75,6 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getJsArtifactSimpleName(testServices: TestServices, moduleName: String): String {
|
|
||||||
val testName = testServices.testInfo.methodName.removePrefix("test").decapitalizeAsciiOnly()
|
|
||||||
val outputFileSuffix = if (moduleName == ModuleStructureExtractor.DEFAULT_MODULE_NAME) "" else "-$moduleName"
|
|
||||||
return testName + outputFileSuffix
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getJsModuleArtifactPath(testServices: TestServices, moduleName: String, translationMode: TranslationMode = TranslationMode.FULL_DEV): String {
|
fun getJsModuleArtifactPath(testServices: TestServices, moduleName: String, translationMode: TranslationMode = TranslationMode.FULL_DEV): String {
|
||||||
return getJsArtifactsOutputDir(testServices, translationMode).absolutePath + File.separator + getJsModuleArtifactName(testServices, moduleName)
|
return getJsArtifactsOutputDir(testServices, translationMode).absolutePath + File.separator + getJsModuleArtifactName(testServices, moduleName)
|
||||||
}
|
}
|
||||||
@@ -96,11 +84,7 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getJsModuleArtifactName(testServices: TestServices, moduleName: String): String {
|
fun getJsModuleArtifactName(testServices: TestServices, moduleName: String): String {
|
||||||
return getJsArtifactSimpleName(testServices, moduleName) + "_v5"
|
return getKlibArtifactSimpleName(testServices, moduleName) + "_v5"
|
||||||
}
|
|
||||||
|
|
||||||
fun getJsKlibArtifactPath(testServices: TestServices, moduleName: String): String {
|
|
||||||
return getJsKlibOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getJsArtifactsOutputDir(testServices: TestServices, translationMode: TranslationMode = TranslationMode.FULL_DEV): File {
|
fun getJsArtifactsOutputDir(testServices: TestServices, translationMode: TranslationMode = TranslationMode.FULL_DEV): File {
|
||||||
@@ -111,10 +95,6 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
|
|||||||
return testServices.temporaryDirectoryManager.getOrCreateTempDirectory(outputDirByMode[translationMode]!! + "-recompiled")
|
return testServices.temporaryDirectoryManager.getOrCreateTempDirectory(outputDirByMode[translationMode]!! + "-recompiled")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getJsKlibOutputDir(testServices: TestServices): File {
|
|
||||||
return testServices.temporaryDirectoryManager.getOrCreateTempDirectory(OUTPUT_KLIB_DIR_NAME)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getMinificationJsArtifactsOutputDir(testServices: TestServices): File {
|
fun getMinificationJsArtifactsOutputDir(testServices: TestServices): File {
|
||||||
return testServices.temporaryDirectoryManager.getOrCreateTempDirectory(MINIFICATION_OUTPUT_DIR_NAME)
|
return testServices.temporaryDirectoryManager.getOrCreateTempDirectory(MINIFICATION_OUTPUT_DIR_NAME)
|
||||||
}
|
}
|
||||||
@@ -182,36 +162,6 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAllRecursiveDependenciesFor(module: TestModule, testServices: TestServices): Set<ModuleDescriptorImpl> {
|
|
||||||
val visited = mutableSetOf<ModuleDescriptorImpl>()
|
|
||||||
fun getRecursive(descriptor: ModuleDescriptor) {
|
|
||||||
descriptor.allDependencyModules.forEach {
|
|
||||||
if (it is ModuleDescriptorImpl && it !in visited) {
|
|
||||||
visited += it
|
|
||||||
getRecursive(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getRecursive(testServices.moduleDescriptorProvider.getModuleDescriptor(module))
|
|
||||||
return visited
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getAllRecursiveLibrariesFor(module: TestModule, testServices: TestServices): Map<KotlinLibrary, ModuleDescriptorImpl> {
|
|
||||||
val dependencies = getAllRecursiveDependenciesFor(module, testServices)
|
|
||||||
return dependencies.associateBy { testServices.libraryProvider.getCompiledLibraryByDescriptor(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getAllDependenciesMappingFor(module: TestModule, testServices: TestServices): Map<KotlinLibrary, List<KotlinLibrary>> {
|
|
||||||
val allRecursiveLibraries: Map<KotlinLibrary, ModuleDescriptor> = getAllRecursiveLibrariesFor(module, testServices)
|
|
||||||
val m2l = allRecursiveLibraries.map { it.value to it.key }.toMap()
|
|
||||||
|
|
||||||
return allRecursiveLibraries.keys.associateWith { m ->
|
|
||||||
val descriptor = allRecursiveLibraries[m] ?: error("No descriptor found for library ${m.libraryName}")
|
|
||||||
descriptor.allDependencyModules.filter { it != descriptor }.map { m2l.getValue(it) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun TestModule.hasFilesToRecompile(): Boolean {
|
fun TestModule.hasFilesToRecompile(): Boolean {
|
||||||
return files.any { JsEnvironmentConfigurationDirectives.RECOMPILE in it.directives }
|
return files.any { JsEnvironmentConfigurationDirectives.RECOMPILE in it.directives }
|
||||||
}
|
}
|
||||||
|
|||||||
+89
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 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.test.services.configuration
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
|
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
|
||||||
|
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
import org.jetbrains.kotlin.test.services.*
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
interface KlibBasedEnvironmentConfiguratorUtils {
|
||||||
|
fun getKlibArtifactSimpleName(testServices: TestServices, moduleName: String): String {
|
||||||
|
val testName = testServices.testInfo.methodName.removePrefix("test").decapitalizeAsciiOnly()
|
||||||
|
val outputFileSuffix = if (moduleName == ModuleStructureExtractor.DEFAULT_MODULE_NAME) "" else "-$moduleName"
|
||||||
|
return testName + outputFileSuffix
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getKlibArtifactFile(testServices: TestServices, moduleName: String): File {
|
||||||
|
return getKlibOutputDir(testServices).resolve(getKlibArtifactSimpleName(testServices, moduleName))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getKlibOutputDir(testServices: TestServices): File {
|
||||||
|
return testServices.temporaryDirectoryManager.getOrCreateTempDirectory(OUTPUT_KLIB_DIR_NAME)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getAllRecursiveLibrariesFor(module: TestModule, testServices: TestServices): Map<KotlinLibrary, ModuleDescriptorImpl> {
|
||||||
|
val dependencies = getAllRecursiveDependenciesFor(module, testServices)
|
||||||
|
return dependencies.associateBy { testServices.libraryProvider.getCompiledLibraryByDescriptor(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getAllRecursiveDependenciesFor(module: TestModule, testServices: TestServices): Set<ModuleDescriptorImpl> {
|
||||||
|
val visited = mutableSetOf<ModuleDescriptorImpl>()
|
||||||
|
fun getRecursive(descriptor: ModuleDescriptor) {
|
||||||
|
descriptor.allDependencyModules.forEach {
|
||||||
|
if (it is ModuleDescriptorImpl && it !in visited) {
|
||||||
|
visited += it
|
||||||
|
getRecursive(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getRecursive(testServices.moduleDescriptorProvider.getModuleDescriptor(module))
|
||||||
|
return visited
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getAllDependenciesMappingFor(module: TestModule, testServices: TestServices): Map<KotlinLibrary, List<KotlinLibrary>> {
|
||||||
|
val allRecursiveLibraries: Map<KotlinLibrary, ModuleDescriptor> = getAllRecursiveLibrariesFor(module, testServices)
|
||||||
|
val m2l = allRecursiveLibraries.map { it.value to it.key }.toMap()
|
||||||
|
|
||||||
|
return allRecursiveLibraries.keys.associateWith { m ->
|
||||||
|
val descriptor = allRecursiveLibraries[m] ?: error("No descriptor found for library ${m.libraryName}")
|
||||||
|
descriptor.allDependencyModules.filter { it != descriptor }.map { m2l.getValue(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getKlibDependencies(module: TestModule, testServices: TestServices, kind: DependencyRelation): List<File> {
|
||||||
|
val visited = mutableSetOf<TestModule>()
|
||||||
|
fun getRecursive(module: TestModule, relation: DependencyRelation) {
|
||||||
|
val dependencies = if (relation == DependencyRelation.FriendDependency) {
|
||||||
|
module.friendDependencies
|
||||||
|
} else {
|
||||||
|
module.regularDependencies
|
||||||
|
}
|
||||||
|
dependencies
|
||||||
|
.filter { it.kind != DependencyKind.Source }
|
||||||
|
.map { testServices.dependencyProvider.getTestModule(it.moduleName) }.forEach {
|
||||||
|
if (it !in visited) {
|
||||||
|
visited += it
|
||||||
|
getRecursive(it, relation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getRecursive(module, kind)
|
||||||
|
return visited.map { testServices.dependencyProvider.getArtifact(it, ArtifactKinds.KLib).outputFile }
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val OUTPUT_KLIB_DIR_NAME = "outputKlibDir"
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.test.services.runtimeClasspathProviders
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class NativeEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
|
class NativeEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
|
||||||
companion object {
|
companion object : KlibBasedEnvironmentConfiguratorUtils {
|
||||||
private val nativeHome
|
private val nativeHome
|
||||||
get() = System.getProperty("kotlin.internal.native.test.nativeHome")
|
get() = System.getProperty("kotlin.internal.native.test.nativeHome")
|
||||||
?: error("No nativeHome provided. Are you sure the test are executed within :native:native.tests?")
|
?: error("No nativeHome provided. Are you sure the test are executed within :native:native.tests?")
|
||||||
|
|||||||
+1
-75
@@ -11,11 +11,9 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
|||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding
|
import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding
|
||||||
import org.jetbrains.kotlin.js.config.WasmTarget
|
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
|
||||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||||
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.INFER_MAIN_MODULE
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.INFER_MAIN_MODULE
|
||||||
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.PROPERTY_LAZY_INITIALIZATION
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.PROPERTY_LAZY_INITIALIZATION
|
||||||
@@ -24,7 +22,6 @@ import org.jetbrains.kotlin.test.directives.WasmEnvironmentConfigurationDirectiv
|
|||||||
import org.jetbrains.kotlin.test.directives.WasmEnvironmentConfigurationDirectives.DISABLE_WASM_EXCEPTION_HANDLING
|
import org.jetbrains.kotlin.test.directives.WasmEnvironmentConfigurationDirectives.DISABLE_WASM_EXCEPTION_HANDLING
|
||||||
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||||
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
|
|
||||||
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||||
import org.jetbrains.kotlin.test.model.DependencyKind
|
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||||
import org.jetbrains.kotlin.test.model.DependencyRelation
|
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||||
@@ -50,9 +47,7 @@ abstract class WasmEnvironmentConfigurator(testServices: TestServices) : Environ
|
|||||||
override val directiveContainers: List<DirectivesContainer>
|
override val directiveContainers: List<DirectivesContainer>
|
||||||
get() = listOf(WasmEnvironmentConfigurationDirectives)
|
get() = listOf(WasmEnvironmentConfigurationDirectives)
|
||||||
|
|
||||||
companion object {
|
companion object : KlibBasedEnvironmentConfiguratorUtils {
|
||||||
private const val OUTPUT_KLIB_DIR_NAME = "outputKlibDir"
|
|
||||||
|
|
||||||
fun getRuntimePathsForModule(target: WasmTarget): List<String> {
|
fun getRuntimePathsForModule(target: WasmTarget): List<String> {
|
||||||
val suffix = when (target) {
|
val suffix = when (target) {
|
||||||
WasmTarget.JS -> "-js"
|
WasmTarget.JS -> "-js"
|
||||||
@@ -62,75 +57,6 @@ abstract class WasmEnvironmentConfigurator(testServices: TestServices) : Environ
|
|||||||
return listOf(System.getProperty("kotlin.wasm$suffix.stdlib.path")!!, System.getProperty("kotlin.wasm$suffix.kotlin.test.path")!!)
|
return listOf(System.getProperty("kotlin.wasm$suffix.stdlib.path")!!, System.getProperty("kotlin.wasm$suffix.kotlin.test.path")!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getKlibDependencies(module: TestModule, testServices: TestServices, kind: DependencyRelation): List<File> {
|
|
||||||
val visited = mutableSetOf<TestModule>()
|
|
||||||
fun getRecursive(module: TestModule, relation: DependencyRelation) {
|
|
||||||
val dependencies = if (relation == DependencyRelation.FriendDependency) {
|
|
||||||
module.friendDependencies
|
|
||||||
} else {
|
|
||||||
module.regularDependencies
|
|
||||||
}
|
|
||||||
dependencies
|
|
||||||
.filter { it.kind != DependencyKind.Source }
|
|
||||||
.map { testServices.dependencyProvider.getTestModule(it.moduleName) }.forEach {
|
|
||||||
if (it !in visited) {
|
|
||||||
visited += it
|
|
||||||
getRecursive(it, relation)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getRecursive(module, kind)
|
|
||||||
return visited.map { testServices.dependencyProvider.getArtifact(it, ArtifactKinds.KLib).outputFile }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getDependencies(module: TestModule, testServices: TestServices, kind: DependencyRelation): List<ModuleDescriptor> {
|
|
||||||
return getKlibDependencies(module, testServices, kind)
|
|
||||||
.map { testServices.libraryProvider.getDescriptorByPath(it.absolutePath) }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fun getWasmKlibArtifactPath(testServices: TestServices, moduleName: String): String {
|
|
||||||
return getWasmKlibOutputDir(testServices).absolutePath + File.separator + JsEnvironmentConfigurator.getJsArtifactSimpleName(
|
|
||||||
testServices,
|
|
||||||
moduleName
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getWasmKlibOutputDir(testServices: TestServices): File {
|
|
||||||
return testServices.temporaryDirectoryManager.getOrCreateTempDirectory(OUTPUT_KLIB_DIR_NAME)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getAllRecursiveDependenciesFor(module: TestModule, testServices: TestServices): Set<ModuleDescriptorImpl> {
|
|
||||||
val visited = mutableSetOf<ModuleDescriptorImpl>()
|
|
||||||
fun getRecursive(descriptor: ModuleDescriptor) {
|
|
||||||
descriptor.allDependencyModules.forEach {
|
|
||||||
if (it is ModuleDescriptorImpl && it !in visited) {
|
|
||||||
visited += it
|
|
||||||
getRecursive(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getRecursive(testServices.moduleDescriptorProvider.getModuleDescriptor(module))
|
|
||||||
return visited
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getAllRecursiveLibrariesFor(module: TestModule, testServices: TestServices): Map<KotlinLibrary, ModuleDescriptorImpl> {
|
|
||||||
val dependencies = getAllRecursiveDependenciesFor(module, testServices)
|
|
||||||
return dependencies.associateBy { testServices.libraryProvider.getCompiledLibraryByDescriptor(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getAllDependenciesMappingFor(module: TestModule, testServices: TestServices): Map<KotlinLibrary, List<KotlinLibrary>> {
|
|
||||||
val allRecursiveLibraries: Map<KotlinLibrary, ModuleDescriptor> =
|
|
||||||
getAllRecursiveLibrariesFor(module, testServices)
|
|
||||||
val m2l = allRecursiveLibraries.map { it.value to it.key }.toMap()
|
|
||||||
|
|
||||||
return allRecursiveLibraries.keys.associateWith { m ->
|
|
||||||
val descriptor = allRecursiveLibraries[m] ?: error("No descriptor found for library ${m.libraryName}")
|
|
||||||
descriptor.allDependencyModules.filter { it != descriptor }.map { m2l.getValue(it) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getMainModule(testServices: TestServices): TestModule {
|
fun getMainModule(testServices: TestServices): TestModule {
|
||||||
val modules = testServices.moduleStructure.modules
|
val modules = testServices.moduleStructure.modules
|
||||||
val inferMainModule = INFER_MAIN_MODULE in testServices.moduleStructure.allDirectives
|
val inferMainModule = INFER_MAIN_MODULE in testServices.moduleStructure.allDirectives
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.test.model.TestModule
|
|||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
class FirJsKlibBackendFacade(
|
class FirJsKlibBackendFacade(
|
||||||
testServices: TestServices,
|
testServices: TestServices,
|
||||||
@@ -51,7 +50,7 @@ class FirJsKlibBackendFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||||
val outputFile = JsEnvironmentConfigurator.getJsKlibArtifactPath(testServices, module.name)
|
val outputFile = JsEnvironmentConfigurator.getKlibArtifactFile(testServices, module.name)
|
||||||
|
|
||||||
// TODO: consider avoiding repeated libraries resolution
|
// TODO: consider avoiding repeated libraries resolution
|
||||||
val libraries = resolveLibraries(configuration, getAllJsDependenciesPaths(module, testServices))
|
val libraries = resolveLibraries(configuration, getAllJsDependenciesPaths(module, testServices))
|
||||||
@@ -62,7 +61,7 @@ class FirJsKlibBackendFacade(
|
|||||||
configuration,
|
configuration,
|
||||||
inputArtifact.diagnosticReporter,
|
inputArtifact.diagnosticReporter,
|
||||||
inputArtifact.metadataSerializer,
|
inputArtifact.metadataSerializer,
|
||||||
klibPath = outputFile,
|
klibPath = outputFile.path,
|
||||||
libraries.map { it.library },
|
libraries.map { it.library },
|
||||||
inputArtifact.irModuleFragment,
|
inputArtifact.irModuleFragment,
|
||||||
cleanFiles = inputArtifact.icData,
|
cleanFiles = inputArtifact.icData,
|
||||||
@@ -76,7 +75,7 @@ class FirJsKlibBackendFacade(
|
|||||||
|
|
||||||
// TODO: consider avoiding repeated libraries resolution
|
// TODO: consider avoiding repeated libraries resolution
|
||||||
val lib = CommonKLibResolver.resolve(
|
val lib = CommonKLibResolver.resolve(
|
||||||
getAllJsDependenciesPaths(module, testServices) + listOf(outputFile),
|
getAllJsDependenciesPaths(module, testServices) + listOf(outputFile.path),
|
||||||
configuration.getLogger(treatWarningsAsErrors = true)
|
configuration.getLogger(treatWarningsAsErrors = true)
|
||||||
).getFullResolvedList().last().library
|
).getFullResolvedList().last().library
|
||||||
|
|
||||||
@@ -97,8 +96,8 @@ class FirJsKlibBackendFacade(
|
|||||||
if (JsEnvironmentConfigurator.incrementalEnabled(testServices)) {
|
if (JsEnvironmentConfigurator.incrementalEnabled(testServices)) {
|
||||||
testServices.jsIrIncrementalDataProvider.recordIncrementalData(module, lib)
|
testServices.jsIrIncrementalDataProvider.recordIncrementalData(module, lib)
|
||||||
}
|
}
|
||||||
testServices.libraryProvider.setDescriptorAndLibraryByName(outputFile, moduleDescriptor, lib)
|
testServices.libraryProvider.setDescriptorAndLibraryByName(outputFile.path, moduleDescriptor, lib)
|
||||||
|
|
||||||
return BinaryArtifacts.KLib(File(outputFile), inputArtifact.diagnosticReporter)
|
return BinaryArtifacts.KLib(outputFile, inputArtifact.diagnosticReporter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import org.jetbrains.kotlin.test.model.*
|
|||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.compilerConfigurationProvider
|
import org.jetbrains.kotlin.test.services.compilerConfigurationProvider
|
||||||
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator.Companion.getJsArtifactSimpleName
|
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator.Companion.getJsModuleArtifactName
|
||||||
import org.jetbrains.kotlin.test.services.configuration.getDependencies
|
import org.jetbrains.kotlin.test.services.configuration.getDependencies
|
||||||
import org.jetbrains.kotlin.test.services.libraryProvider
|
import org.jetbrains.kotlin.test.services.libraryProvider
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||||
@@ -127,7 +127,7 @@ class JsIrBackendFacade(
|
|||||||
val phaseConfig = if (debugMode >= DebugMode.SUPER_DEBUG) {
|
val phaseConfig = if (debugMode >= DebugMode.SUPER_DEBUG) {
|
||||||
val dumpOutputDir = File(
|
val dumpOutputDir = File(
|
||||||
JsEnvironmentConfigurator.getJsArtifactsOutputDir(testServices),
|
JsEnvironmentConfigurator.getJsArtifactsOutputDir(testServices),
|
||||||
JsEnvironmentConfigurator.getJsArtifactSimpleName(testServices, module.name) + "-irdump"
|
JsEnvironmentConfigurator.getKlibArtifactSimpleName(testServices, module.name) + "-irdump"
|
||||||
)
|
)
|
||||||
PhaseConfig(
|
PhaseConfig(
|
||||||
jsPhases,
|
jsPhases,
|
||||||
@@ -181,7 +181,7 @@ class JsIrBackendFacade(
|
|||||||
loweredIr.context,
|
loweredIr.context,
|
||||||
moduleToName = runIf(isEsModules) {
|
moduleToName = runIf(isEsModules) {
|
||||||
loweredIr.allModules.associateWith {
|
loweredIr.allModules.associateWith {
|
||||||
"./${getJsArtifactSimpleName(testServices, it.safeName)}_v5".minifyIfNeed()
|
"./${getJsModuleArtifactName(testServices, it.safeName)}".minifyIfNeed()
|
||||||
}
|
}
|
||||||
} ?: emptyMap(),
|
} ?: emptyMap(),
|
||||||
shouldReferMainFunction,
|
shouldReferMainFunction,
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
|||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
class JsKlibBackendFacade(
|
class JsKlibBackendFacade(
|
||||||
testServices: TestServices,
|
testServices: TestServices,
|
||||||
@@ -44,7 +43,7 @@ class JsKlibBackendFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||||
val outputFile = JsEnvironmentConfigurator.getJsKlibArtifactPath(testServices, module.name)
|
val outputFile = JsEnvironmentConfigurator.getKlibArtifactFile(testServices, module.name)
|
||||||
|
|
||||||
if (firstTimeCompilation) {
|
if (firstTimeCompilation) {
|
||||||
serializeModuleIntoKlib(
|
serializeModuleIntoKlib(
|
||||||
@@ -52,7 +51,7 @@ class JsKlibBackendFacade(
|
|||||||
configuration,
|
configuration,
|
||||||
inputArtifact.diagnosticReporter,
|
inputArtifact.diagnosticReporter,
|
||||||
inputArtifact.metadataSerializer,
|
inputArtifact.metadataSerializer,
|
||||||
klibPath = outputFile,
|
klibPath = outputFile.path,
|
||||||
JsEnvironmentConfigurator.getAllRecursiveLibrariesFor(module, testServices).keys.toList(),
|
JsEnvironmentConfigurator.getAllRecursiveLibrariesFor(module, testServices).keys.toList(),
|
||||||
inputArtifact.irModuleFragment,
|
inputArtifact.irModuleFragment,
|
||||||
cleanFiles = inputArtifact.icData,
|
cleanFiles = inputArtifact.icData,
|
||||||
@@ -66,7 +65,7 @@ class JsKlibBackendFacade(
|
|||||||
|
|
||||||
val dependencies = JsEnvironmentConfigurator.getAllRecursiveDependenciesFor(module, testServices).toList()
|
val dependencies = JsEnvironmentConfigurator.getAllRecursiveDependenciesFor(module, testServices).toList()
|
||||||
val lib = CommonKLibResolver.resolve(
|
val lib = CommonKLibResolver.resolve(
|
||||||
dependencies.map { testServices.libraryProvider.getPathByDescriptor(it) } + listOf(outputFile),
|
dependencies.map { testServices.libraryProvider.getPathByDescriptor(it) } + listOf(outputFile.path),
|
||||||
configuration.getLogger(treatWarningsAsErrors = true)
|
configuration.getLogger(treatWarningsAsErrors = true)
|
||||||
).getFullResolvedList().last().library
|
).getFullResolvedList().last().library
|
||||||
|
|
||||||
@@ -84,8 +83,8 @@ class JsKlibBackendFacade(
|
|||||||
if (JsEnvironmentConfigurator.incrementalEnabled(testServices)) {
|
if (JsEnvironmentConfigurator.incrementalEnabled(testServices)) {
|
||||||
testServices.jsIrIncrementalDataProvider.recordIncrementalData(module, lib)
|
testServices.jsIrIncrementalDataProvider.recordIncrementalData(module, lib)
|
||||||
}
|
}
|
||||||
testServices.libraryProvider.setDescriptorAndLibraryByName(outputFile, moduleDescriptor, lib)
|
testServices.libraryProvider.setDescriptorAndLibraryByName(outputFile.path, moduleDescriptor, lib)
|
||||||
|
|
||||||
return BinaryArtifacts.KLib(File(outputFile), inputArtifact.diagnosticReporter)
|
return BinaryArtifacts.KLib(outputFile, inputArtifact.diagnosticReporter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,8 +57,8 @@ class JsIrIncrementalDataProvider(private val testServices: TestServices) : Test
|
|||||||
fun getCaches() = icCache.map { it.value.fetchArtifacts() }
|
fun getCaches() = icCache.map { it.value.fetchArtifacts() }
|
||||||
|
|
||||||
fun getCacheForModule(module: TestModule): Map<String, ByteArray> {
|
fun getCacheForModule(module: TestModule): Map<String, ByteArray> {
|
||||||
val path = JsEnvironmentConfigurator.getJsKlibArtifactPath(testServices, module.name)
|
val path = JsEnvironmentConfigurator.getKlibArtifactFile(testServices, module.name)
|
||||||
val canonicalPath = File(path).canonicalPath
|
val canonicalPath = path.canonicalPath
|
||||||
val moduleCache = icCache[canonicalPath] ?: error("No cache found for $path")
|
val moduleCache = icCache[canonicalPath] ?: error("No cache found for $path")
|
||||||
|
|
||||||
val oldBinaryAsts = mutableMapOf<String, ByteArray>()
|
val oldBinaryAsts = mutableMapOf<String, ByteArray>()
|
||||||
@@ -94,7 +94,7 @@ class JsIrIncrementalDataProvider(private val testServices: TestServices) : Test
|
|||||||
recordIncrementalDataForRuntimeKlib(module)
|
recordIncrementalDataForRuntimeKlib(module)
|
||||||
|
|
||||||
val dirtyFiles = module.files.map { "/${it.relativePath}" }
|
val dirtyFiles = module.files.map { "/${it.relativePath}" }
|
||||||
val path = JsEnvironmentConfigurator.getJsKlibArtifactPath(testServices, module.name)
|
val path = JsEnvironmentConfigurator.getKlibArtifactFile(testServices, module.name).path
|
||||||
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||||
|
|
||||||
val mainArguments = JsEnvironmentConfigurator.getMainCallParametersForModule(module)
|
val mainArguments = JsEnvironmentConfigurator.getMainCallParametersForModule(module)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import java.io.File
|
|||||||
const val MODULE_EMULATION_FILE = "${JsEnvironmentConfigurator.TEST_DATA_DIR_PATH}/moduleEmulation.js"
|
const val MODULE_EMULATION_FILE = "${JsEnvironmentConfigurator.TEST_DATA_DIR_PATH}/moduleEmulation.js"
|
||||||
|
|
||||||
fun TestModule.getNameFor(filePath: String, testServices: TestServices): String {
|
fun TestModule.getNameFor(filePath: String, testServices: TestServices): String {
|
||||||
return JsEnvironmentConfigurator.getJsArtifactSimpleName(testServices, name) + "-js-" + filePath
|
return JsEnvironmentConfigurator.getKlibArtifactSimpleName(testServices, name) + "-js-" + filePath
|
||||||
}
|
}
|
||||||
|
|
||||||
fun TestModule.getNameFor(file: TestFile, testServices: TestServices): String {
|
fun TestModule.getNameFor(file: TestFile, testServices: TestServices): String {
|
||||||
|
|||||||
+5
-6
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
|||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
class FirWasmKlibBackendFacade(
|
class FirWasmKlibBackendFacade(
|
||||||
testServices: TestServices,
|
testServices: TestServices,
|
||||||
@@ -50,7 +49,7 @@ class FirWasmKlibBackendFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||||
val outputFile = WasmEnvironmentConfigurator.getWasmKlibArtifactPath(testServices, module.name)
|
val outputFile = WasmEnvironmentConfigurator.getKlibArtifactFile(testServices, module.name)
|
||||||
|
|
||||||
// TODO: consider avoiding repeated libraries resolution
|
// TODO: consider avoiding repeated libraries resolution
|
||||||
val target = configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS)
|
val target = configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS)
|
||||||
@@ -62,7 +61,7 @@ class FirWasmKlibBackendFacade(
|
|||||||
configuration,
|
configuration,
|
||||||
inputArtifact.diagnosticReporter,
|
inputArtifact.diagnosticReporter,
|
||||||
inputArtifact.metadataSerializer,
|
inputArtifact.metadataSerializer,
|
||||||
klibPath = outputFile,
|
klibPath = outputFile.path,
|
||||||
libraries.map { it.library },
|
libraries.map { it.library },
|
||||||
inputArtifact.irModuleFragment,
|
inputArtifact.irModuleFragment,
|
||||||
cleanFiles = inputArtifact.icData,
|
cleanFiles = inputArtifact.icData,
|
||||||
@@ -76,7 +75,7 @@ class FirWasmKlibBackendFacade(
|
|||||||
|
|
||||||
// TODO: consider avoiding repeated libraries resolution
|
// TODO: consider avoiding repeated libraries resolution
|
||||||
val lib = CommonKLibResolver.resolve(
|
val lib = CommonKLibResolver.resolve(
|
||||||
getAllWasmDependenciesPaths(module, testServices, target) + listOf(outputFile),
|
getAllWasmDependenciesPaths(module, testServices, target) + listOf(outputFile.path),
|
||||||
configuration.getLogger(treatWarningsAsErrors = true)
|
configuration.getLogger(treatWarningsAsErrors = true)
|
||||||
).getFullResolvedList().last().library
|
).getFullResolvedList().last().library
|
||||||
|
|
||||||
@@ -94,8 +93,8 @@ class FirWasmKlibBackendFacade(
|
|||||||
)
|
)
|
||||||
|
|
||||||
testServices.moduleDescriptorProvider.replaceModuleDescriptorForModule(module, moduleDescriptor)
|
testServices.moduleDescriptorProvider.replaceModuleDescriptorForModule(module, moduleDescriptor)
|
||||||
testServices.libraryProvider.setDescriptorAndLibraryByName(outputFile, moduleDescriptor, lib)
|
testServices.libraryProvider.setDescriptorAndLibraryByName(outputFile.path, moduleDescriptor, lib)
|
||||||
|
|
||||||
return BinaryArtifacts.KLib(File(outputFile), inputArtifact.diagnosticReporter)
|
return BinaryArtifacts.KLib(outputFile, inputArtifact.diagnosticReporter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user