anchor.diff:      var contextMap = byKind.putIfAbsent(context, () => {});
       var key = _Keyword(keyword);
       contextMap[key] = (contextMap[key] ?? 0) + 1;
  +  }
  +
  +  /// Convert this data to a JSON encoded format.
  +  String toJson() {
  +    var map = <String, Map<String, String>>{};
  +    for (var contextEntry in byKind.entries) {
  +      var kindMap = <String, String>{};
  +      for (var kindEntry in contextEntry.value.entries) {
  +        kindMap[kindEntry.key.uniqueKey] = kindEntry.value.toString();
  +      }
  +      map[contextEntry.key] = kindMap;
  +    }
  +    return json.encode(map);
     }
   
     /// Add the data in the [source] map to the [target] map.
  
positive.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 file.
  
  import 'dart:io' as io;
  
  import 'package:_fe_analyzer_shared/src/base/syntactic_entity.dart';
  
negative.code:       instances.putIfAbsent(elementKind, () => _ElementKind._(elementKind));
  
    _ElementKind._(this.elementKind);
  
    @override
    String get uniqueKey => 'e${elementKind.name}';
  }
  
  /// A wrapper for a keyword to allow keywords and element kinds to be used as
  