anchor.diff:  
     @override
     void addEdit(Source source, SourceEdit edit) {
  +    if (edit.replacement == '') {
  +      return;
  +    }
  +
  +    if (edit.replacement.contains('!')) {
  +      ++numNullChecksAdded;
  +    }
  +
  +    if (edit.replacement.contains('(')) {
  +      ++numInsertedParenthesis;
  +    }
  +
       if (edit.replacement == '?' && edit.length == 0) {
         ++numTypesMadeNullable;
  -    } else if (edit.replacement == '!' && edit.length == 0) {
  -      ++numNullChecksAdded;
       } else if (edit.replacement == "import 'package:meta/meta.dart';\n" &&
           edit.length == 0) {
         ++numMetaImportsAdded;
       } else if (edit.replacement == 'required ' && edit.length == 0) {
         ++numRequiredAnnotationsAdded;
  +    } else if (edit.replacement == 'late ' && edit.length == 0) {
  +      ++numVariablesMarkedLate;
  +    } else if (edit.replacement.startsWith(' as ') && edit.length == 0) {
  +      ++numInsertedCasts;
       } else if ((edit.replacement == '/* ' ||
               edit.replacement == ' /*' ||
               edit.replacement == '; /*') &&
           edit.length == 0) {
         ++numDeadCodeSegmentsFound;
  -    } else if ((edit.replacement == '*/ ' || edit.replacement == ' */') &&
  +    } else if ((edit.replacement == '*/ ' ||
  +            edit.replacement == ' */' ||
  +            edit.replacement == ')' ||
  +            edit.replacement == '!' ||
  +            edit.replacement == '(') &&
           edit.length == 0) {
  -      // Already counted
       } else {
  -      print('addEdit($source, $edit)');
  +      numOtherEdits++;
       }
     }
   
  
positive.code:   int numRequiredAnnotationsAdded = 0;
  
    int numDeadCodeSegmentsFound = 0;
  
    String currentPackage;
  
  
negative.code:       'SDK at ${sdk.sdkPath} not compiled with --nnbd, use --sdk option');
  }
  
  class ExceptionCategory {
    final String topOfStack;
    final List<MapEntry<String, int>> exceptionCountPerPackage;
  
    ExceptionCategory(this.topOfStack, Map<String, int> exceptions)
        : this.exceptionCountPerPackage = exceptions.entries.toList()
            ..sort((e1, e2) => e2.value.compareTo(e1.value));
  
    int get count => exceptionCountPerPackage.length;
  
    List<String> get packageNames =>
        [for (var entry in exceptionCountPerPackage) entry.key];
  
    Iterable<String> get packageNamesAndCounts =>
        exceptionCountPerPackage.map((entry) => '${entry.key} x${entry.value}');
  
    String toString() => '$topOfStack (${packageNamesAndCounts.join(', ')})';
  }
  
  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
  