anchor.diff:    /// [boundaryKey] is used as the boundary-key in the communication with the
     /// frontend server.
     // TODO(johnniwinther): Use (required) named arguments.
  -  void recompile(Uri invalidatedUri,
  +  void recompile(Uri? invalidatedUri,
         {String boundaryKey = 'abc',
  -      List<Uri> invalidatedUris,
  -      String entryPoint}) {
  +      List<Uri>? invalidatedUris,
  +      String? entryPoint}) {
       invalidatedUris ??= [if (invalidatedUri != null) invalidatedUri];
       outputParser.expectSources = true;
       inputStreamController.add('recompile '
  
positive.code:       // Second boundaryKey indicates end of frontend server response
        expectSources = true;
        _receivedResults.add(Result(
            s.length > _boundaryKey.length
                ? s.substring(_boundaryKey.length + 1)
                : null,
            _receivedSources));
        _boundaryKey = null;
      } else {
        if (_readingSources) {
          if (_receivedSources == null) {
            _receivedSources = <String>[];
          }
          _receivedSources.add(s);
        }
      }
    }
  }
  
  class Result {
    String status;
    List<String> sources;
  
    Result(this.status, this.sources);
  
    void expectNoErrors({String filename}) {
      var result = CompilationResult.parse(status);
      expect(result.errorsCount, equals(0));
      if (filename != null) {
  
negative.code: // for details. All rights reserved. Use of this source code is governed by a
  // BSD-style license that can be found in the LICENSE.md file.
  
  // ignore_for_file: empty_catches
  
  import 'dart:async';
  