anchor.diff:    final int selectionLength;
     final bool isDeprecated;
     final bool isPotential;
  -  @optional final String docSummary;
  -  @optional final String docComplete;
  -  @optional final String declaringType;
  -  @optional final String defaultArgumentListString;
  -  @optional final List<int> defaultArgumentListTextRanges;
  -  @optional final Element element;
  -  @optional final String returnType;
  -  @optional final List<String> parameterNames;
  -  @optional final List<String> parameterTypes;
  -  @optional final int requiredParameterCount;
  -  @optional final bool hasNamedParameters;
  -  @optional final String parameterName;
  -  @optional final String parameterType;
  -  @optional final String importUri;
  -
  -  CompletionSuggestion(this.kind, this.relevance, this.completion, this.selectionOffset, this.selectionLength, this.isDeprecated, this.isPotential, {this.docSummary, this.docComplete, this.declaringType, this.defaultArgumentListString, this.defaultArgumentListTextRanges, this.element, this.returnType, this.parameterNames, this.parameterTypes, this.requiredParameterCount, this.hasNamedParameters, this.parameterName, this.parameterType, this.importUri});
  -
  -  String toString() => '[CompletionSuggestion kind: ${kind}, relevance: ${relevance}, completion: ${completion}, selectionOffset: ${selectionOffset}, selectionLength: ${selectionLength}, isDeprecated: ${isDeprecated}, isPotential: ${isPotential}]';
  +  @optional
  +  final String docSummary;
  +  @optional
  +  final String docComplete;
  +  @optional
  +  final String declaringType;
  +  @optional
  +  final String defaultArgumentListString;
  +  @optional
  +  final List<int> defaultArgumentListTextRanges;
  +  @optional
  +  final Element element;
  +  @optional
  +  final String returnType;
  +  @optional
  +  final List<String> parameterNames;
  +  @optional
  +  final List<String> parameterTypes;
  +  @optional
  +  final int requiredParameterCount;
  +  @optional
  +  final bool hasNamedParameters;
  +  @optional
  +  final String parameterName;
  +  @optional
  +  final String parameterType;
  +  @optional
  +  final String importUri;
  +
  +  CompletionSuggestion(
  +      this.kind,
  +      this.relevance,
  +      this.completion,
  +      this.selectionOffset,
  +      this.selectionLength,
  +      this.isDeprecated,
  +      this.isPotential,
  +      {this.docSummary,
  +      this.docComplete,
  +      this.declaringType,
  +      this.defaultArgumentListString,
  +      this.defaultArgumentListTextRanges,
  +      this.element,
  +      this.returnType,
  +      this.parameterNames,
  +      this.parameterTypes,
  +      this.requiredParameterCount,
  +      this.hasNamedParameters,
  +      this.parameterName,
  +      this.parameterType,
  +      this.importUri});
  +
  +  String toString() =>
  +      '[CompletionSuggestion kind: ${kind}, relevance: ${relevance}, completion: ${completion}, selectionOffset: ${selectionOffset}, selectionLength: ${selectionLength}, isDeprecated: ${isDeprecated}, isPotential: ${isPotential}]';
   }
   
   class ContextData {
     static ContextData parse(Map m) {
       if (m == null) return null;
  -    return new ContextData(m['name'], m['explicitFileCount'], m['implicitFileCount'], m['workItemQueueLength'], m['cacheEntryExceptions'] == null ? null : new List.from(m['cacheEntryExceptions']));
  +    return new ContextData(
  +        m['name'],
  +        m['explicitFileCount'],
  +        m['implicitFileCount'],
  +        m['workItemQueueLength'],
  +        m['cacheEntryExceptions'] == null
  +            ? null
  +            : new List.from(m['cacheEntryExceptions']));
     }
   
     final String name;
  
positive.code: 
    SearchResult(this.location, this.kind, this.isPotential, this.path);
  
    String toString() => '[SearchResult location: ${location}, kind: ${kind}, isPotential: ${isPotential}, path: ${path}]';
  }
  
  class SourceChange {
    static SourceChange parse(Map m) {
      if (m == null) return null;
      return new SourceChange(m['message'], m['edits'] == null ? null : new List.from(m['edits'].map((obj) => SourceFileEdit.parse(obj))), m['linkedEditGroups'] == null ? null : new List.from(m['linkedEditGroups'].map((obj) => LinkedEditGroup.parse(obj))), selection: Position.parse(m['selection']));
    }
  
    final String message;
    final List<SourceFileEdit> edits;
    final List<LinkedEditGroup> linkedEditGroups;
    @optional final Position selection;
  
    SourceChange(this.message, this.edits, this.linkedEditGroups, {this.selection});
  
    String toString() => '[SourceChange message: ${message}, edits: ${edits}, linkedEditGroups: ${linkedEditGroups}]';
  }
  
  class SourceEdit implements Jsonable {
    static SourceEdit parse(Map m) {
      if (m == null) return null;
      return new SourceEdit(m['offset'], m['length'], m['replacement'], id: m['id']);
    }
  
    final int offset;
    final int length;
    final String replacement;
    @optional final String id;
  
    Map toMap() => _stripNullValues({'offset': offset, 'length': length, 'replacement': replacement, 'id': id});
  
    SourceEdit(this.offset, this.length, this.replacement, {this.id});
  
    String toString() => '[SourceEdit offset: ${offset}, length: ${length}, replacement: ${replacement}]';
  }
  
  class SourceFileEdit {
    static SourceFileEdit parse(Map m) {
      if (m == null) return null;
      return new SourceFileEdit(m['file'], m['fileStamp'], m['edits'] == null ? null : new List.from(m['edits'].map((obj) => SourceEdit.parse(obj))));
    }
  
    final String file;
  
negative.code:   ServerDomain(Server server) : super(server, 'server');
  
    Stream<ServerConnected> get onConnected {
      return _listen('server.connected', ServerConnected.parse)
          as Stream<ServerConnected>;
    }
  
    Stream<ServerError> get onError {
      return _listen('server.error', ServerError.parse) as Stream<ServerError>;
    }
  
    Stream<ServerStatus> get onStatus {
      return _listen('server.status', ServerStatus.parse) as Stream<ServerStatus>;
    }
  
    Future<VersionResult> getVersion() =>
        _call('server.getVersion').then(VersionResult.parse);
  
    Future shutdown() => _call('server.shutdown');
  
    Future setSubscriptions(List<String> subscriptions) =>
        _call('server.setSubscriptions', {'subscriptions': subscriptions});
  }
  
  class ServerConnected {
    static ServerConnected parse(Map m) =>
        new ServerConnected(m['version'], m['pid'], sessionId: m['sessionId']);
  
    final String version;
    final int pid;
    @optional
    final String sessionId;
  
    ServerConnected(this.version, this.pid, {this.sessionId});
  }
  
  class ServerError {
    static ServerError parse(Map m) =>
        new ServerError(m['isFatal'], m['message'], m['stackTrace']);
  
    final bool isFatal;
    final String message;
  