[Test] Use special test facade for IR actualization and IR plugins in all codegen configurations
Previously application of plugins was part of fir2ir conversion and ir actualization was the responsibility of each specific IR backend facade. Now (after moving IR extensions after IR actualization) those actions are extracted into separate facade for two purposes: 1. Avoid code duplication in backend facades 2. Step with this facade goes exactly after fir2ir conversion before irHandlersStep, which allows IR handlers to observe IR which was actualized and modified by extensions, which is quite useful ^KT-56173
This commit is contained in:
committed by
Space Team
parent
fd87d722c1
commit
e7a10057f2
+12
-9
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.test.backend.ir
|
package org.jetbrains.kotlin.test.backend.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
||||||
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
|
import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
@@ -16,33 +17,35 @@ 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
|
||||||
|
|
||||||
class ActualizerOnlyFacade(
|
class IrActualizerAndPluginsFacade(
|
||||||
val testServices: TestServices,
|
val testServices: TestServices,
|
||||||
) : AbstractTestFacade<IrBackendInput, IrBackendInput>() {
|
) : AbstractTestFacade<IrBackendInput, IrBackendInput>() {
|
||||||
override fun transform(module: TestModule, inputArtifact: IrBackendInput): IrBackendInput {
|
override fun transform(module: TestModule, inputArtifact: IrBackendInput): IrBackendInput {
|
||||||
if (module.useIrActualizer()) {
|
if (module.frontendKind != FrontendKinds.FIR) return inputArtifact
|
||||||
|
if (module.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) {
|
||||||
val builtins = inputArtifact.irModuleFragment.irBuiltins
|
val builtins = inputArtifact.irModuleFragment.irBuiltins
|
||||||
val typeSystemContext = when (module.targetPlatform.isJvm()) {
|
val typeSystemContext = when (module.targetPlatform.isJvm()) {
|
||||||
true -> JvmIrTypeSystemContext(builtins)
|
true -> JvmIrTypeSystemContext(builtins)
|
||||||
false -> IrTypeSystemContextImpl(builtins)
|
false -> IrTypeSystemContextImpl(builtins)
|
||||||
}
|
}
|
||||||
IrActualizer.actualize(
|
val result = IrActualizer.actualize(
|
||||||
inputArtifact.irModuleFragment,
|
inputArtifact.irModuleFragment,
|
||||||
inputArtifact.dependentIrModuleFragments,
|
inputArtifact.dependentIrModuleFragments,
|
||||||
inputArtifact.diagnosticReporter,
|
inputArtifact.diagnosticReporter,
|
||||||
typeSystemContext,
|
typeSystemContext,
|
||||||
testServices.compilerConfigurationProvider.getCompilerConfiguration(module).languageVersionSettings
|
testServices.compilerConfigurationProvider.getCompilerConfiguration(module).languageVersionSettings
|
||||||
)
|
)
|
||||||
inputArtifact.irPluginContext.applyIrGenerationExtensions(
|
inputArtifact.irActualizerResult = result
|
||||||
inputArtifact.irModuleFragment,
|
|
||||||
irGenerationExtensions = module.irGenerationExtensions(testServices)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
inputArtifact.irPluginContext.applyIrGenerationExtensions(
|
||||||
|
inputArtifact.irModuleFragment,
|
||||||
|
irGenerationExtensions = module.irGenerationExtensions(testServices)
|
||||||
|
)
|
||||||
return inputArtifact
|
return inputArtifact
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun TestModule.useIrActualizer(): Boolean {
|
private fun TestModule.irGenerationExtensions(testServices: TestServices): Collection<IrGenerationExtension> {
|
||||||
return frontendKind == FrontendKinds.FIR && languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)
|
return IrGenerationExtension.getInstances(testServices.compilerConfigurationProvider.getProject(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
override val inputKind: TestArtifactKind<IrBackendInput> = BackendKinds.IrBackend
|
override val inputKind: TestArtifactKind<IrBackendInput> = BackendKinds.IrBackend
|
||||||
+11
@@ -67,6 +67,14 @@ sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
|||||||
*/
|
*/
|
||||||
abstract val firMangler: FirMangler?
|
abstract val firMangler: FirMangler?
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Results of actualization, came from IrActulizer
|
||||||
|
*
|
||||||
|
* @see org.jetbrains.kotlin.backend.common.actualizer
|
||||||
|
* @see org.jetbrains.kotlin.test.backend.ir.IrActualizerAndPluginsFacade
|
||||||
|
*/
|
||||||
|
abstract var irActualizerResult: IrActualizedResult?
|
||||||
|
|
||||||
abstract val diagnosticReporter: BaseDiagnosticsCollector
|
abstract val diagnosticReporter: BaseDiagnosticsCollector
|
||||||
|
|
||||||
class JsIrBackendInput(
|
class JsIrBackendInput(
|
||||||
@@ -81,6 +89,7 @@ sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
|||||||
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
||||||
override val irMangler: KotlinMangler.IrMangler,
|
override val irMangler: KotlinMangler.IrMangler,
|
||||||
override val firMangler: FirMangler?,
|
override val firMangler: FirMangler?,
|
||||||
|
override var irActualizerResult: IrActualizedResult? = null,
|
||||||
val serializeSingleFile: (KtSourceFile, IrActualizedResult?) -> ProtoBuf.PackageFragment,
|
val serializeSingleFile: (KtSourceFile, IrActualizedResult?) -> ProtoBuf.PackageFragment,
|
||||||
) : IrBackendInput()
|
) : IrBackendInput()
|
||||||
|
|
||||||
@@ -96,6 +105,7 @@ sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
|||||||
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
||||||
override val irMangler: KotlinMangler.IrMangler,
|
override val irMangler: KotlinMangler.IrMangler,
|
||||||
override val firMangler: FirMangler?,
|
override val firMangler: FirMangler?,
|
||||||
|
override var irActualizerResult: IrActualizedResult? = null,
|
||||||
val serializeSingleFile: (KtSourceFile, IrActualizedResult?) -> ProtoBuf.PackageFragment,
|
val serializeSingleFile: (KtSourceFile, IrActualizedResult?) -> ProtoBuf.PackageFragment,
|
||||||
) : IrBackendInput()
|
) : IrBackendInput()
|
||||||
|
|
||||||
@@ -108,6 +118,7 @@ sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
|||||||
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
||||||
override val irMangler: KotlinMangler.IrMangler,
|
override val irMangler: KotlinMangler.IrMangler,
|
||||||
override val firMangler: FirMangler?,
|
override val firMangler: FirMangler?,
|
||||||
|
override var irActualizerResult: IrActualizedResult? = null,
|
||||||
) : IrBackendInput() {
|
) : IrBackendInput() {
|
||||||
override val irModuleFragment: IrModuleFragment
|
override val irModuleFragment: IrModuleFragment
|
||||||
get() = backendInput.irModuleFragment
|
get() = backendInput.irModuleFragment
|
||||||
|
|||||||
+4
-29
@@ -7,21 +7,19 @@ package org.jetbrains.kotlin.test.backend.ir
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.KtPsiSourceFile
|
import org.jetbrains.kotlin.KtPsiSourceFile
|
||||||
import org.jetbrains.kotlin.backend.common.BackendException
|
import org.jetbrains.kotlin.backend.common.BackendException
|
||||||
import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.MultifileFacadeFileEntry
|
import org.jetbrains.kotlin.backend.jvm.MultifileFacadeFileEntry
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.getFileClassInfoFromIrFile
|
import org.jetbrains.kotlin.backend.jvm.lower.getFileClassInfoFromIrFile
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
|
||||||
import org.jetbrains.kotlin.ir.PsiIrFileEntry
|
import org.jetbrains.kotlin.ir.PsiIrFileEntry
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.util.NaiveSourceBasedFileEntryImpl
|
import org.jetbrains.kotlin.ir.util.NaiveSourceBasedFileEntryImpl
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.backend.classic.JavaCompilerFacade
|
import org.jetbrains.kotlin.test.backend.classic.JavaCompilerFacade
|
||||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||||
import org.jetbrains.kotlin.test.model.*
|
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||||
|
import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
||||||
|
import org.jetbrains.kotlin.test.model.SourceFileInfo
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
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
|
||||||
|
|
||||||
@@ -37,21 +35,6 @@ class JvmIrBackendFacade(
|
|||||||
require(inputArtifact is IrBackendInput.JvmIrBackendInput) {
|
require(inputArtifact is IrBackendInput.JvmIrBackendInput) {
|
||||||
"JvmIrBackendFacade expects IrBackendInput.JvmIrBackendInput as input"
|
"JvmIrBackendFacade expects IrBackendInput.JvmIrBackendInput as input"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (module.useIrActualizer()) {
|
|
||||||
IrActualizer.actualize(
|
|
||||||
inputArtifact.irModuleFragment,
|
|
||||||
inputArtifact.dependentIrModuleFragments,
|
|
||||||
inputArtifact.state.diagnosticReporter,
|
|
||||||
JvmIrTypeSystemContext(inputArtifact.irModuleFragment.irBuiltins),
|
|
||||||
inputArtifact.state.languageVersionSettings
|
|
||||||
)
|
|
||||||
inputArtifact.irPluginContext.applyIrGenerationExtensions(
|
|
||||||
inputArtifact.irModuleFragment,
|
|
||||||
module.irGenerationExtensions(testServices)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val state = inputArtifact.state
|
val state = inputArtifact.state
|
||||||
try {
|
try {
|
||||||
inputArtifact.codegenFactory.generateModule(state, inputArtifact.backendInput)
|
inputArtifact.codegenFactory.generateModule(state, inputArtifact.backendInput)
|
||||||
@@ -97,11 +80,3 @@ class JvmIrBackendFacade(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun TestModule.useIrActualizer(): Boolean {
|
|
||||||
return frontendKind == FrontendKinds.FIR && languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun TestModule.irGenerationExtensions(testServices: TestServices): Collection<IrGenerationExtension> {
|
|
||||||
return IrGenerationExtension.getInstances(testServices.compilerConfigurationProvider.getProject(this))
|
|
||||||
}
|
|
||||||
|
|||||||
-9
@@ -42,8 +42,6 @@ import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
|||||||
import org.jetbrains.kotlin.library.unresolvedDependencies
|
import org.jetbrains.kotlin.library.unresolvedDependencies
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||||
import org.jetbrains.kotlin.test.backend.ir.irGenerationExtensions
|
|
||||||
import org.jetbrains.kotlin.test.backend.ir.useIrActualizer
|
|
||||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||||
import org.jetbrains.kotlin.test.model.BackendKinds
|
import org.jetbrains.kotlin.test.model.BackendKinds
|
||||||
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
|
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
|
||||||
@@ -156,13 +154,6 @@ class Fir2IrJsResultsConverter(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!module.useIrActualizer()) {
|
|
||||||
result.irPluginContext.applyIrGenerationExtensions(
|
|
||||||
result.irModuleFragment,
|
|
||||||
irGenerationExtensions = module.irGenerationExtensions(testServices)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-9
@@ -30,8 +30,6 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||||
import org.jetbrains.kotlin.test.backend.ir.irGenerationExtensions
|
|
||||||
import org.jetbrains.kotlin.test.backend.ir.useIrActualizer
|
|
||||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||||
import org.jetbrains.kotlin.test.model.BackendKinds
|
import org.jetbrains.kotlin.test.model.BackendKinds
|
||||||
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
|
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
|
||||||
@@ -140,13 +138,6 @@ class Fir2IrJvmResultsConverter(
|
|||||||
firMangler = commonMemberStorage.firSignatureComposer.mangler,
|
firMangler = commonMemberStorage.firSignatureComposer.mangler,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!module.useIrActualizer()) {
|
|
||||||
result.irPluginContext.applyIrGenerationExtensions(
|
|
||||||
backendInput.irModuleFragment,
|
|
||||||
irGenerationExtensions = module.irGenerationExtensions(testServices)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
|
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.test.*
|
import org.jetbrains.kotlin.test.*
|
||||||
import org.jetbrains.kotlin.test.backend.ir.ActualizerOnlyFacade
|
import org.jetbrains.kotlin.test.backend.ir.IrActualizerAndPluginsFacade
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrDiagnosticsHandler
|
import org.jetbrains.kotlin.test.backend.ir.IrDiagnosticsHandler
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
import org.jetbrains.kotlin.test.builders.configureFirHandlersStep
|
import org.jetbrains.kotlin.test.builders.configureFirHandlersStep
|
||||||
@@ -99,7 +99,7 @@ abstract class AbstractFirWithActualizerDiagnosticsTest(val parser: FirParser) :
|
|||||||
baseFirDiagnosticTestConfiguration()
|
baseFirDiagnosticTestConfiguration()
|
||||||
|
|
||||||
facadeStep(::Fir2IrResultsConverter)
|
facadeStep(::Fir2IrResultsConverter)
|
||||||
facadeStep(::ActualizerOnlyFacade)
|
facadeStep(::IrActualizerAndPluginsFacade)
|
||||||
irHandlersStep {
|
irHandlersStep {
|
||||||
useHandlers(
|
useHandlers(
|
||||||
::IrDiagnosticsHandler
|
::IrDiagnosticsHandler
|
||||||
|
|||||||
+6
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.test.builders.configureFirHandlersStep
|
|||||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
|
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
|
||||||
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB
|
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB
|
||||||
import org.jetbrains.kotlin.test.FirParser
|
import org.jetbrains.kotlin.test.FirParser
|
||||||
|
import org.jetbrains.kotlin.test.backend.ir.IrDiagnosticsHandler
|
||||||
|
import org.jetbrains.kotlin.test.builders.configureIrHandlersStep
|
||||||
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
|
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.configureFirParser
|
import org.jetbrains.kotlin.test.directives.configureFirParser
|
||||||
import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter
|
import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter
|
||||||
@@ -65,6 +67,10 @@ abstract class AbstractFirBlackBoxCodegenTestBase(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
configureIrHandlersStep {
|
||||||
|
useHandlers(::IrDiagnosticsHandler)
|
||||||
|
}
|
||||||
|
|
||||||
useAfterAnalysisCheckers(
|
useAfterAnalysisCheckers(
|
||||||
::FirMetaInfoDiffSuppressor
|
::FirMetaInfoDiffSuppressor
|
||||||
)
|
)
|
||||||
|
|||||||
+9
@@ -11,7 +11,9 @@ import org.jetbrains.kotlin.test.Constructor
|
|||||||
import org.jetbrains.kotlin.test.HandlersStepBuilder
|
import org.jetbrains.kotlin.test.HandlersStepBuilder
|
||||||
import org.jetbrains.kotlin.test.TestJdkKind
|
import org.jetbrains.kotlin.test.TestJdkKind
|
||||||
import org.jetbrains.kotlin.test.backend.handlers.*
|
import org.jetbrains.kotlin.test.backend.handlers.*
|
||||||
|
import org.jetbrains.kotlin.test.backend.ir.IrActualizerAndPluginsFacade
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||||
|
import org.jetbrains.kotlin.test.backend.ir.IrDiagnosticsHandler
|
||||||
import org.jetbrains.kotlin.test.builders.*
|
import org.jetbrains.kotlin.test.builders.*
|
||||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_SMAP
|
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_SMAP
|
||||||
@@ -39,6 +41,7 @@ fun <F : ResultingArtifact.FrontendOutput<F>, B : ResultingArtifact.BackendInput
|
|||||||
classicFrontendHandlersStep()
|
classicFrontendHandlersStep()
|
||||||
firHandlersStep()
|
firHandlersStep()
|
||||||
facadeStep(frontendToBackendConverter)
|
facadeStep(frontendToBackendConverter)
|
||||||
|
actualizersAndPluginsFacadeStepIfNeeded(targetFrontend)
|
||||||
irHandlersStep(init = {})
|
irHandlersStep(init = {})
|
||||||
facadeStep(backendFacade)
|
facadeStep(backendFacade)
|
||||||
jvmArtifactsHandlersStep(init = {})
|
jvmArtifactsHandlersStep(init = {})
|
||||||
@@ -194,6 +197,12 @@ fun HandlersStepBuilder<BinaryArtifacts.Jvm>.inlineHandlers() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun TestConfigurationBuilder.actualizersAndPluginsFacadeStepIfNeeded(targetFrontend: FrontendKind<*>) {
|
||||||
|
if (targetFrontend == FrontendKinds.FIR) {
|
||||||
|
facadeStep(::IrActualizerAndPluginsFacade)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun TestConfigurationBuilder.configureModernJavaTest(jdkKind: TestJdkKind, jvmTarget: JvmTarget) {
|
fun TestConfigurationBuilder.configureModernJavaTest(jdkKind: TestJdkKind, jvmTarget: JvmTarget) {
|
||||||
defaultDirectives {
|
defaultDirectives {
|
||||||
JvmEnvironmentConfigurationDirectives.JDK_KIND with jdkKind
|
JvmEnvironmentConfigurationDirectives.JDK_KIND with jdkKind
|
||||||
|
|||||||
@@ -6,18 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.js.test.converters
|
package org.jetbrains.kotlin.js.test.converters
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.CommonKLibResolver
|
import org.jetbrains.kotlin.backend.common.CommonKLibResolver
|
||||||
import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
|
||||||
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||||
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
||||||
import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib
|
import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib
|
||||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
|
||||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||||
import org.jetbrains.kotlin.js.test.utils.JsIrIncrementalDataProvider
|
import org.jetbrains.kotlin.js.test.utils.JsIrIncrementalDataProvider
|
||||||
import org.jetbrains.kotlin.js.test.utils.jsIrIncrementalDataProvider
|
import org.jetbrains.kotlin.js.test.utils.jsIrIncrementalDataProvider
|
||||||
@@ -25,14 +20,12 @@ import org.jetbrains.kotlin.library.KotlinAbiVersion
|
|||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendFacade
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendFacade
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||||
import org.jetbrains.kotlin.test.backend.ir.irGenerationExtensions
|
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.ModuleDescriptorProvider
|
import org.jetbrains.kotlin.test.frontend.classic.ModuleDescriptorProvider
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
|
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
|
||||||
import org.jetbrains.kotlin.test.frontend.fir.getAllJsDependenciesPaths
|
import org.jetbrains.kotlin.test.frontend.fir.getAllJsDependenciesPaths
|
||||||
import org.jetbrains.kotlin.test.frontend.fir.resolveLibraries
|
import org.jetbrains.kotlin.test.frontend.fir.resolveLibraries
|
||||||
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||||
import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
||||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
|
||||||
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
|
||||||
@@ -64,28 +57,7 @@ class FirJsKlibBackendFacade(
|
|||||||
// 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))
|
||||||
|
|
||||||
// TODO: find out how to pass diagnostics to the test infra in this case
|
|
||||||
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
|
|
||||||
|
|
||||||
if (firstTimeCompilation) {
|
if (firstTimeCompilation) {
|
||||||
val irActualizedResult =
|
|
||||||
if (module.frontendKind == FrontendKinds.FIR && module.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) {
|
|
||||||
IrActualizer.actualize(
|
|
||||||
inputArtifact.irModuleFragment,
|
|
||||||
inputArtifact.dependentIrModuleFragments,
|
|
||||||
diagnosticReporter,
|
|
||||||
IrTypeSystemContextImpl(inputArtifact.irModuleFragment.irBuiltins),
|
|
||||||
configuration.languageVersionSettings
|
|
||||||
).also {
|
|
||||||
inputArtifact.irPluginContext.applyIrGenerationExtensions(
|
|
||||||
inputArtifact.irModuleFragment,
|
|
||||||
irGenerationExtensions = module.irGenerationExtensions(testServices)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
serializeModuleIntoKlib(
|
serializeModuleIntoKlib(
|
||||||
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
|
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
|
||||||
configuration,
|
configuration,
|
||||||
@@ -102,7 +74,7 @@ class FirJsKlibBackendFacade(
|
|||||||
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
||||||
jsOutputName = null
|
jsOutputName = null
|
||||||
) {
|
) {
|
||||||
inputArtifact.serializeSingleFile(it, irActualizedResult)
|
inputArtifact.serializeSingleFile(it, inputArtifact.irActualizerResult)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class JsKlibBackendFacade(
|
|||||||
override val additionalServices: List<ServiceRegistrationData>
|
override val additionalServices: List<ServiceRegistrationData>
|
||||||
get() = listOf(service(::JsIrIncrementalDataProvider))
|
get() = listOf(service(::JsIrIncrementalDataProvider))
|
||||||
|
|
||||||
constructor(testServices: TestServices): this(testServices, firstTimeCompilation = true)
|
constructor(testServices: TestServices) : this(testServices, firstTimeCompilation = true)
|
||||||
|
|
||||||
override fun shouldRunAnalysis(module: TestModule): Boolean {
|
override fun shouldRunAnalysis(module: TestModule): Boolean {
|
||||||
return module.backendKind == inputKind
|
return module.backendKind == inputKind
|
||||||
@@ -63,7 +63,7 @@ class JsKlibBackendFacade(
|
|||||||
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
||||||
jsOutputName = null
|
jsOutputName = null
|
||||||
) {
|
) {
|
||||||
inputArtifact.serializeSingleFile(it, null)
|
inputArtifact.serializeSingleFile(it, inputArtifact.irActualizerResult)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHan
|
|||||||
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
|
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
|
||||||
import org.jetbrains.kotlin.test.model.*
|
import org.jetbrains.kotlin.test.model.*
|
||||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
||||||
|
import org.jetbrains.kotlin.test.runners.codegen.actualizersAndPluginsFacadeStepIfNeeded
|
||||||
import org.jetbrains.kotlin.test.runners.codegen.commonClassicFrontendHandlersForCodegenTest
|
import org.jetbrains.kotlin.test.runners.codegen.commonClassicFrontendHandlersForCodegenTest
|
||||||
import org.jetbrains.kotlin.test.services.LibraryProvider
|
import org.jetbrains.kotlin.test.services.LibraryProvider
|
||||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||||
@@ -154,6 +155,7 @@ fun <
|
|||||||
}
|
}
|
||||||
|
|
||||||
facadeStep(frontendToBackendConverter)
|
facadeStep(frontendToBackendConverter)
|
||||||
|
actualizersAndPluginsFacadeStepIfNeeded(targetFrontend)
|
||||||
irHandlersStep()
|
irHandlersStep()
|
||||||
|
|
||||||
facadeStep(backendFacade)
|
facadeStep(backendFacade)
|
||||||
|
|||||||
+2
-2
@@ -19,9 +19,9 @@ import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHan
|
|||||||
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
|
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
|
||||||
import org.jetbrains.kotlin.test.model.*
|
import org.jetbrains.kotlin.test.model.*
|
||||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
||||||
|
import org.jetbrains.kotlin.test.runners.codegen.actualizersAndPluginsFacadeStepIfNeeded
|
||||||
import org.jetbrains.kotlin.test.runners.codegen.commonClassicFrontendHandlersForCodegenTest
|
import org.jetbrains.kotlin.test.runners.codegen.commonClassicFrontendHandlersForCodegenTest
|
||||||
import org.jetbrains.kotlin.test.services.LibraryProvider
|
import org.jetbrains.kotlin.test.services.LibraryProvider
|
||||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
|
||||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||||
import org.jetbrains.kotlin.wasm.test.handlers.WasmBoxRunner
|
import org.jetbrains.kotlin.wasm.test.handlers.WasmBoxRunner
|
||||||
@@ -90,7 +90,7 @@ abstract class AbstractWasmBlackBoxCodegenTestBase<R : ResultingArtifact.Fronten
|
|||||||
|
|
||||||
facadeStep(frontendToBackendConverter)
|
facadeStep(frontendToBackendConverter)
|
||||||
irHandlersStep()
|
irHandlersStep()
|
||||||
|
actualizersAndPluginsFacadeStepIfNeeded(targetFrontend)
|
||||||
facadeStep(backendFacade)
|
facadeStep(backendFacade)
|
||||||
klibArtifactsHandlersStep()
|
klibArtifactsHandlersStep()
|
||||||
facadeStep(afterBackendFacade)
|
facadeStep(afterBackendFacade)
|
||||||
|
|||||||
+1
-29
@@ -6,31 +6,24 @@
|
|||||||
package org.jetbrains.kotlin.wasm.test.converters
|
package org.jetbrains.kotlin.wasm.test.converters
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.CommonKLibResolver
|
import org.jetbrains.kotlin.backend.common.CommonKLibResolver
|
||||||
import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
|
||||||
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||||
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
||||||
import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib
|
import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib
|
||||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
|
||||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendFacade
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendFacade
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||||
import org.jetbrains.kotlin.test.backend.ir.irGenerationExtensions
|
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.ModuleDescriptorProvider
|
import org.jetbrains.kotlin.test.frontend.classic.ModuleDescriptorProvider
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
|
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
|
||||||
import org.jetbrains.kotlin.test.frontend.fir.getAllWasmDependenciesPaths
|
import org.jetbrains.kotlin.test.frontend.fir.getAllWasmDependenciesPaths
|
||||||
import org.jetbrains.kotlin.test.frontend.fir.resolveLibraries
|
import org.jetbrains.kotlin.test.frontend.fir.resolveLibraries
|
||||||
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||||
import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
||||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
|
||||||
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
|
||||||
@@ -61,28 +54,7 @@ class FirWasmKlibBackendFacade(
|
|||||||
// TODO: consider avoiding repeated libraries resolution
|
// TODO: consider avoiding repeated libraries resolution
|
||||||
val libraries = resolveLibraries(configuration, getAllWasmDependenciesPaths(module, testServices))
|
val libraries = resolveLibraries(configuration, getAllWasmDependenciesPaths(module, testServices))
|
||||||
|
|
||||||
// TODO: find out how to pass diagnostics to the test infra in this case
|
|
||||||
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
|
|
||||||
|
|
||||||
if (firstTimeCompilation) {
|
if (firstTimeCompilation) {
|
||||||
val irActualizedResult =
|
|
||||||
if (module.frontendKind == FrontendKinds.FIR && module.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) {
|
|
||||||
IrActualizer.actualize(
|
|
||||||
inputArtifact.irModuleFragment,
|
|
||||||
inputArtifact.dependentIrModuleFragments,
|
|
||||||
diagnosticReporter,
|
|
||||||
IrTypeSystemContextImpl(inputArtifact.irModuleFragment.irBuiltins),
|
|
||||||
configuration.languageVersionSettings
|
|
||||||
).also {
|
|
||||||
inputArtifact.irPluginContext.applyIrGenerationExtensions(
|
|
||||||
inputArtifact.irModuleFragment,
|
|
||||||
irGenerationExtensions = module.irGenerationExtensions(testServices)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
serializeModuleIntoKlib(
|
serializeModuleIntoKlib(
|
||||||
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
|
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
|
||||||
configuration,
|
configuration,
|
||||||
@@ -99,7 +71,7 @@ class FirWasmKlibBackendFacade(
|
|||||||
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
||||||
jsOutputName = null
|
jsOutputName = null
|
||||||
) {
|
) {
|
||||||
inputArtifact.serializeSingleFile(it, irActualizedResult)
|
inputArtifact.serializeSingleFile(it, inputArtifact.irActualizerResult)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user