anchor.diff:      return astFactory.implementsClause(keyword, interfaces);
     }
   
  -  /**
  -   * Parse an import directive. The [commentAndMetadata] is the metadata to be
  -   * associated with the directive. Return the import directive that was parsed.
  -   *
  -   * This method assumes that the current token matches `Keyword.IMPORT`.
  -   *
  -   *     importDirective ::=
  -   *         metadata 'import' stringLiteral configuration* (deferred)? ('as' identifier)? combinator*';'
  -   */
  +  /// Parse an import directive. The [commentAndMetadata] is the metadata to be
  +  /// associated with the directive. Return the import directive that was
  +  /// parsed.
  +  ///
  +  /// This method assumes that the current token matches `Keyword.IMPORT`.
  +  ///
  +  ///     importDirective ::=
  +  ///         metadata 'import' stringLiteral configuration* (deferred)? ('as' identifier)? combinator*';'
     ImportDirective parseImportDirective(CommentAndMetadata commentAndMetadata) {
       Token importKeyword = getAndAdvance();
       StringLiteral libraryUri = _parseUri();
  
positive.code:     return _createSyntheticToken(type);
    }
  
    /**
     * If the current token has the type [TokenType.GT], return it after advancing
     * to the next token. Otherwise report an error and create a synthetic token.
     */
    Token _expectGt() {
      if (_matchesGt()) {
        return getAndAdvance();
  
negative.code:     return false;
    }
  
    /// Return a synthetic token representing the given [keyword].
    Token _createSyntheticKeyword(Keyword keyword) =>
        _injectToken(new SyntheticKeywordToken(keyword, _currentToken.offset));
  
    /// Return a synthetic token with the given [type].
    Token _createSyntheticToken(TokenType type) =>
        _injectToken(new StringToken(type, "", _currentToken.offset));
  
    /// Create and return a new token with the given [type]. The token will
    /// replace the first portion of the given [token], so it will have the same
    /// offset and will have any comments that might have preceeded the token.
    Token _createToken(Token token, TokenType type, {bool isBegin: false}) {
      CommentToken comments = token.precedingComments;
      if (comments == null) {
  