@@ -1031,7 +1031,10 @@ class DartObjectImpl implements DartObject, Constant {
10311031
10321032 /// Set the `index` and `_name` fields for this enum constant.
10331033 void updateEnumConstant ({required int index, required String name}) {
1034- var fields = state.fields! ;
1034+ var state = this .state as GenericState ;
1035+ state._hashCode = null ;
1036+
1037+ var fields = state.fields;
10351038 fields['index' ] = DartObjectImpl (
10361039 _typeSystem,
10371040 _typeSystem.typeProvider.intType,
@@ -1486,6 +1489,9 @@ class GenericState extends InstanceState {
14861489 /// The values of the fields of this instance.
14871490 final Map <String , DartObjectImpl > _fieldMap;
14881491
1492+ /// The cached hash code.
1493+ int ? _hashCode;
1494+
14891495 /// Information about the constructor invoked to generate this instance.
14901496 final ConstructorInvocationImpl ? invocation;
14911497
@@ -1499,11 +1505,10 @@ class GenericState extends InstanceState {
14991505
15001506 @override
15011507 int get hashCode {
1502- int hashCode = 0 ;
1503- for (DartObjectImpl value in _fieldMap.values) {
1504- hashCode += value.hashCode;
1505- }
1506- return hashCode;
1508+ return _hashCode ?? = Object .hashAll ([
1509+ ..._fieldMap.keys,
1510+ ..._fieldMap.values,
1511+ ]);
15071512 }
15081513
15091514 @override
@@ -2552,6 +2557,9 @@ class ListState extends InstanceState {
25522557 @override
25532558 final bool isUnknown;
25542559
2560+ @override
2561+ late final int hashCode = Object .hashAll (elements);
2562+
25552563 ListState ({
25562564 required TypeImpl elementType,
25572565 required this .elements,
@@ -2562,16 +2570,6 @@ class ListState extends InstanceState {
25622570 factory ListState .unknown (TypeImpl elementType) =>
25632571 ListState (elementType: elementType, elements: [], isUnknown: true );
25642572
2565- @override
2566- int get hashCode {
2567- int value = 0 ;
2568- int count = elements.length;
2569- for (int i = 0 ; i < count; i++ ) {
2570- value = (value << 3 ) ^ elements[i].hashCode;
2571- }
2572- return value;
2573- }
2574-
25752573 @override
25762574 String get typeName => "List" ;
25772575
@@ -2651,6 +2649,12 @@ class MapState extends InstanceState {
26512649 /// Whether the map contains an entry that has an unknown value.
26522650 final bool _isUnknown;
26532651
2652+ @override
2653+ late final int hashCode = Object .hashAll ([
2654+ ...entries.keys,
2655+ ...entries.values,
2656+ ]);
2657+
26542658 /// Initializes a newly created state to represent a set with the given
26552659 /// [entries] .
26562660 MapState ({
@@ -2670,15 +2674,6 @@ class MapState extends InstanceState {
26702674 isUnknown: true ,
26712675 );
26722676
2673- @override
2674- int get hashCode {
2675- int value = 0 ;
2676- for (DartObjectImpl key in entries.keys.toSet ()) {
2677- value = (value << 3 ) ^ key.hashCode;
2678- }
2679- return value;
2680- }
2681-
26822677 @override
26832678 bool get isUnknown => _isUnknown;
26842679
@@ -2830,7 +2825,7 @@ class RecordState extends InstanceState {
28302825 final Map <String , DartObjectImpl > namedFields;
28312826
28322827 @override
2833- late final hashCode = Object .hashAll ([
2828+ late final int hashCode = Object .hashAll ([
28342829 ...positionalFields,
28352830 ...namedFields.values,
28362831 ]);
@@ -2957,6 +2952,9 @@ class SetState extends InstanceState {
29572952 /// Whether the set contains an entry that has an unknown value.
29582953 final bool _isUnknown;
29592954
2955+ @override
2956+ late final int hashCode = Object .hashAll (elements);
2957+
29602958 /// Initializes a newly created state to represent a set with the given
29612959 /// [elements] .
29622960 SetState ({
@@ -2970,15 +2968,6 @@ class SetState extends InstanceState {
29702968 factory SetState .unknown (TypeImpl elementType) =>
29712969 SetState (elementType: elementType, elements: {}, isUnknown: true );
29722970
2973- @override
2974- int get hashCode {
2975- int value = 0 ;
2976- for (DartObjectImpl element in elements) {
2977- value = (value << 3 ) ^ element.hashCode;
2978- }
2979- return value;
2980- }
2981-
29822971 @override
29832972 bool get isUnknown => _isUnknown;
29842973
0 commit comments