Simplify ExternalDependenciesGenerator
Remove unused parameters, inline inner class
This commit is contained in:
@@ -172,7 +172,7 @@ fun compile(
|
|||||||
|
|
||||||
val context = if (compileMode.generateKlib) {
|
val context = if (compileMode.generateKlib) {
|
||||||
deserializedModuleFragments.forEach {
|
deserializedModuleFragments.forEach {
|
||||||
ExternalDependenciesGenerator(it.descriptor, symbolTable, irBuiltIns).generateUnboundSymbolsAsDependencies(it)
|
ExternalDependenciesGenerator(it.descriptor, symbolTable, irBuiltIns).generateUnboundSymbolsAsDependencies()
|
||||||
}
|
}
|
||||||
deserializedModuleFragments.forEach { it.patchDeclarationParents() }
|
deserializedModuleFragments.forEach { it.patchDeclarationParents() }
|
||||||
serializeModuleIntoKlib(
|
serializeModuleIntoKlib(
|
||||||
@@ -216,7 +216,7 @@ fun compile(
|
|||||||
context.symbolTable,
|
context.symbolTable,
|
||||||
context.irBuiltIns,
|
context.irBuiltIns,
|
||||||
deserializer = deserializer
|
deserializer = deserializer
|
||||||
).generateUnboundSymbolsAsDependencies(it)
|
).generateUnboundSymbolsAsDependencies()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: check the order
|
// TODO: check the order
|
||||||
@@ -229,10 +229,9 @@ fun compile(
|
|||||||
moduleDescriptor = context.module,
|
moduleDescriptor = context.module,
|
||||||
symbolTable = context.symbolTable,
|
symbolTable = context.symbolTable,
|
||||||
irBuiltIns = context.irBuiltIns
|
irBuiltIns = context.irBuiltIns
|
||||||
).generateUnboundSymbolsAsDependencies(moduleFragment)
|
).generateUnboundSymbolsAsDependencies()
|
||||||
moduleFragment.patchDeclarationParents()
|
moduleFragment.patchDeclarationParents()
|
||||||
|
|
||||||
|
|
||||||
jsPhases.invokeToplevel(context.phaseConfig, context, moduleFragment)
|
jsPhases.invokeToplevel(context.phaseConfig, context, moduleFragment)
|
||||||
|
|
||||||
moduleFragment.accept(IrModuleToJsTransformer(context), null)
|
moduleFragment.accept(IrModuleToJsTransformer(context), null)
|
||||||
|
|||||||
+1
-1
@@ -58,7 +58,7 @@ internal fun IrModuleFragment.replaceUnboundSymbols(context: JsIrBackendContext)
|
|||||||
descriptor,
|
descriptor,
|
||||||
symbolTable = context.symbolTable,
|
symbolTable = context.symbolTable,
|
||||||
irBuiltIns = context.irBuiltIns
|
irBuiltIns = context.irBuiltIns
|
||||||
).generateUnboundSymbolsAsDependencies(this)
|
).generateUnboundSymbolsAsDependencies()
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DeclarationSymbolCollector : IrElementVisitorVoid {
|
private class DeclarationSymbolCollector : IrElementVisitorVoid {
|
||||||
|
|||||||
@@ -23,13 +23,13 @@ object JvmBackendFacade {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun doGenerateFilesInternal(
|
internal fun doGenerateFilesInternal(
|
||||||
state: GenerationState,
|
state: GenerationState,
|
||||||
errorHandler: CompilationErrorHandler,
|
errorHandler: CompilationErrorHandler,
|
||||||
irModuleFragment: IrModuleFragment,
|
irModuleFragment: IrModuleFragment,
|
||||||
psi2irContext: GeneratorContext
|
psi2irContext: GeneratorContext
|
||||||
) {
|
) {
|
||||||
val jvmBackendContext = JvmBackendContext(
|
val jvmBackendContext = JvmBackendContext(
|
||||||
state, psi2irContext.sourceManager, psi2irContext.irBuiltIns, irModuleFragment, psi2irContext.symbolTable
|
state, psi2irContext.sourceManager, psi2irContext.irBuiltIns, irModuleFragment, psi2irContext.symbolTable
|
||||||
)
|
)
|
||||||
//TODO
|
//TODO
|
||||||
ExternalDependenciesGenerator(
|
ExternalDependenciesGenerator(
|
||||||
@@ -37,7 +37,7 @@ object JvmBackendFacade {
|
|||||||
psi2irContext.symbolTable,
|
psi2irContext.symbolTable,
|
||||||
psi2irContext.irBuiltIns,
|
psi2irContext.irBuiltIns,
|
||||||
JvmGeneratorExtensions.externalDeclarationOrigin
|
JvmGeneratorExtensions.externalDeclarationOrigin
|
||||||
).generateUnboundSymbolsAsDependencies(irModuleFragment)
|
).generateUnboundSymbolsAsDependencies()
|
||||||
|
|
||||||
val jvmBackend = JvmBackend(jvmBackendContext)
|
val jvmBackend = JvmBackend(jvmBackendContext)
|
||||||
|
|
||||||
@@ -45,11 +45,9 @@ object JvmBackendFacade {
|
|||||||
try {
|
try {
|
||||||
jvmBackend.generateFile(irFile)
|
jvmBackend.generateFile(irFile)
|
||||||
state.afterIndependentPart()
|
state.afterIndependentPart()
|
||||||
}
|
} catch (e: Throwable) {
|
||||||
catch (e: Throwable) {
|
|
||||||
errorHandler.reportException(e, null) // TODO ktFile.virtualFile.url
|
errorHandler.reportException(e, null) // TODO ktFile.virtualFile.url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class ModuleGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment, deserializer: IrDeserializer? = null) {
|
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment, deserializer: IrDeserializer? = null) {
|
||||||
ExternalDependenciesGenerator(
|
ExternalDependenciesGenerator(
|
||||||
irModule.descriptor, context.symbolTable, context.irBuiltIns, context.extensions.externalDeclarationOrigin, deserializer
|
irModule.descriptor, context.symbolTable, context.irBuiltIns, context.extensions.externalDeclarationOrigin, deserializer
|
||||||
).generateUnboundSymbolsAsDependencies(irModule, context.bindingContext)
|
).generateUnboundSymbolsAsDependencies()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateFiles(ktFiles: Collection<KtFile>): List<IrFile> {
|
private fun generateFiles(ktFiles: Collection<KtFile>): List<IrFile> {
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class IrLazyProperty(
|
|||||||
|
|
||||||
override var backingField: IrField? by lazyVar {
|
override var backingField: IrField? by lazyVar {
|
||||||
if (descriptor.hasBackingField(bindingContext)) {
|
if (descriptor.hasBackingField(bindingContext)) {
|
||||||
stubGenerator.generateFieldStub(descriptor, bindingContext).apply {
|
stubGenerator.generateFieldStub(descriptor).apply {
|
||||||
correspondingProperty = this@IrLazyProperty
|
correspondingProperty = this@IrLazyProperty
|
||||||
}
|
}
|
||||||
} else null
|
} else null
|
||||||
@@ -94,4 +94,4 @@ class IrLazyProperty(
|
|||||||
getter = getter?.run { transform(transformer, data) as IrSimpleFunction }
|
getter = getter?.run { transform(transformer, data) as IrSimpleFunction }
|
||||||
setter = setter?.run { transform(transformer, data) as IrSimpleFunction }
|
setter = setter?.run { transform(transformer, data) as IrSimpleFunction }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ class DeclarationStubGenerator(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateFieldStub(descriptor: PropertyDescriptor, bindingContext: BindingContext? = null): IrField {
|
fun generateFieldStub(descriptor: PropertyDescriptor): IrField {
|
||||||
val referenced = symbolTable.referenceField(descriptor)
|
val referenced = symbolTable.referenceField(descriptor)
|
||||||
if (referenced.isBound) {
|
if (referenced.isBound) {
|
||||||
return referenced.owner
|
return referenced.owner
|
||||||
|
|||||||
+31
-40
@@ -19,58 +19,49 @@ package org.jetbrains.kotlin.ir.util
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
|
||||||
|
|
||||||
class ExternalDependenciesGenerator(
|
class ExternalDependenciesGenerator(
|
||||||
moduleDescriptor: ModuleDescriptor,
|
moduleDescriptor: ModuleDescriptor,
|
||||||
val symbolTable: SymbolTable,
|
val symbolTable: SymbolTable,
|
||||||
val irBuiltIns: IrBuiltIns,
|
val irBuiltIns: IrBuiltIns,
|
||||||
externalDeclarationOrigin: ((DeclarationDescriptor) -> IrDeclarationOrigin)? = null,
|
externalDeclarationOrigin: ((DeclarationDescriptor) -> IrDeclarationOrigin)? = null,
|
||||||
val deserializer: IrDeserializer? = null
|
private val deserializer: IrDeserializer? = null
|
||||||
) {
|
) {
|
||||||
private val stubGenerator = DeclarationStubGenerator(
|
private val stubGenerator = DeclarationStubGenerator(
|
||||||
moduleDescriptor, symbolTable, irBuiltIns.languageVersionSettings, externalDeclarationOrigin, deserializer
|
moduleDescriptor, symbolTable, irBuiltIns.languageVersionSettings, externalDeclarationOrigin, deserializer
|
||||||
)
|
)
|
||||||
|
|
||||||
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment, bindingContext: BindingContext? = null) {
|
fun generateUnboundSymbolsAsDependencies() {
|
||||||
DependencyGenerationTask(irModule, bindingContext).run()
|
stubGenerator.unboundSymbolGeneration = true
|
||||||
}
|
ArrayList(symbolTable.unboundClasses).forEach {
|
||||||
|
stubGenerator.generateClassStub(it.descriptor)
|
||||||
private inner class DependencyGenerationTask(val irModule: IrModuleFragment, val bindingContext: BindingContext?) {
|
|
||||||
|
|
||||||
fun run() {
|
|
||||||
stubGenerator.unboundSymbolGeneration = true
|
|
||||||
ArrayList(symbolTable.unboundClasses).forEach {
|
|
||||||
stubGenerator.generateClassStub(it.descriptor)
|
|
||||||
}
|
|
||||||
ArrayList(symbolTable.unboundConstructors).forEach {
|
|
||||||
stubGenerator.generateConstructorStub(it.descriptor)
|
|
||||||
}
|
|
||||||
ArrayList(symbolTable.unboundEnumEntries).forEach {
|
|
||||||
stubGenerator.generateEnumEntryStub(it.descriptor)
|
|
||||||
}
|
|
||||||
ArrayList(symbolTable.unboundFields).forEach {
|
|
||||||
stubGenerator.generateFieldStub(it.descriptor, bindingContext)
|
|
||||||
}
|
|
||||||
ArrayList(symbolTable.unboundSimpleFunctions).forEach {
|
|
||||||
stubGenerator.generateFunctionStub(it.descriptor)
|
|
||||||
}
|
|
||||||
ArrayList(symbolTable.unboundTypeParameters).forEach {
|
|
||||||
stubGenerator.generateOrGetTypeParameterStub(it.descriptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
deserializer?.declareForwardDeclarations()
|
|
||||||
|
|
||||||
if (deserializer != null) return
|
|
||||||
|
|
||||||
assert(symbolTable.unboundClasses.isEmpty())
|
|
||||||
assert(symbolTable.unboundConstructors.isEmpty())
|
|
||||||
assert(symbolTable.unboundEnumEntries.isEmpty())
|
|
||||||
assert(symbolTable.unboundFields.isEmpty())
|
|
||||||
assert(symbolTable.unboundSimpleFunctions.isEmpty())
|
|
||||||
assert(symbolTable.unboundTypeParameters.isEmpty())
|
|
||||||
}
|
}
|
||||||
|
ArrayList(symbolTable.unboundConstructors).forEach {
|
||||||
|
stubGenerator.generateConstructorStub(it.descriptor)
|
||||||
|
}
|
||||||
|
ArrayList(symbolTable.unboundEnumEntries).forEach {
|
||||||
|
stubGenerator.generateEnumEntryStub(it.descriptor)
|
||||||
|
}
|
||||||
|
ArrayList(symbolTable.unboundFields).forEach {
|
||||||
|
stubGenerator.generateFieldStub(it.descriptor)
|
||||||
|
}
|
||||||
|
ArrayList(symbolTable.unboundSimpleFunctions).forEach {
|
||||||
|
stubGenerator.generateFunctionStub(it.descriptor)
|
||||||
|
}
|
||||||
|
ArrayList(symbolTable.unboundTypeParameters).forEach {
|
||||||
|
stubGenerator.generateOrGetTypeParameterStub(it.descriptor)
|
||||||
|
}
|
||||||
|
|
||||||
|
deserializer?.declareForwardDeclarations()
|
||||||
|
|
||||||
|
if (deserializer != null) return
|
||||||
|
|
||||||
|
assert(symbolTable.unboundClasses.isEmpty())
|
||||||
|
assert(symbolTable.unboundConstructors.isEmpty())
|
||||||
|
assert(symbolTable.unboundEnumEntries.isEmpty())
|
||||||
|
assert(symbolTable.unboundFields.isEmpty())
|
||||||
|
assert(symbolTable.unboundSimpleFunctions.isEmpty())
|
||||||
|
assert(symbolTable.unboundTypeParameters.isEmpty())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user