PSI2IR: have GeneratorExtensions implement StubGeneratorExtensions
This commit is contained in:
@@ -30,9 +30,9 @@ object JvmBackendFacade {
|
|||||||
errorHandler: CompilationErrorHandler,
|
errorHandler: CompilationErrorHandler,
|
||||||
phaseConfig: PhaseConfig
|
phaseConfig: PhaseConfig
|
||||||
) {
|
) {
|
||||||
|
val extensions = JvmGeneratorExtensions()
|
||||||
val psi2ir = Psi2IrTranslator(state.languageVersionSettings, mangler = JvmMangler)
|
val psi2ir = Psi2IrTranslator(state.languageVersionSettings, mangler = JvmMangler)
|
||||||
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, extensions = JvmGeneratorExtensions)
|
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, extensions = extensions)
|
||||||
val extensions = JvmStubGeneratorExtensions()
|
|
||||||
|
|
||||||
for (extension in IrGenerationExtension.getInstances(state.project)) {
|
for (extension in IrGenerationExtension.getInstances(state.project)) {
|
||||||
psi2ir.addPostprocessingStep { module ->
|
psi2ir.addPostprocessingStep { module ->
|
||||||
@@ -67,7 +67,7 @@ object JvmBackendFacade {
|
|||||||
symbolTable: SymbolTable,
|
symbolTable: SymbolTable,
|
||||||
sourceManager: PsiSourceManager,
|
sourceManager: PsiSourceManager,
|
||||||
phaseConfig: PhaseConfig,
|
phaseConfig: PhaseConfig,
|
||||||
extensions: JvmStubGeneratorExtensions = JvmStubGeneratorExtensions()
|
extensions: JvmGeneratorExtensions
|
||||||
) {
|
) {
|
||||||
val context = JvmBackendContext(
|
val context = JvmBackendContext(
|
||||||
state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions.classNameOverride
|
state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions.classNameOverride
|
||||||
|
|||||||
+4
-9
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.util.StubGeneratorExtensions
|
|
||||||
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
|
||||||
import org.jetbrains.kotlin.load.java.sam.SamAdapterDescriptor
|
import org.jetbrains.kotlin.load.java.sam.SamAdapterDescriptor
|
||||||
@@ -29,7 +28,9 @@ import org.jetbrains.kotlin.types.KotlinType
|
|||||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
object JvmGeneratorExtensions : GeneratorExtensions() {
|
class JvmGeneratorExtensions(private val generateFacades: Boolean = true) : GeneratorExtensions() {
|
||||||
|
val classNameOverride = mutableMapOf<IrClass, JvmClassName>()
|
||||||
|
|
||||||
override val samConversion: SamConversion
|
override val samConversion: SamConversion
|
||||||
get() = JvmSamConversion
|
get() = JvmSamConversion
|
||||||
|
|
||||||
@@ -66,13 +67,6 @@ object JvmGeneratorExtensions : GeneratorExtensions() {
|
|||||||
else
|
else
|
||||||
null
|
null
|
||||||
|
|
||||||
override fun isPropertyWithPlatformField(descriptor: PropertyDescriptor): Boolean =
|
|
||||||
descriptor.hasJvmFieldAnnotation()
|
|
||||||
}
|
|
||||||
|
|
||||||
class JvmStubGeneratorExtensions : StubGeneratorExtensions() {
|
|
||||||
val classNameOverride = mutableMapOf<IrClass, JvmClassName>()
|
|
||||||
|
|
||||||
override fun computeExternalDeclarationOrigin(descriptor: DeclarationDescriptor): IrDeclarationOrigin? =
|
override fun computeExternalDeclarationOrigin(descriptor: DeclarationDescriptor): IrDeclarationOrigin? =
|
||||||
if (descriptor is JavaCallableMemberDescriptor)
|
if (descriptor is JavaCallableMemberDescriptor)
|
||||||
IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
|
IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
|
||||||
@@ -80,6 +74,7 @@ class JvmStubGeneratorExtensions : StubGeneratorExtensions() {
|
|||||||
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
|
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
|
||||||
|
|
||||||
override fun generateFacadeClass(source: DeserializedContainerSource): IrClass? {
|
override fun generateFacadeClass(source: DeserializedContainerSource): IrClass? {
|
||||||
|
if (!generateFacades) return null
|
||||||
val jvmPackagePartSource = source as? JvmPackagePartSource ?: return null
|
val jvmPackagePartSource = source as? JvmPackagePartSource ?: return null
|
||||||
val facadeName = jvmPackagePartSource.facadeClassName ?: jvmPackagePartSource.className
|
val facadeName = jvmPackagePartSource.facadeClassName ?: jvmPackagePartSource.className
|
||||||
return buildClass {
|
return buildClass {
|
||||||
|
|||||||
@@ -41,14 +41,12 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory
|
|||||||
symbolTable: SymbolTable,
|
symbolTable: SymbolTable,
|
||||||
sourceManager: PsiSourceManager
|
sourceManager: PsiSourceManager
|
||||||
) {
|
) {
|
||||||
val stubGeneratorExtensions = JvmStubGeneratorExtensions()
|
val extensions = JvmGeneratorExtensions()
|
||||||
val irProviders = generateTypicalIrProviderList(
|
val irProviders = generateTypicalIrProviderList(
|
||||||
irModuleFragment.descriptor, irModuleFragment.irBuiltins, symbolTable, extensions = stubGeneratorExtensions
|
irModuleFragment.descriptor, irModuleFragment.irBuiltins, symbolTable, extensions = extensions
|
||||||
)
|
)
|
||||||
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()
|
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()
|
||||||
JvmBackendFacade.doGenerateFilesInternal(
|
JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, symbolTable, sourceManager, phaseConfig, extensions)
|
||||||
state, errorHandler, irModuleFragment, symbolTable, sourceManager, phaseConfig, stubGeneratorExtensions
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPackageCodegen(state: GenerationState, files: Collection<KtFile>, fqName: FqName): PackageCodegen {
|
override fun createPackageCodegen(state: GenerationState, files: Collection<KtFile>, fqName: FqName): PackageCodegen {
|
||||||
|
|||||||
@@ -48,17 +48,13 @@ class Psi2IrTranslator(
|
|||||||
moduleDescriptor: ModuleDescriptor,
|
moduleDescriptor: ModuleDescriptor,
|
||||||
ktFiles: Collection<KtFile>,
|
ktFiles: Collection<KtFile>,
|
||||||
bindingContext: BindingContext,
|
bindingContext: BindingContext,
|
||||||
generatorExtensions: GeneratorExtensions,
|
generatorExtensions: GeneratorExtensions
|
||||||
stubGeneratorExtensions: StubGeneratorExtensions
|
|
||||||
): IrModuleFragment {
|
): IrModuleFragment {
|
||||||
val context = createGeneratorContext(moduleDescriptor, bindingContext, extensions = generatorExtensions)
|
val context = createGeneratorContext(moduleDescriptor, bindingContext, extensions = generatorExtensions)
|
||||||
return generateModuleFragment(
|
val irProviders = generateTypicalIrProviderList(
|
||||||
context, ktFiles,
|
moduleDescriptor, context.irBuiltIns, context.symbolTable, extensions = generatorExtensions
|
||||||
irProviders = generateTypicalIrProviderList(
|
|
||||||
moduleDescriptor, context.irBuiltIns, context.symbolTable,
|
|
||||||
extensions = stubGeneratorExtensions
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
return generateModuleFragment(context, ktFiles, irProviders)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createGeneratorContext(
|
fun createGeneratorContext(
|
||||||
|
|||||||
+2
-3
@@ -8,9 +8,10 @@ package org.jetbrains.kotlin.psi2ir.generators
|
|||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
|
import org.jetbrains.kotlin.ir.util.StubGeneratorExtensions
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
open class GeneratorExtensions {
|
open class GeneratorExtensions : StubGeneratorExtensions() {
|
||||||
open val samConversion: SamConversion
|
open val samConversion: SamConversion
|
||||||
get() = SamConversion
|
get() = SamConversion
|
||||||
|
|
||||||
@@ -29,6 +30,4 @@ open class GeneratorExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
open fun computeFieldVisibility(descriptor: PropertyDescriptor): Visibility? = null
|
open fun computeFieldVisibility(descriptor: PropertyDescriptor): Visibility? = null
|
||||||
|
|
||||||
open fun isPropertyWithPlatformField(descriptor: PropertyDescriptor): Boolean = false
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,17 +18,13 @@ package org.jetbrains.kotlin.ir
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions
|
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmStubGeneratorExtensions
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsGeneratorExtensions
|
import org.jetbrains.kotlin.ir.backend.js.JsGeneratorExtensions
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
import org.jetbrains.kotlin.ir.util.StubGeneratorExtensions
|
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
|
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
|
import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
|
||||||
@@ -115,39 +111,30 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
|
|||||||
moduleDescriptors = emptyList(),
|
moduleDescriptors = emptyList(),
|
||||||
friendModuleDescriptors = emptyList()
|
friendModuleDescriptors = emptyList()
|
||||||
),
|
),
|
||||||
psi2ir, ktFilesToAnalyze, JsGeneratorExtensions(), StubGeneratorExtensions.EMPTY
|
psi2ir, ktFilesToAnalyze, JsGeneratorExtensions()
|
||||||
)
|
)
|
||||||
|
|
||||||
fun generateIrModuleWithJvmResolve(
|
fun generateIrModuleWithJvmResolve(
|
||||||
ktFilesToAnalyze: List<KtFile>, environment: KotlinCoreEnvironment, psi2ir: Psi2IrTranslator
|
ktFilesToAnalyze: List<KtFile>, environment: KotlinCoreEnvironment, psi2ir: Psi2IrTranslator
|
||||||
): IrModuleFragment =
|
): IrModuleFragment =
|
||||||
generateIrModule(
|
generateIrModule(
|
||||||
JvmResolveUtil.analyze(ktFilesToAnalyze, environment), psi2ir, ktFilesToAnalyze, JvmGeneratorExtensions,
|
JvmResolveUtil.analyze(ktFilesToAnalyze, environment), psi2ir, ktFilesToAnalyze,
|
||||||
IrTestStubGeneratorExtensions
|
JvmGeneratorExtensions(generateFacades = false)
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun generateIrModule(
|
private fun generateIrModule(
|
||||||
analysisResult: AnalysisResult,
|
analysisResult: AnalysisResult,
|
||||||
psi2ir: Psi2IrTranslator,
|
psi2ir: Psi2IrTranslator,
|
||||||
ktFilesToAnalyze: List<KtFile>,
|
ktFilesToAnalyze: List<KtFile>,
|
||||||
generatorExtensions: GeneratorExtensions,
|
generatorExtensions: GeneratorExtensions
|
||||||
stubGeneratorExtensions: StubGeneratorExtensions
|
|
||||||
): IrModuleFragment {
|
): IrModuleFragment {
|
||||||
if (!psi2ir.configuration.ignoreErrors) {
|
if (!psi2ir.configuration.ignoreErrors) {
|
||||||
analysisResult.throwIfError()
|
analysisResult.throwIfError()
|
||||||
AnalyzingUtils.throwExceptionOnErrors(analysisResult.bindingContext)
|
AnalyzingUtils.throwExceptionOnErrors(analysisResult.bindingContext)
|
||||||
}
|
}
|
||||||
return psi2ir.generateModule(
|
return psi2ir.generateModule(
|
||||||
analysisResult.moduleDescriptor, ktFilesToAnalyze, analysisResult.bindingContext, generatorExtensions,
|
analysisResult.moduleDescriptor, ktFilesToAnalyze, analysisResult.bindingContext, generatorExtensions
|
||||||
stubGeneratorExtensions
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private object IrTestStubGeneratorExtensions : StubGeneratorExtensions() {
|
|
||||||
private val jvm = JvmStubGeneratorExtensions()
|
|
||||||
|
|
||||||
override fun computeExternalDeclarationOrigin(descriptor: DeclarationDescriptor): IrDeclarationOrigin? =
|
|
||||||
jvm.computeExternalDeclarationOrigin(descriptor)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user