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:
committed by
TeamCityServer
parent
ec1c97c684
commit
1c4466951f
+4
-1
@@ -306,7 +306,10 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
)
|
)
|
||||||
.codegenFactory(
|
.codegenFactory(
|
||||||
if (configuration.getBoolean(JVMConfigurationKeys.IR)) JvmIrCodegenFactory(
|
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
|
) else DefaultCodegenFactory
|
||||||
)
|
)
|
||||||
.withModule(module)
|
.withModule(module)
|
||||||
|
|||||||
+4
-3
@@ -31,8 +31,6 @@ import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
|||||||
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
import org.jetbrains.kotlin.ir.util.constructors
|
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.JvmAnnotationNames
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
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.KotlinType
|
||||||
import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
|
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 classNameOverride: MutableMap<IrClass, JvmClassName> = mutableMapOf()
|
||||||
|
|
||||||
override val samConversion: SamConversion
|
override val samConversion: SamConversion
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ class IrLazyFunction(
|
|||||||
get() = (descriptor as? DescriptorWithContainerSource)?.containerSource
|
get() = (descriptor as? DescriptorWithContainerSource)?.containerSource
|
||||||
|
|
||||||
private fun tryLoadIr(): Boolean {
|
private fun tryLoadIr(): Boolean {
|
||||||
|
if (!stubGenerator.extensions.irDeserializationEnabled) return false
|
||||||
if (!isInline || isFakeOverride) return false
|
if (!isInline || isFakeOverride) return false
|
||||||
val toplevel = getToplevel()
|
val toplevel = getToplevel()
|
||||||
return (toplevel as? DeserializableClass)?.loadIr() ?: false
|
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.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
|
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.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
@@ -57,6 +55,8 @@ open class StubGeneratorExtensions {
|
|||||||
companion object Instance : EnhancedNullability()
|
companion object Instance : EnhancedNullability()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open val irDeserializationEnabled: Boolean = false
|
||||||
|
|
||||||
open val flexibleNullabilityAnnotationConstructor: IrConstructor?
|
open val flexibleNullabilityAnnotationConstructor: IrConstructor?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -6,11 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.test.frontend.classic
|
package org.jetbrains.kotlin.test.frontend.classic
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
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.JvmIrCodegenFactory
|
||||||
import org.jetbrains.kotlin.backend.jvm.jvmPhases
|
import org.jetbrains.kotlin.backend.jvm.jvmPhases
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
|
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
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.backend.ir.IrBackendInput
|
||||||
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
|
||||||
@@ -37,7 +39,10 @@ class ClassicFrontend2IrConverter(
|
|||||||
|
|
||||||
val files = psiFiles.values.toList()
|
val files = psiFiles.values.toList()
|
||||||
val phaseConfig = configuration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jvmPhases)
|
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(
|
val state = GenerationState.Builder(
|
||||||
project, ClassBuilderFactories.TEST, analysisResult.moduleDescriptor, analysisResult.bindingContext,
|
project, ClassBuilderFactories.TEST, analysisResult.moduleDescriptor, analysisResult.bindingContext,
|
||||||
files, configuration
|
files, configuration
|
||||||
|
|||||||
Reference in New Issue
Block a user