anchor.diff:  // 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 'package:analysis_server/src/edit/fix/dartfix_listener.dart';
   import 'package:analyzer/file_system/memory_file_system.dart';
   import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
   import 'package:analyzer_plugin/protocol/protocol_common.dart'
       hide NavigationTarget;
   import 'package:nnbd_migration/nnbd_migration.dart';
  +import 'package:nnbd_migration/src/front_end/dartfix_listener.dart';
   import 'package:nnbd_migration/src/front_end/migration_info.dart';
   import 'package:nnbd_migration/src/front_end/migration_state.dart';
   import 'package:nnbd_migration/src/front_end/offset_mapper.dart';
  
positive.code:     final content = 'void main() {}';
      file.writeAsStringSync(content);
      site.unitInfoMap[path] = UnitInfo(path)..diskContent = content;
      dartfixListener.addSourceChange(
          'test change',
          Location(path, 10, 0, 1, 10),
          SourceChange('test change', edits: [
            SourceFileEdit(path, 0, edits: [
              SourceEdit(10, 0, 'List args'),
              SourceEdit(13, 0, '\n  print(args);\n')
            ])
          ]));
      site.performApply();
      expect(file.readAsStringSync(), '''
  
negative.code:     file.writeAsStringSync(content);
      site.unitInfoMap[path] = UnitInfo(path)..diskContent = content;
      // Add a source change for analysis_options, which has no UnitInfo.
      dartfixListener.addSourceFileEdit(
          'enable experiment',
          Location(analysisOptionsPath, 9, 0, 1, 9),
          SourceFileEdit(analysisOptionsPath, 0, edits: [
            SourceEdit(9, 0, '\n  enable-experiment:\n  - non-nullable')
          ]));
      // This should not crash.
      site.performApply();
  