Skip to content

Commit a64fd2f

Browse files
knaeckeKamidavidmorgan
authored andcommitted
refactor(built_value_generator): generate hashCode by using n statements for n fields instead of one nested expression that is nested n levels deep
1 parent 3e26f69 commit a64fd2f

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

built_value_generator/lib/src/value_source_class.dart

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,15 +1202,24 @@ abstract class ValueSourceClass
12021202
if (comparedFields.isEmpty) {
12031203
result.writeln('return ${name.hashCode};');
12041204
} else {
1205-
result.writeln(
1206-
'return ${generateMemoizedHashCode ? '__hashCode ??= ' : ''}\$jf(');
1207-
result.writeln(r'$jc(' * comparedFields.length);
1208-
// Use a different seed for builders than for values, so they do not have
1209-
// identical hashCodes if the values are identical.
1210-
result.writeln(forBuilder ? '1, ' : '0, ');
1211-
result.write(
1212-
comparedFields.map((field) => '${field.name}.hashCode').join('), '));
1213-
result.writeln('));');
1205+
if (generateMemoizedHashCode) {
1206+
result.writeln('if (__hashCode != null) return __hashCode$notNull;');
1207+
}
1208+
1209+
final seed = forBuilder ? 1 : 0;
1210+
result.writeln('int hash = $seed;');
1211+
1212+
for (var field in comparedFields) {
1213+
result.writeln('hash = \$jc(hash, ${field.name}.hashCode);');
1214+
}
1215+
1216+
result.writeln('hash = \$jf(hash);');
1217+
1218+
if (generateMemoizedHashCode) {
1219+
result.writeln('return __hashCode ??= hash;');
1220+
} else {
1221+
result.writeln('return hash;');
1222+
}
12141223
}
12151224
result.writeln('}');
12161225
result.writeln();

0 commit comments

Comments
 (0)