@@ -9,7 +9,7 @@ import 'comparators.dart';
9
9
const int _hashMask = 0x7fffffff ;
10
10
11
11
/// A generic equality relation on objects.
12
- abstract class Equality <E > {
12
+ abstract interface class Equality <E > {
13
13
const factory Equality () = DefaultEquality <E >;
14
14
15
15
/// Compare two elements for being equal.
@@ -46,7 +46,7 @@ abstract class Equality<E> {
46
46
///
47
47
/// It's also possible to pass an additional equality instance that should be
48
48
/// used to compare the value itself.
49
- class EqualityBy <E , F > implements Equality <E > {
49
+ final class EqualityBy <E , F > implements Equality <E > {
50
50
final F Function (E ) _comparisonKey;
51
51
52
52
final Equality <F > _inner;
@@ -81,7 +81,7 @@ class EqualityBy<E, F> implements Equality<E> {
81
81
/// Note that [equals] and [hash] take `Object` s rather than `E` s. This allows
82
82
/// `E` to be inferred as `Null` in const contexts where `E` wouldn't be a
83
83
/// compile-time constant, while still allowing the class to be used at runtime.
84
- class DefaultEquality <E > implements Equality <E > {
84
+ final class DefaultEquality <E > implements Equality <E > {
85
85
const DefaultEquality ();
86
86
@override
87
87
bool equals (Object ? e1, Object ? e2) => e1 == e2;
@@ -92,7 +92,7 @@ class DefaultEquality<E> implements Equality<E> {
92
92
}
93
93
94
94
/// Equality of objects that compares only the identity of the objects.
95
- class IdentityEquality <E > implements Equality <E > {
95
+ final class IdentityEquality <E > implements Equality <E > {
96
96
const IdentityEquality ();
97
97
@override
98
98
bool equals (E e1, E e2) => identical (e1, e2);
@@ -109,7 +109,7 @@ class IdentityEquality<E> implements Equality<E> {
109
109
/// The [equals] and [hash] methods accepts `null` values,
110
110
/// even if the [isValidKey] returns `false` for `null` .
111
111
/// The [hash] of `null` is `null.hashCode` .
112
- class IterableEquality <E > implements Equality <Iterable <E >> {
112
+ final class IterableEquality <E > implements Equality <Iterable <E >> {
113
113
final Equality <E ?> _elementEquality;
114
114
const IterableEquality (
115
115
[Equality <E > elementEquality = const DefaultEquality <Never >()])
@@ -161,7 +161,7 @@ class IterableEquality<E> implements Equality<Iterable<E>> {
161
161
/// The [equals] and [hash] methods accepts `null` values,
162
162
/// even if the [isValidKey] returns `false` for `null` .
163
163
/// The [hash] of `null` is `null.hashCode` .
164
- class ListEquality <E > implements Equality <List <E >> {
164
+ final class ListEquality <E > implements Equality <List <E >> {
165
165
final Equality <E > _elementEquality;
166
166
const ListEquality (
167
167
[Equality <E > elementEquality = const DefaultEquality <Never >()])
@@ -202,7 +202,7 @@ class ListEquality<E> implements Equality<List<E>> {
202
202
bool isValidKey (Object ? o) => o is List <E >;
203
203
}
204
204
205
- abstract class _UnorderedEquality <E , T extends Iterable <E >>
205
+ abstract final class _UnorderedEquality <E , T extends Iterable <E >>
206
206
implements Equality <T > {
207
207
final Equality <E > _elementEquality;
208
208
@@ -251,7 +251,8 @@ abstract class _UnorderedEquality<E, T extends Iterable<E>>
251
251
/// Two iterables are considered equal if they have the same number of elements,
252
252
/// and the elements of one set can be paired with the elements
253
253
/// of the other iterable, so that each pair are equal.
254
- class UnorderedIterableEquality <E > extends _UnorderedEquality <E , Iterable <E >> {
254
+ final class UnorderedIterableEquality <E >
255
+ extends _UnorderedEquality <E , Iterable <E >> {
255
256
const UnorderedIterableEquality (
256
257
[super .elementEquality = const DefaultEquality <Never >()]);
257
258
@@ -271,7 +272,7 @@ class UnorderedIterableEquality<E> extends _UnorderedEquality<E, Iterable<E>> {
271
272
/// The [equals] and [hash] methods accepts `null` values,
272
273
/// even if the [isValidKey] returns `false` for `null` .
273
274
/// The [hash] of `null` is `null.hashCode` .
274
- class SetEquality <E > extends _UnorderedEquality <E , Set <E >> {
275
+ final class SetEquality <E > extends _UnorderedEquality <E , Set <E >> {
275
276
const SetEquality ([super .elementEquality = const DefaultEquality <Never >()]);
276
277
277
278
@override
@@ -282,7 +283,7 @@ class SetEquality<E> extends _UnorderedEquality<E, Set<E>> {
282
283
///
283
284
/// The class represents a map entry as a single object,
284
285
/// using a combined hashCode and equality of the key and value.
285
- class _MapEntry {
286
+ final class _MapEntry {
286
287
final MapEquality equality;
287
288
final Object ? key;
288
289
final Object ? value;
@@ -309,7 +310,7 @@ class _MapEntry {
309
310
/// The [equals] and [hash] methods accepts `null` values,
310
311
/// even if the [isValidKey] returns `false` for `null` .
311
312
/// The [hash] of `null` is `null.hashCode` .
312
- class MapEquality <K , V > implements Equality <Map <K , V >> {
313
+ final class MapEquality <K , V > implements Equality <Map <K , V >> {
313
314
final Equality <K > _keyEquality;
314
315
final Equality <V > _valueEquality;
315
316
const MapEquality (
@@ -372,7 +373,7 @@ class MapEquality<K, V> implements Equality<Map<K, V>> {
372
373
/// for `equals(e1, e2)` and `equals(e2, e1)` . This can happen if one equality
373
374
/// considers only `e1` a valid key, and not `e2` , but an equality which is
374
375
/// checked later, allows both.
375
- class MultiEquality <E > implements Equality <E > {
376
+ final class MultiEquality <E > implements Equality <E > {
376
377
final Iterable <Equality <E >> _equalities;
377
378
378
379
const MultiEquality (Iterable <Equality <E >> equalities)
@@ -418,7 +419,7 @@ class MultiEquality<E> implements Equality<E> {
418
419
///
419
420
/// A list is only equal to another list, likewise for sets and maps. All other
420
421
/// iterables are compared as iterables only.
421
- class DeepCollectionEquality implements Equality {
422
+ final class DeepCollectionEquality implements Equality {
422
423
final Equality _base;
423
424
final bool _unordered;
424
425
const DeepCollectionEquality ([Equality base = const DefaultEquality <Never >()])
@@ -476,7 +477,7 @@ class DeepCollectionEquality implements Equality {
476
477
/// String equality that's insensitive to differences in ASCII case.
477
478
///
478
479
/// Non-ASCII characters are compared as-is, with no conversion.
479
- class CaseInsensitiveEquality implements Equality <String > {
480
+ final class CaseInsensitiveEquality implements Equality <String > {
480
481
const CaseInsensitiveEquality ();
481
482
482
483
@override
0 commit comments