IR: a flag to GeneratorExtensions to control IR deserialization

There is no need to search for IR embedded in toplevel classes when none
is expected (in npon-JVM backends or when -Xserialize-ir is not set).
This commit is contained in:
Georgy Bronnikov
2021-05-26 00:21:16 +03:00
committed by TeamCityServer
parent ec1c97c684
commit 1c4466951f
5 changed files with 17 additions and 7 deletions
@@ -306,7 +306,10 @@ object KotlinToJVMBytecodeCompiler {
)
.codegenFactory(
if (configuration.getBoolean(JVMConfigurationKeys.IR)) JvmIrCodegenFactory(
configuration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jvmPhases)
configuration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jvmPhases),
jvmGeneratorExtensions = JvmGeneratorExtensionsImpl(
irDeserializationEnabled = configuration.getBoolean(JVMConfigurationKeys.SERIALIZE_IR)
)
) else DefaultCodegenFactory
)
.withModule(module)
@@ -31,8 +31,6 @@ import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.constructors
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
@@ -61,7 +59,10 @@ import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
open class JvmGeneratorExtensionsImpl(private val generateFacades: Boolean = true) : GeneratorExtensions(), JvmGeneratorExtensions {
open class JvmGeneratorExtensionsImpl(
private val generateFacades: Boolean = true,
override val irDeserializationEnabled: Boolean = false,
) : GeneratorExtensions(), JvmGeneratorExtensions {
override val classNameOverride: MutableMap<IrClass, JvmClassName> = mutableMapOf()
override val samConversion: SamConversion
@@ -109,6 +109,7 @@ class IrLazyFunction(
get() = (descriptor as? DescriptorWithContainerSource)?.containerSource
private fun tryLoadIr(): Boolean {
if (!stubGenerator.extensions.irDeserializationEnabled) return false
if (!isInline || isFakeOverride) return false
val toplevel = getToplevel()
return (toplevel as? DeserializableClass)?.loadIr() ?: false
@@ -7,11 +7,9 @@ package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import org.jetbrains.kotlin.types.KotlinType
@@ -57,6 +55,8 @@ open class StubGeneratorExtensions {
companion object Instance : EnhancedNullability()
}
open val irDeserializationEnabled: Boolean = false
open val flexibleNullabilityAnnotationConstructor: IrConstructor?
get() = null
@@ -6,11 +6,13 @@
package org.jetbrains.kotlin.test.frontend.classic
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
import org.jetbrains.kotlin.backend.jvm.jvmPhases
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.model.BackendKinds
@@ -37,7 +39,10 @@ class ClassicFrontend2IrConverter(
val files = psiFiles.values.toList()
val phaseConfig = configuration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jvmPhases)
val codegenFactory = JvmIrCodegenFactory(phaseConfig)
val codegenFactory = JvmIrCodegenFactory(
phaseConfig,
jvmGeneratorExtensions = JvmGeneratorExtensionsImpl(irDeserializationEnabled = configuration.getBoolean(JVMConfigurationKeys.SERIALIZE_IR))
)
val state = GenerationState.Builder(
project, ClassBuilderFactories.TEST, analysisResult.moduleDescriptor, analysisResult.bindingContext,
files, configuration