[FIR2IR] Code cleanup: DelegatedMemberGenerator

This commit is contained in:
Mikhail Glukhikh
2020-07-08 10:05:07 +03:00
parent d163853c97
commit 4a988f467a
@@ -54,11 +54,11 @@ internal class DelegatedMemberGenerator(
// Generate delegated members for [subClass]. The synthetic field [irField] has the super interface type. // Generate delegated members for [subClass]. The synthetic field [irField] has the super interface type.
fun generate(irField: IrField, subClass: IrClass) { fun generate(irField: IrField, subClass: IrClass) {
val superClass = (irField.type as IrSimpleTypeImpl)?.classOrNull?.owner ?: return val superClass = (irField.type as IrSimpleTypeImpl).classOrNull?.owner ?: return
val superClassId = superClass.classId ?: return val superClassId = superClass.classId ?: return
superClass.declarations?.filter { superClass.declarations.filter {
it.isDelegatable() && !subClass.declarations.any { decl -> isOverriding(irBuiltIns, decl, it) } it.isDelegatable() && !subClass.declarations.any { decl -> isOverriding(irBuiltIns, decl, it) }
}?.forEach { }.forEach {
if (it is IrSimpleFunction) { if (it is IrSimpleFunction) {
val firFunction = declarationStorage.findOverriddenFirFunction(it, superClassId) ?: return val firFunction = declarationStorage.findOverriddenFirFunction(it, superClassId) ?: return
val function = generateDelegatedFunction(subClass, irField, it, firFunction) val function = generateDelegatedFunction(subClass, irField, it, firFunction)
@@ -87,7 +87,7 @@ internal class DelegatedMemberGenerator(
private fun IrSimpleFunction.hasDefaultImplementation(): Boolean { private fun IrSimpleFunction.hasDefaultImplementation(): Boolean {
var realFunction: IrSimpleFunction? = this var realFunction: IrSimpleFunction? = this
while (realFunction != null && realFunction.isFakeOverride) { while (realFunction != null && realFunction.isFakeOverride) {
realFunction = realFunction.overriddenSymbols?.firstOrNull()?.owner realFunction = realFunction.overriddenSymbols.firstOrNull()?.owner
} }
return realFunction != null return realFunction != null
&& (realFunction.modality != Modality.ABSTRACT && realFunction.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB && (realFunction.modality != Modality.ABSTRACT && realFunction.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
@@ -125,7 +125,7 @@ internal class DelegatedMemberGenerator(
descriptor.bind(this) descriptor.bind(this)
declarationStorage.enterScope(this) declarationStorage.enterScope(this)
this.parent = subClass this.parent = subClass
overriddenSymbols += superFunction.symbol overriddenSymbols = listOf(superFunction.symbol)
dispatchReceiverParameter = declareThisReceiverParameter(symbolTable, subClass.defaultType, origin) dispatchReceiverParameter = declareThisReceiverParameter(symbolTable, subClass.defaultType, origin)
// TODO: type parameters from superFunctions and type substitution when super interface types are generic // TODO: type parameters from superFunctions and type substitution when super interface types are generic
superFunction.valueParameters.forEach { valueParameter -> superFunction.valueParameters.forEach { valueParameter ->