Coverage report for lib/src/rule/metadata.dart

Line coverage: 14 / 18 (77.8%)

All files > lib/src/rule/metadata.dart

1
// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
2
// for details. All rights reserved. Use of this source code is governed by a
3
// BSD-style license that can be found in the LICENSE file.
4
5
library dart_style.src.rule.metadata;
6
7
import 'argument.dart';
8
import 'rule.dart';
9
10
/// Rule for handling splits between parameter metadata annotations and the
11
/// following parameter.
12
///
13
/// Metadata annotations for parameters (and type parameters) get some special
14
/// handling. We use a single rule for all annotations in the parameter list.
15
/// If any of the annotations split, they all do.
16
///
17
/// Also, if the annotations split, we force the entire parameter list to fully
18
/// split, both named and positional.
19
class MetadataRule extends Rule {
20
  Rule _positionalRule;
21
  Rule _namedRule;
22
23
  /// Remembers that [rule] is the [PositionalRule] used by the argument list
24
  /// containing the parameter metadata using this rule.
252
  void bindPositionalRule(PositionalRule rule) {
262
    _positionalRule = rule;
27
  }
28
29
  /// Remembers that [rule] is the [NamedRule] used by the argument list
30
  /// containing the parameter metadata using this rule.
312
  void bindNamedRule(NamedRule rule) {
322
    _namedRule = rule;
33
  }
34
35
  /// Constrains the surrounding argument list rules to fully split if the
36
  /// metadata does.
372
  int constrain(int value, Rule other) {
382
    var constrained = super.constrain(value, other);
39
    if (constrained != null) return constrained;
40
41
    // If the metadata doesn't split, we don't care what the arguments do.
422
    if (value == Rule.unsplit) return null;
43
44
    // Otherwise, they have to split.
450
    if (other == _positionalRule) return _positionalRule.fullySplitValue;
460
    if (other == _namedRule) return _namedRule.fullySplitValue;
47
48
    return null;
49
  }
50
512
  void addConstrainedRules(Set<Rule> rules) {
526
    if (_positionalRule != null) rules.add(_positionalRule);
536
    if (_namedRule != null) rules.add(_namedRule);
54
  }
55
562
  void forgetUnusedRules() {
572
    super.forgetUnusedRules();
586
    if (_positionalRule != null && _positionalRule.index == null) {
590
      _positionalRule = null;
60
    }
61
626
    if (_namedRule != null && _namedRule.index == null) {
630
      _namedRule = null;
64
    }
65
  }
66
}