@@ -9,7 +9,7 @@ import 'comparators.dart';
99const int _hashMask = 0x7fffffff ;
1010
1111/// A generic equality relation on objects.
12- abstract class Equality <E > {
12+ abstract interface class Equality <E > {
1313 const factory Equality () = DefaultEquality <E >;
1414
1515 /// Compare two elements for being equal.
@@ -46,7 +46,7 @@ abstract class Equality<E> {
4646///
4747/// It's also possible to pass an additional equality instance that should be
4848/// used to compare the value itself.
49- class EqualityBy <E , F > implements Equality <E > {
49+ final class EqualityBy <E , F > implements Equality <E > {
5050 final F Function (E ) _comparisonKey;
5151
5252 final Equality <F > _inner;
@@ -81,7 +81,7 @@ class EqualityBy<E, F> implements Equality<E> {
8181/// Note that [equals] and [hash] take `Object` s rather than `E` s. This allows
8282/// `E` to be inferred as `Null` in const contexts where `E` wouldn't be a
8383/// 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 > {
8585 const DefaultEquality ();
8686 @override
8787 bool equals (Object ? e1, Object ? e2) => e1 == e2;
@@ -92,7 +92,7 @@ class DefaultEquality<E> implements Equality<E> {
9292}
9393
9494/// 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 > {
9696 const IdentityEquality ();
9797 @override
9898 bool equals (E e1, E e2) => identical (e1, e2);
@@ -109,7 +109,7 @@ class IdentityEquality<E> implements Equality<E> {
109109/// The [equals] and [hash] methods accepts `null` values,
110110/// even if the [isValidKey] returns `false` for `null` .
111111/// The [hash] of `null` is `null.hashCode` .
112- class IterableEquality <E > implements Equality <Iterable <E >> {
112+ final class IterableEquality <E > implements Equality <Iterable <E >> {
113113 final Equality <E ?> _elementEquality;
114114 const IterableEquality (
115115 [Equality <E > elementEquality = const DefaultEquality <Never >()])
@@ -161,7 +161,7 @@ class IterableEquality<E> implements Equality<Iterable<E>> {
161161/// The [equals] and [hash] methods accepts `null` values,
162162/// even if the [isValidKey] returns `false` for `null` .
163163/// The [hash] of `null` is `null.hashCode` .
164- class ListEquality <E > implements Equality <List <E >> {
164+ final class ListEquality <E > implements Equality <List <E >> {
165165 final Equality <E > _elementEquality;
166166 const ListEquality (
167167 [Equality <E > elementEquality = const DefaultEquality <Never >()])
@@ -202,7 +202,7 @@ class ListEquality<E> implements Equality<List<E>> {
202202 bool isValidKey (Object ? o) => o is List <E >;
203203}
204204
205- abstract class _UnorderedEquality <E , T extends Iterable <E >>
205+ abstract final class _UnorderedEquality <E , T extends Iterable <E >>
206206 implements Equality <T > {
207207 final Equality <E > _elementEquality;
208208
@@ -251,7 +251,8 @@ abstract class _UnorderedEquality<E, T extends Iterable<E>>
251251/// Two iterables are considered equal if they have the same number of elements,
252252/// and the elements of one set can be paired with the elements
253253/// 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 >> {
255256 const UnorderedIterableEquality (
256257 [super .elementEquality = const DefaultEquality <Never >()]);
257258
@@ -271,7 +272,7 @@ class UnorderedIterableEquality<E> extends _UnorderedEquality<E, Iterable<E>> {
271272/// The [equals] and [hash] methods accepts `null` values,
272273/// even if the [isValidKey] returns `false` for `null` .
273274/// 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 >> {
275276 const SetEquality ([super .elementEquality = const DefaultEquality <Never >()]);
276277
277278 @override
@@ -282,7 +283,7 @@ class SetEquality<E> extends _UnorderedEquality<E, Set<E>> {
282283///
283284/// The class represents a map entry as a single object,
284285/// using a combined hashCode and equality of the key and value.
285- class _MapEntry {
286+ final class _MapEntry {
286287 final MapEquality equality;
287288 final Object ? key;
288289 final Object ? value;
@@ -309,7 +310,7 @@ class _MapEntry {
309310/// The [equals] and [hash] methods accepts `null` values,
310311/// even if the [isValidKey] returns `false` for `null` .
311312/// 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 >> {
313314 final Equality <K > _keyEquality;
314315 final Equality <V > _valueEquality;
315316 const MapEquality (
@@ -372,7 +373,7 @@ class MapEquality<K, V> implements Equality<Map<K, V>> {
372373/// for `equals(e1, e2)` and `equals(e2, e1)` . This can happen if one equality
373374/// considers only `e1` a valid key, and not `e2` , but an equality which is
374375/// checked later, allows both.
375- class MultiEquality <E > implements Equality <E > {
376+ final class MultiEquality <E > implements Equality <E > {
376377 final Iterable <Equality <E >> _equalities;
377378
378379 const MultiEquality (Iterable <Equality <E >> equalities)
@@ -418,7 +419,7 @@ class MultiEquality<E> implements Equality<E> {
418419///
419420/// A list is only equal to another list, likewise for sets and maps. All other
420421/// iterables are compared as iterables only.
421- class DeepCollectionEquality implements Equality {
422+ final class DeepCollectionEquality implements Equality {
422423 final Equality _base;
423424 final bool _unordered;
424425 const DeepCollectionEquality ([Equality base = const DefaultEquality <Never >()])
@@ -476,7 +477,7 @@ class DeepCollectionEquality implements Equality {
476477/// String equality that's insensitive to differences in ASCII case.
477478///
478479/// Non-ASCII characters are compared as-is, with no conversion.
479- class CaseInsensitiveEquality implements Equality <String > {
480+ final class CaseInsensitiveEquality implements Equality <String > {
480481 const CaseInsensitiveEquality ();
481482
482483 @override
0 commit comments