anchor.diff:  import 'package:analyzer_plugin/protocol/protocol_common.dart';
   import 'package:nnbd_migration/nnbd_migration.dart';
   
  -main() async {
  +main(List<String> args) async {
  +  if (args.length > 1) {
  +    throw 'invalid args. Specify *one* argument to get exceptions of interest.';
  +  }
  +
  +  warnOnNoAssertions();
  +  String categoryOfInterest = args.isEmpty ? null : args.single;
     var rootUri = Platform.script.resolve('../../..');
  -  var listener = _Listener();
  +  var listener = _Listener(categoryOfInterest);
     for (var testPath in [
       'third_party/pkg/charcode',
       'third_party/pkg/collection',
  
positive.code:   int numRequiredAnnotationsAdded = 0;
  
    int numDeadCodeSegmentsFound = 0;
  
    @override
    void addEdit(SingleNullabilityFix fix, SourceEdit edit) {
  
negative.code:   for (var entry in sortedExceptions) {
      print('  ${entry.key} (x${entry.value.length})');
    }
  
    if (categoryOfInterest == null) {
      print('\n(Note: to show stack traces & nodes for a particular failure,'
          ' rerun with a search string as an argument.)');
    }
  }
  
  void warnOnNoAssertions() {
    try {
      assert(false);
    } catch (e) {
      return;
    }
  
    print('''
  !!!
  !!! Warning! You didn't --enable-asserts!
  !!!
  ''');
  }
  
  class _Listener implements NullabilityMigrationListener {
    /// Set this to `true` to cause just the exception nodes to be printed when
    /// `_Listener.categoryOfInterest` is non-null.  Set this to `false` to cause
    /// the full stack trace to be printed.
    /// TODO(mfairhurst): make this a cli flag?
    static const bool printExceptionNodeOnly = false;
  
    /// Set this to a non-null value to cause any exception to be printed in full
    /// if its category contains the string.
    final String categoryOfInterest;
  
    final groupedExceptions = <String, List<String>>{};
  
    int numExceptions = 0;
  