anchor.diff:    Token parseClass(Token token, Token begin, Token classKeyword) {
       Token start = token;
       token = parseClassHeader(token, begin, classKeyword);
  -    if (!optional('{', token)) {
  +    if (!optional('{', token.next)) {
         // Recovery
         token = parseClassHeaderRecovery(start, begin, classKeyword);
       }
  -    token = parseClassBody(token, start.next);
  +    token = parseClassBody(token.next, start.next);
       listener.endClassDeclaration(begin, token);
       return token;
     }
   
     Token parseClassHeader(Token token, Token begin, Token classKeyword) {
  -    // TODO(brianwilkerson) Return the last consumed token.
       // TODO(brianwilkerson): Rename to `parseClassHeaderOpt`?
  -    token = parseClassExtendsOpt(token.next);
  +    token = parseClassExtendsOpt(token);
       token = parseClassImplementsOpt(token);
       Token nativeToken;
  -    if (optional('native', token)) {
  -      nativeToken = token;
  -      token = parseNativeClause(nativeToken).next;
  +    if (optional('native', token.next)) {
  +      nativeToken = token.next;
  +      token = parseNativeClause(nativeToken);
       }
       listener.handleClassHeader(begin, classKeyword, nativeToken);
       return token;
  
positive.code:       start = token;
  
        // Check for extraneous token in the middle of a class header.
        // TODO(brianwilkerson): Remove the invocation of `previous` when
        // `parseClassHeader` returns the last consumed token.
        token = skipUnexpectedTokenOpt(
            token.previous, const <String>['extends', 'with', 'implements', '{']);
  
        // During recovery, clauses are parsed in the same order
        // and generate the same events as in the parseClassHeader method above.
  
negative.code:         rewriter.insertToken(extendsKeyword, next);
          rewriter.insertToken(superclassToken, next);
          token = parseType(extendsKeyword.next);
          token = parseMixinApplicationRest(token);
          listener.handleClassExtends(extendsKeyword);
        } else {
          token = parseClassExtendsOpt(token);
  
          if (recoveryListener.extendsKeyword != null) {
            if (hasExtends) {
  