Jaguar-dart/jaguar_serializer

== 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?

Kleak commented

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 ?