[FIR2IR] De-duplicate creation of Fir2IrConfiguration

This will help to prevent inconsistencies between creating
the configuration in the actual compiler pipeline and in compiler tests.
This commit is contained in:
Sergej Jaskiewicz
2023-12-13 15:50:17 +01:00
committed by Space Team
parent 4d4c95b643
commit a0ba878b1d
10 changed files with 88 additions and 88 deletions
@@ -247,7 +247,7 @@ object CodegenTestDirectives : SimpleDirectivesContainer() {
val ENABLE_IR_FAKE_OVERRIDE_GENERATION by directive(
description = """
Enables fake-override generation in FIR2IR using IR f/o generator. KT-61514
Enables fake-override generation in FIR2IR using IR f/o generator on JVM. KT-61514
""".trimIndent()
)
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.library.unresolvedDependencies
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
import org.jetbrains.kotlin.test.model.FrontendKinds
@@ -67,24 +68,6 @@ abstract class AbstractFir2IrNonJvmResultsConverter(
}
}
private fun createFir2IrConfiguration(
module: TestModule,
configuration: CompilerConfiguration,
diagnosticReporter: BaseDiagnosticsCollector
): Fir2IrConfiguration {
return Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
diagnosticReporter = diagnosticReporter,
linkViaSignatures = true,
evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = null,
expectActualTracker = configuration[CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER],
allowNonCachedDeclarations = false,
useIrFakeOverrideBuilder = module.shouldUseIrFakeOverrideBuilder()
)
}
private fun transformInternal(
module: TestModule,
inputArtifact: FirOutputArtifact
@@ -99,7 +82,12 @@ abstract class AbstractFir2IrNonJvmResultsConverter(
val libraries = resolveLibraries(module, compilerConfiguration)
val (dependencies, builtIns) = loadResolvedLibraries(libraries, compilerConfiguration.languageVersionSettings, testServices)
val fir2IrConfiguration = createFir2IrConfiguration(module, compilerConfiguration, diagnosticReporter)
val fir2IrConfiguration = Fir2IrConfiguration.forKlibCompilation(
compilerConfiguration,
diagnosticReporter,
// FIXME(KT-64809): This is for irText tests. Remove this when we stop building signatures from FIR entirely.
linkViaSignatures = LanguageSettingsDirectives.LINK_VIA_SIGNATURES in module.directives,
)
val fir2irResult = inputArtifact.toFirResult().convertToIrAndActualize(
Fir2IrExtensions.Default,
fir2IrConfiguration,
@@ -83,17 +83,7 @@ class Fir2IrJvmResultsConverter(
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
val compilerConfiguration = compilerConfigurationProvider.getCompilerConfiguration(module)
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = module.languageVersionSettings,
diagnosticReporter = diagnosticReporter,
linkViaSignatures = compilerConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
evaluatedConstTracker = compilerConfiguration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = compilerConfiguration[CommonConfigurationKeys.INLINE_CONST_TRACKER],
expectActualTracker = compilerConfiguration[CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER],
allowNonCachedDeclarations = false,
useIrFakeOverrideBuilder = module.shouldUseIrFakeOverrideBuilder(),
)
val fir2IrConfiguration = Fir2IrConfiguration.forJvmCompilation(compilerConfiguration, diagnosticReporter)
val fir2irResult = inputArtifact.toFirResult().convertToIrAndActualize(
fir2IrExtensions,
@@ -10,17 +10,12 @@ import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.isJs
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices
fun TestModule.shouldUseIrFakeOverrideBuilder(): Boolean {
return !targetPlatform.isJvm() || CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in directives
}
class Fir2IrResultsConverter(
testServices: TestServices
) : Frontend2BackendConverter<FirOutputArtifact, IrBackendInput>(
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.platform.konan.isNative
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.TestInfrastructureInternals
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.model.TestModule
@@ -129,6 +130,11 @@ fun createCompilerConfiguration(module: TestModule, configurators: List<Abstract
val configuration = CompilerConfiguration()
configuration[CommonConfigurationKeys.MODULE_NAME] = module.name
if (module.targetPlatform.isJvm() && CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in module.directives) {
// For non-JVM platforms, the IR-based fake override builder is enabled unconditionally; on JVM it must be enabled manually.
configuration.put(CommonConfigurationKeys.USE_IR_FAKE_OVERRIDE_BUILDER, true)
}
if (JsEnvironmentConfigurationDirectives.GENERATE_STRICT_IMPLICIT_EXPORT in module.directives) {
configuration.put(JSConfigurationKeys.GENERATE_STRICT_IMPLICIT_EXPORT, true)
}