== and hashcode generation
jaumard opened this issue · 7 comments
Would be nice to have == and hashcode generated for us as it's annoying to make them each time we change the model
How do we handle hashCode?
Having an annotation at model level @GenModelHelper or something to override == and hashcode, in addition a clone and toString methods would be just a feature killer for me^^
Ok. But how do we compute hashCode?
When using IntelliJ, it can generate those with some shortcut, here is what it generate:
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is CashRegisterState &&
runtimeType == other.runtimeType &&
quantity == other.quantity &&
product == other.product &&
amountCharacters == other.amountCharacters &&
mode == other.mode;
@override
int get hashCode =>
quantity.hashCode ^
product.hashCode ^
amountCharacters.hashCode ^
mode.hashCode;
So it's quite easy to generate I'll say :) just list all fields with .hashCode
and join with ^
Shouldnt it be:
int get hashCode =>
quantity?.hashCode ?? 0 ^
product?.hashCode ?? 0 ^
amountCharacters?.hashCode ?? 0 ^
mode?.hashCode ?? 0;
What happens when there is a an iterable or a map?
Hum yes looks more right, on map/iterable IntelliJ does the same, just .hashCode on them, maybe worth taking a look at how built_value is doing it ?