anchor.diff:    _SubstitutionNodeMatcher(this.inner, this.outer);
   
     @override
  +  void matched(NullabilityNode node) {
  +    if (node is NullabilityNodeForSubstitution) {
  +      inner.matched(node.innerNode);
  +      outer.matched(node.outerNode);
  +    } else {
  +      throw StateError(
  +          'matched should only be called on nodes for which matches returned '
  +          'true');
  +    }
  +  }
  +
  +  @override
     bool matches(NullabilityNode node) {
       return node is NullabilityNodeForSubstitution &&
           inner.matches(node.innerNode) &&
  
positive.code:   final NullabilityNode _expectation;
  
    _ExactNodeMatcher(this._expectation);
  
    @override
    bool matches(NullabilityNode node) => node == _expectation;
  
negative.code:   NullabilityNode get matchingNode => _matchingNodes.single;
  
    @override
    void matched(NullabilityNode node) {
      _matchingNodes.add(node);
    }
  
    @override
    bool matches(NullabilityNode node) {
      return true;
    }
  }
  