Add 'generateModule' method to CodegenFactory
This commit is contained in:
@@ -18,25 +18,28 @@ package org.jetbrains.kotlin.backend.jvm
|
||||
|
||||
import org.jetbrains.kotlin.codegen.CompilationErrorHandler
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
||||
|
||||
object JvmBackendFacade {
|
||||
fun compileCorrectFiles(state: GenerationState, errorHandler: CompilationErrorHandler) {
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||
state.beforeCompile()
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||
doGenerateFiles(state.files, state, errorHandler)
|
||||
}
|
||||
|
||||
fun doGenerateFiles(files: Collection<KtFile>, state: GenerationState, errorHandler: CompilationErrorHandler) {
|
||||
// TODO multifile classes support
|
||||
|
||||
val psi2ir = Psi2IrTranslator()
|
||||
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext)
|
||||
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files)
|
||||
|
||||
doGenerateFilesInternal(state, errorHandler, irModuleFragment, psi2irContext)
|
||||
}
|
||||
|
||||
internal fun doGenerateFilesInternal(
|
||||
state: GenerationState,
|
||||
errorHandler: CompilationErrorHandler,
|
||||
irModuleFragment: IrModuleFragment,
|
||||
psi2irContext: GeneratorContext
|
||||
) {
|
||||
val jvmBackendContext = JvmBackendContext(
|
||||
state, psi2irContext.sourceManager, psi2irContext.irBuiltIns, irModuleFragment, psi2irContext.symbolTable
|
||||
)
|
||||
|
||||
@@ -23,8 +23,19 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
||||
|
||||
object JvmIrCodegenFactory : CodegenFactory {
|
||||
|
||||
override fun generateModule(state: GenerationState, files: Collection<KtFile?>, errorHandler: CompilationErrorHandler) {
|
||||
assert(!files.any { it == null })
|
||||
|
||||
val psi2ir = Psi2IrTranslator()
|
||||
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext)
|
||||
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files as Collection<KtFile>)
|
||||
JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, psi2irContext)
|
||||
}
|
||||
|
||||
override fun createPackageCodegen(state: GenerationState, files: Collection<KtFile>, fqName: FqName, registry: PackagePartRegistry): PackageCodegen {
|
||||
val impl = PackageCodegenImpl(state, files, fqName, registry)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user