// Copyright (c) 2016, 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 '../boolean_selector.dart';

/// A selector that matches all inputs.
class All implements BooleanSelector {
  // TODO(nweiz): Stop explicitly providing a type argument when sdk#32412 is
  // fixed.
  @override
  final variables = const <String>[];

  const All();

  @override
  bool evaluate(semantics) => true;

  @override
  BooleanSelector intersection(BooleanSelector other) => other;

  @override
  BooleanSelector union(BooleanSelector other) => this;

  @override
  void validate(bool Function(String variable) isDefined) {}

  @override
  String toString() => '<all>';
}
