[FIR2IR] Slightly refactor DataClassMembersGenerator

This commit is contained in:
Mikhail Glukhikh
2020-04-23 13:33:48 +03:00
parent 07add635eb
commit 09f9e767ed
@@ -32,23 +32,17 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
// TODO: generateInlineClassMembers // TODO: generateInlineClassMembers
fun generateDataClassMembers(klass: FirClass<*>, irClass: IrClass): List<Name> = fun generateDataClassMembers(klass: FirClass<*>, irClass: IrClass): List<Name> =
MyDataClassMethodsGenerator(klass, irClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate() MyDataClassMethodsGenerator(irClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate(klass)
fun generateDataClassComponentBody(irFunction: IrFunction) = fun generateDataClassComponentBody(irFunction: IrFunction) =
MyDataClassMethodsGenerator(null, irFunction.parentAsClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER) MyDataClassMethodsGenerator(irFunction.parentAsClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER)
.generateComponentBody(irFunction) .generateComponentBody(irFunction)
fun generateDataClassCopyBody(irFunction: IrFunction) = fun generateDataClassCopyBody(irFunction: IrFunction) =
MyDataClassMethodsGenerator(null, irFunction.parentAsClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER) MyDataClassMethodsGenerator(irFunction.parentAsClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER)
.generateCopyBody(irFunction) .generateCopyBody(irFunction)
private inner class MyDataClassMethodsGenerator( private inner class MyDataClassMethodsGenerator(val irClass: IrClass, val origin: IrDeclarationOrigin) {
val klass: FirClass<*>?,
val irClass: IrClass,
val origin: IrDeclarationOrigin
) {
val properties = irClass.declarations.filterIsInstance<IrProperty>().map { it.descriptor }
private val irDataClassMembersGenerator = object : DataClassMembersGenerator( private val irDataClassMembersGenerator = object : DataClassMembersGenerator(
IrGeneratorContextBase(components.irBuiltIns), IrGeneratorContextBase(components.irBuiltIns),
components.symbolTable, components.symbolTable,
@@ -110,8 +104,9 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
(this.name == hashCodeName && matchesHashCodeSignature) || (this.name == hashCodeName && matchesHashCodeSignature) ||
(this.name == toStringName && matchesToStringSignature) (this.name == toStringName && matchesToStringSignature)
fun generate(): List<Name> { fun generate(klass: FirClass<*>): List<Name> {
if (properties.isEmpty() || klass == null) { val properties = irClass.declarations.filterIsInstance<IrProperty>().map { it.descriptor }
if (properties.isEmpty()) {
return emptyList() return emptyList()
} }