Simplify ExternalDependenciesGenerator

Remove unused parameters, inline inner class
This commit is contained in:
Alexander Udalov
2019-02-26 18:20:42 +01:00
parent 4b712bd14b
commit 9d94a54f03
7 changed files with 46 additions and 58 deletions
@@ -64,7 +64,7 @@ class IrLazyProperty(
override var backingField: IrField? by lazyVar {
if (descriptor.hasBackingField(bindingContext)) {
stubGenerator.generateFieldStub(descriptor, bindingContext).apply {
stubGenerator.generateFieldStub(descriptor).apply {
correspondingProperty = this@IrLazyProperty
}
} else null
@@ -94,4 +94,4 @@ class IrLazyProperty(
getter = getter?.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)
if (referenced.isBound) {
return referenced.owner
@@ -19,58 +19,49 @@ package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
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.resolve.BindingContext
class ExternalDependenciesGenerator(
moduleDescriptor: ModuleDescriptor,
val symbolTable: SymbolTable,
val irBuiltIns: IrBuiltIns,
externalDeclarationOrigin: ((DeclarationDescriptor) -> IrDeclarationOrigin)? = null,
val deserializer: IrDeserializer? = null
private val deserializer: IrDeserializer? = null
) {
private val stubGenerator = DeclarationStubGenerator(
moduleDescriptor, symbolTable, irBuiltIns.languageVersionSettings, externalDeclarationOrigin, deserializer
)
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment, bindingContext: BindingContext? = null) {
DependencyGenerationTask(irModule, bindingContext).run()
}
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())
fun generateUnboundSymbolsAsDependencies() {
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)
}
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())
}
}