[FIR2IR] Run IrGenerationExtensions after fir2ir stage
This commit is contained in:
committed by
TeamCityServer
parent
b3768a201f
commit
fc1f2e9c72
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
@@ -45,6 +46,7 @@ class FirAnalyzerFacade(
|
||||
val languageVersionSettings: LanguageVersionSettings,
|
||||
val ktFiles: Collection<KtFile> = emptyList(), // may be empty if light tree mode enabled
|
||||
val originalFiles: Collection<File> = emptyList(), // may be empty if light tree mode disabled
|
||||
val irGeneratorExtensions: Collection<IrGenerationExtension>,
|
||||
val useLightTree: Boolean = false,
|
||||
val enablePluginPhases: Boolean = false,
|
||||
) : AbstractFirAnalyzerFacade() {
|
||||
@@ -113,7 +115,8 @@ class FirAnalyzerFacade(
|
||||
languageVersionSettings, signaturer,
|
||||
extensions, FirJvmKotlinMangler(session), IrFactoryImpl,
|
||||
FirJvmVisibilityConverter,
|
||||
Fir2IrJvmSpecialAnnotationSymbolProvider()
|
||||
Fir2IrJvmSpecialAnnotationSymbolProvider(),
|
||||
irGeneratorExtensions
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.pipeline
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
|
||||
@@ -22,7 +23,12 @@ import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions
|
||||
|
||||
fun FirSession.convertToIr(scopeSession: ScopeSession, firFiles: List<FirFile>, extensions: GeneratorExtensions): Fir2IrResult {
|
||||
fun FirSession.convertToIr(
|
||||
scopeSession: ScopeSession,
|
||||
firFiles: List<FirFile>,
|
||||
extensions: GeneratorExtensions,
|
||||
irGeneratorExtensions: Collection<IrGenerationExtension>
|
||||
): Fir2IrResult {
|
||||
val signaturer = JvmIdSignatureDescriptor(JvmDescriptorMangler(null))
|
||||
|
||||
val commonFirFiles = moduleData.dependsOnDependencies
|
||||
@@ -35,6 +41,7 @@ fun FirSession.convertToIr(scopeSession: ScopeSession, firFiles: List<FirFile>,
|
||||
languageVersionSettings, signaturer,
|
||||
extensions, FirJvmKotlinMangler(this), IrFactoryImpl,
|
||||
FirJvmVisibilityConverter,
|
||||
Fir2IrJvmSpecialAnnotationSymbolProvider()
|
||||
Fir2IrJvmSpecialAnnotationSymbolProvider(),
|
||||
irGeneratorExtensions
|
||||
)
|
||||
}
|
||||
|
||||
@@ -5,11 +5,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.backend
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
||||
import org.jetbrains.kotlin.backend.common.ir.BuiltinSymbolsBase
|
||||
import org.jetbrains.kotlin.config.AnalysisFlags
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.backend.evaluate.evaluateConstants
|
||||
import org.jetbrains.kotlin.fir.backend.generators.*
|
||||
import org.jetbrains.kotlin.fir.backend.generators.DataClassMembersGenerator
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic
|
||||
@@ -19,6 +25,7 @@ import org.jetbrains.kotlin.fir.extensions.declarationGenerators
|
||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||
import org.jetbrains.kotlin.fir.extensions.generatedMembers
|
||||
import org.jetbrains.kotlin.fir.extensions.generatedNestedClassifiers
|
||||
import org.jetbrains.kotlin.fir.moduleData
|
||||
import org.jetbrains.kotlin.fir.packageFqName
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
@@ -28,15 +35,17 @@ import org.jetbrains.kotlin.ir.*
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
|
||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
||||
import org.jetbrains.kotlin.ir.util.IdSignatureComposer
|
||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||
import org.jetbrains.kotlin.ir.linkage.IrDeserializer
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions
|
||||
import org.jetbrains.kotlin.psi2ir.generators.generateTypicalIrProviderList
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class Fir2IrConverter(
|
||||
private val moduleDescriptor: FirModuleDescriptor,
|
||||
@@ -308,7 +317,8 @@ class Fir2IrConverter(
|
||||
mangler: FirMangler,
|
||||
irFactory: IrFactory,
|
||||
visibilityConverter: Fir2IrVisibilityConverter,
|
||||
specialSymbolProvider: Fir2IrSpecialSymbolProvider?
|
||||
specialSymbolProvider: Fir2IrSpecialSymbolProvider?,
|
||||
irGenerationExtensions: Collection<IrGenerationExtension>
|
||||
): Fir2IrResult {
|
||||
val moduleDescriptor = FirModuleDescriptor(session)
|
||||
val symbolTable = SymbolTable(signaturer, irFactory)
|
||||
@@ -375,7 +385,73 @@ class Fir2IrConverter(
|
||||
|
||||
evaluateConstants(irModuleFragment)
|
||||
|
||||
if (irGenerationExtensions.isNotEmpty()) {
|
||||
val pluginContext = Fir2IrPluginContext(
|
||||
languageVersionSettings,
|
||||
BuiltinSymbolsBase(irBuiltIns, symbolTable),
|
||||
session.moduleData.platform,
|
||||
irBuiltIns,
|
||||
symbolTable
|
||||
)
|
||||
for (extension in irGenerationExtensions) {
|
||||
extension.generate(irModuleFragment, pluginContext)
|
||||
}
|
||||
}
|
||||
|
||||
return Fir2IrResult(irModuleFragment, symbolTable, components)
|
||||
}
|
||||
}
|
||||
|
||||
private class Fir2IrPluginContext(
|
||||
override val languageVersionSettings: LanguageVersionSettings,
|
||||
override val symbols: BuiltinSymbolsBase,
|
||||
override val platform: TargetPlatform?,
|
||||
override val irBuiltIns: IrBuiltIns,
|
||||
@property:ObsoleteDescriptorBasedAPI
|
||||
override val symbolTable: SymbolTable
|
||||
) : IrPluginContext {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
override val moduleDescriptor: ModuleDescriptor
|
||||
get() = error("Should not be called")
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
override val bindingContext: BindingContext
|
||||
get() = error("Should not be called")
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
override val typeTranslator: TypeTranslator
|
||||
get() = error("Should not be called")
|
||||
|
||||
override fun createDiagnosticReporter(pluginId: String): IrMessageLogger {
|
||||
error("Should not be called")
|
||||
}
|
||||
|
||||
override fun referenceClass(fqName: FqName): IrClassSymbol? {
|
||||
error("Should not be called")
|
||||
}
|
||||
|
||||
override fun referenceTypeAlias(fqName: FqName): IrTypeAliasSymbol? {
|
||||
error("Should not be called")
|
||||
}
|
||||
|
||||
override fun referenceConstructors(classFqn: FqName): Collection<IrConstructorSymbol> {
|
||||
error("Should not be called")
|
||||
}
|
||||
|
||||
override fun referenceFunctions(fqName: FqName): Collection<IrSimpleFunctionSymbol> {
|
||||
error("Should not be called")
|
||||
}
|
||||
|
||||
override fun referenceProperties(fqName: FqName): Collection<IrPropertySymbol> {
|
||||
error("Should not be called")
|
||||
}
|
||||
|
||||
override fun referenceTopLevel(
|
||||
signature: IdSignature,
|
||||
kind: IrDeserializer.TopLevelSymbolKind,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): IrSymbol? {
|
||||
error("Should not be called")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user