// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'interfaces.dart'; import 'type_matcher.dart'; /// A package-private [TypeMatcher] implementation that makes it easy for /// subclasses to validate aspects of specific types while providing consistent /// type checking. abstract class FeatureMatcher extends TypeMatcher { const FeatureMatcher(); @override bool matches(dynamic item, Map matchState) => super.matches(item, matchState) && typedMatches(item as T, matchState); bool typedMatches(T item, Map matchState); @override Description describeMismatch( Object? item, Description mismatchDescription, Map matchState, bool verbose, ) { if (item is T) { return describeTypedMismatch( item, mismatchDescription, matchState, verbose, ); } return super.describe(mismatchDescription.add('not an ')); } Description describeTypedMismatch( T item, Description mismatchDescription, Map matchState, bool verbose, ) => mismatchDescription; }