[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
@@ -6,18 +6,13 @@
|
||||
package org.jetbrains.kotlin.js.test.converters
|
||||
|
||||
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.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
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.ir.backend.js.JsFactories
|
||||
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
||||
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.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.test.backend.ir.IrBackendFacade
|
||||
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.fir.getAllJsDependenciesPaths
|
||||
import org.jetbrains.kotlin.test.frontend.fir.resolveLibraries
|
||||
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||
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.services.*
|
||||
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
||||
@@ -64,28 +57,7 @@ class FirJsKlibBackendFacade(
|
||||
// TODO: consider avoiding repeated libraries resolution
|
||||
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) {
|
||||
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(
|
||||
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
|
||||
configuration,
|
||||
@@ -102,7 +74,7 @@ class FirJsKlibBackendFacade(
|
||||
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
||||
jsOutputName = null
|
||||
) {
|
||||
inputArtifact.serializeSingleFile(it, irActualizedResult)
|
||||
inputArtifact.serializeSingleFile(it, inputArtifact.irActualizerResult)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ class JsKlibBackendFacade(
|
||||
override val additionalServices: List<ServiceRegistrationData>
|
||||
get() = listOf(service(::JsIrIncrementalDataProvider))
|
||||
|
||||
constructor(testServices: TestServices): this(testServices, firstTimeCompilation = true)
|
||||
constructor(testServices: TestServices) : this(testServices, firstTimeCompilation = true)
|
||||
|
||||
override fun shouldRunAnalysis(module: TestModule): Boolean {
|
||||
return module.backendKind == inputKind
|
||||
@@ -63,7 +63,7 @@ class JsKlibBackendFacade(
|
||||
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
||||
jsOutputName = null
|
||||
) {
|
||||
inputArtifact.serializeSingleFile(it, null)
|
||||
inputArtifact.serializeSingleFile(it, inputArtifact.irActualizerResult)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,4 +91,4 @@ class JsKlibBackendFacade(
|
||||
|
||||
return BinaryArtifacts.KLib(File(outputFile))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.model.*
|
||||
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.services.LibraryProvider
|
||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||
@@ -154,6 +155,7 @@ fun <
|
||||
}
|
||||
|
||||
facadeStep(frontendToBackendConverter)
|
||||
actualizersAndPluginsFacadeStepIfNeeded(targetFrontend)
|
||||
irHandlersStep()
|
||||
|
||||
facadeStep(backendFacade)
|
||||
|
||||
Reference in New Issue
Block a user