Fir2Ir: pass Fir2IrExtensions to backend
This commit is contained in:
committed by
Alexander Udalov
parent
3c3c1be543
commit
13d4d60afa
+5
-10
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler
|
|||||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.asJava.FilteredJvmDiagnostics
|
import org.jetbrains.kotlin.asJava.FilteredJvmDiagnostics
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
|
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
|
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
|
||||||
import org.jetbrains.kotlin.cli.common.CLICompiler
|
import org.jetbrains.kotlin.cli.common.CLICompiler
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
@@ -161,19 +161,15 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
performanceManager?.notifyGenerationStarted()
|
performanceManager?.notifyGenerationStarted()
|
||||||
performanceManager?.notifyIRTranslationStarted()
|
performanceManager?.notifyIRTranslationStarted()
|
||||||
|
|
||||||
val fir2IrResult = firResult.session.convertToIr(
|
val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration)
|
||||||
firResult.scopeSession, firResult.fir,
|
val fir2IrResult = firResult.session.convertToIr(firResult.scopeSession, firResult.fir, fir2IrExtensions, irGenerationExtensions)
|
||||||
JvmFir2IrExtensions(moduleConfiguration),
|
|
||||||
irGenerationExtensions
|
|
||||||
)
|
|
||||||
|
|
||||||
performanceManager?.notifyIRTranslationFinished()
|
performanceManager?.notifyIRTranslationFinished()
|
||||||
|
|
||||||
val extensions = JvmGeneratorExtensionsImpl(moduleConfiguration)
|
|
||||||
val generationState = runBackend(
|
val generationState = runBackend(
|
||||||
allSources,
|
allSources,
|
||||||
fir2IrResult,
|
fir2IrResult,
|
||||||
extensions,
|
fir2IrExtensions,
|
||||||
firResult.session,
|
firResult.session,
|
||||||
diagnosticsReporter
|
diagnosticsReporter
|
||||||
)
|
)
|
||||||
@@ -316,7 +312,7 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
private fun CompilationContext.runBackend(
|
private fun CompilationContext.runBackend(
|
||||||
ktFiles: List<KtFile>,
|
ktFiles: List<KtFile>,
|
||||||
fir2IrResult: Fir2IrResult,
|
fir2IrResult: Fir2IrResult,
|
||||||
extensions: JvmGeneratorExtensionsImpl,
|
extensions: JvmGeneratorExtensions,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
diagnosticsReporter: BaseDiagnosticsCollector
|
diagnosticsReporter: BaseDiagnosticsCollector
|
||||||
): GenerationState {
|
): GenerationState {
|
||||||
@@ -325,7 +321,6 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
val codegenFactory = JvmIrCodegenFactory(
|
val codegenFactory = JvmIrCodegenFactory(
|
||||||
moduleConfiguration,
|
moduleConfiguration,
|
||||||
moduleConfiguration.get(CLIConfigurationKeys.PHASE_CONFIG),
|
moduleConfiguration.get(CLIConfigurationKeys.PHASE_CONFIG),
|
||||||
jvmGeneratorExtensions = extensions
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val generationState = GenerationState.Builder(
|
val generationState = GenerationState.Builder(
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.KtSourceFile
|
|||||||
import org.jetbrains.kotlin.KtVirtualFileSourceFile
|
import org.jetbrains.kotlin.KtVirtualFileSourceFile
|
||||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
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.cli.common.CLIConfigurationKeys
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager
|
import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager
|
||||||
@@ -48,6 +47,7 @@ import org.jetbrains.kotlin.fir.DependencyListForCliModule
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
|
||||||
|
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||||
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||||
@@ -185,7 +185,7 @@ fun convertAnalyzedFirToIr(
|
|||||||
analysisResults: ModuleCompilerAnalyzedOutput,
|
analysisResults: ModuleCompilerAnalyzedOutput,
|
||||||
environment: ModuleCompilerEnvironment
|
environment: ModuleCompilerEnvironment
|
||||||
): ModuleCompilerIrBackendInput {
|
): ModuleCompilerIrBackendInput {
|
||||||
val extensions = JvmGeneratorExtensionsImpl(input.configuration)
|
val extensions = JvmFir2IrExtensions(input.configuration)
|
||||||
|
|
||||||
// fir2ir
|
// fir2ir
|
||||||
val irGenerationExtensions =
|
val irGenerationExtensions =
|
||||||
@@ -215,7 +215,6 @@ fun generateCodeFromIr(
|
|||||||
val codegenFactory = JvmIrCodegenFactory(
|
val codegenFactory = JvmIrCodegenFactory(
|
||||||
input.configuration,
|
input.configuration,
|
||||||
input.configuration.get(CLIConfigurationKeys.PHASE_CONFIG),
|
input.configuration.get(CLIConfigurationKeys.PHASE_CONFIG),
|
||||||
jvmGeneratorExtensions = input.extensions
|
|
||||||
)
|
)
|
||||||
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
||||||
|
|
||||||
|
|||||||
+2
-4
@@ -6,22 +6,20 @@
|
|||||||
package org.jetbrains.kotlin.cli.jvm.compiler.pipeline
|
package org.jetbrains.kotlin.cli.jvm.compiler.pipeline
|
||||||
|
|
||||||
import org.jetbrains.kotlin.KtSourceFile
|
import org.jetbrains.kotlin.KtSourceFile
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
|
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.fir.FirModuleData
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||||
|
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
@@ -55,7 +53,7 @@ data class ModuleCompilerAnalyzedOutput(
|
|||||||
data class ModuleCompilerIrBackendInput(
|
data class ModuleCompilerIrBackendInput(
|
||||||
val targetId: TargetId,
|
val targetId: TargetId,
|
||||||
val configuration: CompilerConfiguration,
|
val configuration: CompilerConfiguration,
|
||||||
val extensions: JvmGeneratorExtensionsImpl,
|
val extensions: JvmFir2IrExtensions,
|
||||||
val irModuleFragment: IrModuleFragment,
|
val irModuleFragment: IrModuleFragment,
|
||||||
val symbolTable: SymbolTable,
|
val symbolTable: SymbolTable,
|
||||||
val components: Fir2IrComponents,
|
val components: Fir2IrComponents,
|
||||||
|
|||||||
+37
-11
@@ -5,10 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.backend.jvm
|
package org.jetbrains.kotlin.fir.backend.jvm
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.CachedFieldsForObjectInstances
|
import org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSignatureComputer
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmFileFacadeClass
|
import org.jetbrains.kotlin.backend.jvm.*
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.handleJvmStaticInSingletonObjects
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.serialization.deserializeFromByteArray
|
import org.jetbrains.kotlin.backend.jvm.serialization.deserializeFromByteArray
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
@@ -17,21 +15,49 @@ import org.jetbrains.kotlin.config.languageVersionSettings
|
|||||||
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||||
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
|
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
|
||||||
import org.jetbrains.kotlin.fir.backend.FirIrProvider
|
import org.jetbrains.kotlin.fir.backend.FirIrProvider
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrMemberWithContainerSource
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.impl.DescriptorlessExternalPackageFragmentSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
|
import org.jetbrains.kotlin.ir.util.constructors
|
||||||
import org.jetbrains.kotlin.ir.util.createParameterDeclarations
|
import org.jetbrains.kotlin.ir.util.createParameterDeclarations
|
||||||
|
import org.jetbrains.kotlin.ir.util.createSpecialAnnotationClass
|
||||||
import org.jetbrains.kotlin.load.kotlin.FacadeClassSource
|
import org.jetbrains.kotlin.load.kotlin.FacadeClassSource
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
|
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
|
|
||||||
class JvmFir2IrExtensions(configuration: CompilerConfiguration) : Fir2IrExtensions {
|
class JvmFir2IrExtensions(configuration: CompilerConfiguration) : Fir2IrExtensions, JvmGeneratorExtensions {
|
||||||
|
|
||||||
// TODO: make these available to backend context
|
override val classNameOverride: MutableMap<IrClass, JvmClassName> = mutableMapOf()
|
||||||
private val classNameOverride: MutableMap<IrClass, JvmClassName> = mutableMapOf()
|
override val cachedFields = CachedFieldsForObjectInstances(IrFactoryImpl, configuration.languageVersionSettings)
|
||||||
private val cachedFields = CachedFieldsForObjectInstances(IrFactoryImpl, configuration.languageVersionSettings)
|
|
||||||
|
private val kotlinIrInternalPackage =
|
||||||
|
IrExternalPackageFragmentImpl(DescriptorlessExternalPackageFragmentSymbol(), IrBuiltIns.KOTLIN_INTERNAL_IR_FQN)
|
||||||
|
|
||||||
|
private val specialAnnotationConstructors = mutableListOf<IrConstructor>()
|
||||||
|
|
||||||
|
private val rawTypeAnnotationClass =
|
||||||
|
createSpecialAnnotationClass(JvmSymbols.RAW_TYPE_ANNOTATION_FQ_NAME, kotlinIrInternalPackage)
|
||||||
|
|
||||||
|
override val rawTypeAnnotationConstructor: IrConstructor =
|
||||||
|
rawTypeAnnotationClass.constructors.single()
|
||||||
|
|
||||||
|
private fun createSpecialAnnotationClass(fqn: FqName, parent: IrPackageFragment) =
|
||||||
|
IrFactoryImpl.createSpecialAnnotationClass(fqn, parent).apply {
|
||||||
|
specialAnnotationConstructors.add(constructors.single())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun registerDeclarations(symbolTable: SymbolTable) {
|
||||||
|
val signatureComputer = PublicIdSignatureComputer(JvmIrMangler)
|
||||||
|
specialAnnotationConstructors.forEach { constructor ->
|
||||||
|
symbolTable.declareConstructorWithSignature(signatureComputer.composePublicIdSignature(constructor, false), constructor.symbol)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val irNeedsDeserialization: Boolean =
|
override val irNeedsDeserialization: Boolean =
|
||||||
configuration.get(JVMConfigurationKeys.SERIALIZE_IR, JvmSerializeIrMode.NONE) != JvmSerializeIrMode.NONE
|
configuration.get(JVMConfigurationKeys.SERIALIZE_IR, JvmSerializeIrMode.NONE) != JvmSerializeIrMode.NONE
|
||||||
|
|||||||
@@ -460,6 +460,8 @@ class Fir2IrConverter(
|
|||||||
val callGenerator = CallAndReferenceGenerator(components, fir2irVisitor, conversionScope)
|
val callGenerator = CallAndReferenceGenerator(components, fir2irVisitor, conversionScope)
|
||||||
components.callGenerator = callGenerator
|
components.callGenerator = callGenerator
|
||||||
|
|
||||||
|
fir2IrExtensions.registerDeclarations(symbolTable)
|
||||||
|
|
||||||
val irModuleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns)
|
val irModuleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns)
|
||||||
|
|
||||||
val allFirFiles = buildList {
|
val allFirFiles = buildList {
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ package org.jetbrains.kotlin.fir.backend
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrMemberWithContainerSource
|
import org.jetbrains.kotlin.ir.declarations.IrMemberWithContainerSource
|
||||||
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
|
|
||||||
interface Fir2IrExtensions {
|
interface Fir2IrExtensions {
|
||||||
val irNeedsDeserialization: Boolean
|
val irNeedsDeserialization: Boolean
|
||||||
|
|
||||||
fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass?
|
fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass?
|
||||||
fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean
|
fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean
|
||||||
|
fun registerDeclarations(symbolTable: SymbolTable)
|
||||||
|
|
||||||
object Default : Fir2IrExtensions {
|
object Default : Fir2IrExtensions {
|
||||||
override val irNeedsDeserialization: Boolean
|
override val irNeedsDeserialization: Boolean
|
||||||
@@ -20,5 +22,6 @@ interface Fir2IrExtensions {
|
|||||||
|
|
||||||
override fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass? = null
|
override fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass? = null
|
||||||
override fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean = false
|
override fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean = false
|
||||||
|
override fun registerDeclarations(symbolTable: SymbolTable) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-5
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.KtIoFileSourceFile
|
|||||||
import org.jetbrains.kotlin.KtSourceFile
|
import org.jetbrains.kotlin.KtSourceFile
|
||||||
import org.jetbrains.kotlin.KtVirtualFileSourceFile
|
import org.jetbrains.kotlin.KtVirtualFileSourceFile
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
||||||
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
|
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
|
||||||
import org.jetbrains.kotlin.build.report.BuildReporter
|
import org.jetbrains.kotlin.build.report.BuildReporter
|
||||||
@@ -45,6 +44,7 @@ import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
|
|||||||
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||||
|
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.fir.moduleData
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
@@ -267,10 +267,9 @@ class IncrementalFirJvmCompilerRunner(
|
|||||||
performanceManager?.notifyGenerationStarted()
|
performanceManager?.notifyGenerationStarted()
|
||||||
performanceManager?.notifyIRTranslationStarted()
|
performanceManager?.notifyIRTranslationStarted()
|
||||||
|
|
||||||
val extensions = JvmGeneratorExtensionsImpl(configuration)
|
val extensions = JvmFir2IrExtensions(configuration)
|
||||||
val irGenerationExtensions =
|
val irGenerationExtensions =
|
||||||
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
|
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
|
||||||
val mangler = JvmDescriptorMangler(null)
|
|
||||||
val signaturer = JvmIdSignatureDescriptor(JvmDescriptorMangler(null))
|
val signaturer = JvmIdSignatureDescriptor(JvmDescriptorMangler(null))
|
||||||
val allCommonFirFiles = cycleResult.session.moduleData.dependsOnDependencies
|
val allCommonFirFiles = cycleResult.session.moduleData.dependsOnDependencies
|
||||||
.map { it.session }
|
.map { it.session }
|
||||||
@@ -279,7 +278,7 @@ class IncrementalFirJvmCompilerRunner(
|
|||||||
|
|
||||||
val (irModuleFragment, symbolTable, components) = Fir2IrConverter.createModuleFragment(
|
val (irModuleFragment, symbolTable, components) = Fir2IrConverter.createModuleFragment(
|
||||||
cycleResult.session, cycleResult.scopeSession, cycleResult.fir + allCommonFirFiles,
|
cycleResult.session, cycleResult.scopeSession, cycleResult.fir + allCommonFirFiles,
|
||||||
cycleResult.session.languageVersionSettings, mangler, signaturer,
|
cycleResult.session.languageVersionSettings, signaturer,
|
||||||
extensions, FirJvmKotlinMangler(cycleResult.session), IrFactoryImpl,
|
extensions, FirJvmKotlinMangler(cycleResult.session), IrFactoryImpl,
|
||||||
FirJvmVisibilityConverter,
|
FirJvmVisibilityConverter,
|
||||||
Fir2IrJvmSpecialAnnotationSymbolProvider(),
|
Fir2IrJvmSpecialAnnotationSymbolProvider(),
|
||||||
@@ -369,4 +368,4 @@ fun CompilerConfiguration.configureSourceRootsFromSources(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-13
@@ -17,8 +17,6 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
|||||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||||
@@ -173,17 +171,8 @@ open class JvmGeneratorExtensionsImpl(
|
|||||||
private val specialAnnotationConstructors = mutableListOf<IrConstructor>()
|
private val specialAnnotationConstructors = mutableListOf<IrConstructor>()
|
||||||
|
|
||||||
private fun createSpecialAnnotationClass(fqn: FqName, parent: IrPackageFragment) =
|
private fun createSpecialAnnotationClass(fqn: FqName, parent: IrPackageFragment) =
|
||||||
IrFactoryImpl.buildClass {
|
IrFactoryImpl.createSpecialAnnotationClass(fqn, parent).apply {
|
||||||
kind = ClassKind.ANNOTATION_CLASS
|
specialAnnotationConstructors.add(constructors.single())
|
||||||
name = fqn.shortName()
|
|
||||||
}.apply {
|
|
||||||
createImplicitParameterDeclarationWithWrappedDescriptor()
|
|
||||||
this.parent = parent
|
|
||||||
addConstructor {
|
|
||||||
isPrimary = true
|
|
||||||
}.also { constructor ->
|
|
||||||
specialAnnotationConstructors.add(constructor)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createCustomSuperConstructorCall(
|
override fun createCustomSuperConstructorCall(
|
||||||
|
|||||||
+3
-5
@@ -8,10 +8,8 @@ package org.jetbrains.kotlin.backend.jvm
|
|||||||
import org.jetbrains.kotlin.analyzer.hasJdkCapability
|
import org.jetbrains.kotlin.analyzer.hasJdkCapability
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.CompilerPhase
|
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel
|
import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.then
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.DescriptorByIdSignatureFinderImpl
|
import org.jetbrains.kotlin.backend.common.serialization.DescriptorByIdSignatureFinderImpl
|
||||||
import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods
|
import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.getIoFile
|
import org.jetbrains.kotlin.backend.jvm.ir.getIoFile
|
||||||
@@ -64,7 +62,7 @@ open class JvmIrCodegenFactory(
|
|||||||
val symbolTable: SymbolTable,
|
val symbolTable: SymbolTable,
|
||||||
val phaseConfig: PhaseConfig?,
|
val phaseConfig: PhaseConfig?,
|
||||||
val irProviders: List<IrProvider>,
|
val irProviders: List<IrProvider>,
|
||||||
val extensions: JvmGeneratorExtensionsImpl,
|
val extensions: JvmGeneratorExtensions,
|
||||||
val backendExtension: JvmBackendExtension,
|
val backendExtension: JvmBackendExtension,
|
||||||
val notifyCodegenStart: () -> Unit
|
val notifyCodegenStart: () -> Unit
|
||||||
) : CodegenFactory.BackendInput
|
) : CodegenFactory.BackendInput
|
||||||
@@ -294,11 +292,11 @@ open class JvmIrCodegenFactory(
|
|||||||
state: GenerationState,
|
state: GenerationState,
|
||||||
irModuleFragment: IrModuleFragment,
|
irModuleFragment: IrModuleFragment,
|
||||||
symbolTable: SymbolTable,
|
symbolTable: SymbolTable,
|
||||||
extensions: JvmGeneratorExtensionsImpl,
|
extensions: JvmGeneratorExtensions,
|
||||||
backendExtension: JvmBackendExtension,
|
backendExtension: JvmBackendExtension,
|
||||||
notifyCodegenStart: () -> Unit = {}
|
notifyCodegenStart: () -> Unit = {}
|
||||||
) {
|
) {
|
||||||
val irProviders = configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions)
|
val irProviders = configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, jvmGeneratorExtensions)
|
||||||
generateModule(
|
generateModule(
|
||||||
state,
|
state,
|
||||||
JvmIrBackendInput(irModuleFragment, symbolTable, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart)
|
JvmIrBackendInput(irModuleFragment, symbolTable, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.util
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.*
|
import org.jetbrains.kotlin.ir.*
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
||||||
|
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildReceiverParameter
|
import org.jetbrains.kotlin.ir.builders.declarations.buildReceiverParameter
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
|
import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -986,6 +987,18 @@ fun IrClass.createImplicitParameterDeclarationWithWrappedDescriptor() {
|
|||||||
thisReceiver = buildReceiverParameter(this, IrDeclarationOrigin.INSTANCE_RECEIVER, symbol.typeWithParameters(typeParameters))
|
thisReceiver = buildReceiverParameter(this, IrDeclarationOrigin.INSTANCE_RECEIVER, symbol.typeWithParameters(typeParameters))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun IrFactory.createSpecialAnnotationClass(fqn: FqName, parent: IrPackageFragment) =
|
||||||
|
buildClass {
|
||||||
|
kind = ClassKind.ANNOTATION_CLASS
|
||||||
|
name = fqn.shortName()
|
||||||
|
}.apply {
|
||||||
|
createImplicitParameterDeclarationWithWrappedDescriptor()
|
||||||
|
this.parent = parent
|
||||||
|
addConstructor {
|
||||||
|
isPrimary = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun isElseBranch(branch: IrBranch) = branch is IrElseBranch || ((branch.condition as? IrConst<Boolean>)?.value == true)
|
fun isElseBranch(branch: IrBranch) = branch is IrElseBranch || ((branch.condition as? IrConst<Boolean>)?.value == true)
|
||||||
|
|
||||||
@@ -1242,4 +1255,4 @@ private fun computeAllOverridden(function: IrSimpleFunction, result: MutableSet<
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun IrBuiltIns.getKFunctionType(returnType: IrType, parameterTypes: List<IrType>) =
|
fun IrBuiltIns.getKFunctionType(returnType: IrType, parameterTypes: List<IrType>) =
|
||||||
kFunctionN(parameterTypes.size).typeWith(parameterTypes + returnType)
|
kFunctionN(parameterTypes.size).typeWith(parameterTypes + returnType)
|
||||||
|
|||||||
+5
-6
@@ -42,14 +42,12 @@ class Fir2IrResultsConverter(
|
|||||||
val compilerConfigurationProvider = testServices.compilerConfigurationProvider
|
val compilerConfigurationProvider = testServices.compilerConfigurationProvider
|
||||||
val configuration = compilerConfigurationProvider.getCompilerConfiguration(module)
|
val configuration = compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||||
|
|
||||||
val (irModuleFragment, symbolTable, components) = inputArtifact.firAnalyzerFacade.convertToIr(
|
val fir2IrExtensions = JvmFir2IrExtensions(configuration)
|
||||||
JvmFir2IrExtensions(configuration)
|
val (irModuleFragment, symbolTable, components) = inputArtifact.firAnalyzerFacade.convertToIr(fir2IrExtensions)
|
||||||
)
|
|
||||||
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
||||||
|
|
||||||
val extensions = JvmGeneratorExtensionsImpl(configuration)
|
|
||||||
val phaseConfig = configuration.get(CLIConfigurationKeys.PHASE_CONFIG)
|
val phaseConfig = configuration.get(CLIConfigurationKeys.PHASE_CONFIG)
|
||||||
val codegenFactory = JvmIrCodegenFactory(configuration, phaseConfig, jvmGeneratorExtensions = extensions)
|
val codegenFactory = JvmIrCodegenFactory(configuration, phaseConfig)
|
||||||
|
|
||||||
// TODO: handle fir from light tree
|
// TODO: handle fir from light tree
|
||||||
val ktFiles = inputArtifact.firFiles.values.mapNotNull { it.psi as KtFile? }
|
val ktFiles = inputArtifact.firFiles.values.mapNotNull { it.psi as KtFile? }
|
||||||
@@ -73,6 +71,7 @@ class Fir2IrResultsConverter(
|
|||||||
FirJvmBackendClassResolver(components)
|
FirJvmBackendClassResolver(components)
|
||||||
).build()
|
).build()
|
||||||
|
|
||||||
|
val extensions = JvmGeneratorExtensionsImpl(configuration)
|
||||||
val irProviders = codegenFactory.configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions)
|
val irProviders = codegenFactory.configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions)
|
||||||
|
|
||||||
return IrBackendInput.JvmIrBackendInput(
|
return IrBackendInput.JvmIrBackendInput(
|
||||||
@@ -83,7 +82,7 @@ class Fir2IrResultsConverter(
|
|||||||
symbolTable,
|
symbolTable,
|
||||||
phaseConfig,
|
phaseConfig,
|
||||||
irProviders,
|
irProviders,
|
||||||
extensions,
|
fir2IrExtensions,
|
||||||
FirJvmBackendExtension(inputArtifact.session, components),
|
FirJvmBackendExtension(inputArtifact.session, components),
|
||||||
notifyCodegenStart = {},
|
notifyCodegenStart = {},
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -114,16 +114,13 @@ object GenerationUtils {
|
|||||||
emptyList(),
|
emptyList(),
|
||||||
IrGenerationExtension.getInstances(project)
|
IrGenerationExtension.getInstances(project)
|
||||||
)
|
)
|
||||||
val (moduleFragment, symbolTable, components) = firAnalyzerFacade.convertToIr(
|
val fir2IrExtensions = JvmFir2IrExtensions(configuration)
|
||||||
JvmFir2IrExtensions(configuration)
|
val (moduleFragment, symbolTable, components) = firAnalyzerFacade.convertToIr(fir2IrExtensions)
|
||||||
)
|
|
||||||
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
||||||
|
|
||||||
val extensions = JvmGeneratorExtensionsImpl(configuration)
|
|
||||||
val codegenFactory = JvmIrCodegenFactory(
|
val codegenFactory = JvmIrCodegenFactory(
|
||||||
configuration,
|
configuration,
|
||||||
configuration.get(CLIConfigurationKeys.PHASE_CONFIG),
|
configuration.get(CLIConfigurationKeys.PHASE_CONFIG),
|
||||||
jvmGeneratorExtensions = extensions
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val generationState = GenerationState.Builder(
|
val generationState = GenerationState.Builder(
|
||||||
@@ -137,7 +134,7 @@ object GenerationUtils {
|
|||||||
generationState.beforeCompile()
|
generationState.beforeCompile()
|
||||||
generationState.oldBEInitTrace(files)
|
generationState.oldBEInitTrace(files)
|
||||||
codegenFactory.generateModuleInFrontendIRMode(
|
codegenFactory.generateModuleInFrontendIRMode(
|
||||||
generationState, moduleFragment, symbolTable, extensions, FirJvmBackendExtension(session, components),
|
generationState, moduleFragment, symbolTable, fir2IrExtensions, FirJvmBackendExtension(session, components),
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
generationState.factory.done()
|
generationState.factory.done()
|
||||||
|
|||||||
Reference in New Issue
Block a user