[PL] Commonize Native & JS compiler configuration keys

This commit is contained in:
Dmitriy Dolovov
2023-03-20 12:45:00 +01:00
committed by Space Team
parent 831611d577
commit a450866db3
14 changed files with 70 additions and 65 deletions
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.DescriptorlessExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.types.*
@@ -409,7 +410,7 @@ class JsIrBackendContext(
}
override val partialLinkageSupport = createPartialLinkageSupportForLowerings(
isEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false,
isEnabled = configuration.partialLinkageConfig.isEnabled,
irBuiltIns,
configuration.irMessageLogger
)
@@ -23,10 +23,10 @@ import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
import org.jetbrains.kotlin.ir.declarations.IrFactory
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.descriptors.IrDescriptorBasedFunctionFactory
import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.irMessageLogger
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.uniqueName
import org.jetbrains.kotlin.library.unresolvedDependencies
@@ -108,7 +108,7 @@ internal class JsIrLinkerLoader(
val moduleDescriptor = loadedModules.keys.last()
val typeTranslator = TypeTranslatorImpl(symbolTable, compilerConfiguration.languageVersionSettings, moduleDescriptor)
val irBuiltIns = IrBuiltInsOverDescriptors(moduleDescriptor.builtIns, typeTranslator, symbolTable)
val partialLinkageEnabled = compilerConfiguration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false
val partialLinkageEnabled = compilerConfiguration.partialLinkageConfig.isEnabled
val linker = JsIrLinker(
currentModule = null,
messageLogger = compilerConfiguration.irMessageLogger,
@@ -0,0 +1,42 @@
/*
* Copyright 2010-2023 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.ir.linkage.partial
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey
data class PartialLinkageConfig(val isEnabled: Boolean, val logLevel: PartialLinkageLogLevel) {
companion object {
val DEFAULT = PartialLinkageConfig(false, PartialLinkageLogLevel.ERROR)
val KEY = CompilerConfigurationKey.create<PartialLinkageConfig>("partial linkage configuration")
}
}
enum class PartialLinkageLogLevel {
INFO, WARNING, ERROR;
companion object {
val DEFAULT = WARNING
fun resolveLogLevel(key: String): PartialLinkageLogLevel =
values().firstOrNull { entry -> entry.name.equals(key, ignoreCase = true) }
?: error("Unknown partial linkage compile-time log level '$key'")
}
}
val CompilerConfiguration.partialLinkageConfig: PartialLinkageConfig
get() = this[PartialLinkageConfig.KEY] ?: PartialLinkageConfig.DEFAULT
fun CompilerConfiguration.setupPartialLinkageConfig(isEnabled: Boolean, logLevel: String?) {
setupPartialLinkageConfig(
PartialLinkageConfig(isEnabled, logLevel?.let(PartialLinkageLogLevel::resolveLogLevel) ?: PartialLinkageLogLevel.DEFAULT)
)
}
fun CompilerConfiguration.setupPartialLinkageConfig(config: PartialLinkageConfig) {
this.put(PartialLinkageConfig.KEY, config)
}
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.ir.declarations.IrFactory
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.descriptors.IrDescriptorBasedFunctionFactory
import org.jetbrains.kotlin.ir.linkage.IrDeserializer
import org.jetbrains.kotlin.ir.linkage.partial.partialLinkageConfig
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.acceptVoid
@@ -198,7 +199,7 @@ fun loadIr(
val allDependencies = depsDescriptors.allDependencies
val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT
val messageLogger = configuration.irMessageLogger
val partialLinkageEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false
val partialLinkageEnabled = configuration.partialLinkageConfig.isEnabled
val signaturer = IdSignatureDescriptor(JsManglerDesc)
val symbolTable = SymbolTable(signaturer, irFactory)
@@ -261,7 +262,7 @@ fun getIrModuleInfoForKlib(
val typeTranslator = TypeTranslatorImpl(symbolTable, configuration.languageVersionSettings, moduleDescriptor)
val irBuiltIns = IrBuiltInsOverDescriptors(moduleDescriptor.builtIns, typeTranslator, symbolTable)
val partialLinkageEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false
val partialLinkageEnabled = configuration.partialLinkageConfig.isEnabled
val irLinker = JsIrLinker(
currentModule = null,
@@ -321,7 +322,7 @@ fun getIrModuleInfoForSourceFiles(
JsIrLinker.JsFePluginContext(moduleDescriptor, symbolTable, typeTranslator, irBuiltIns)
}
val partialLinkageEnabled = configuration[JSConfigurationKeys.PARTIAL_LINKAGE] ?: false
val partialLinkageEnabled = configuration.partialLinkageConfig.isEnabled
val irLinker = JsIrLinker(
currentModule = psi2IrContext.moduleDescriptor,