anchor.diff:      // TODO(brianwilkerson) Return the last consumed token.
       assert(optional('const', token));
       Token constKeyword = token;
  -    token = listener.injectGenericCommentTypeList(token.next);
  -    final String value = token.stringValue;
  +    // TODO(brianwilkerson) Remove the invocation of `previous` when
  +    // `injectGenericCommentTypeList` returns the last consumed token.
  +    token = listener.injectGenericCommentTypeList(token.next).previous;
  +    Token next = token.next;
  +    final String value = next.stringValue;
       if ((identical(value, '[')) || (identical(value, '[]'))) {
  -      listener.beginConstLiteral(token);
  -      listener.handleNoTypeArguments(token);
  -      token = parseLiteralListSuffix(token, constKeyword).next;
  +      listener.beginConstLiteral(next);
  +      listener.handleNoTypeArguments(next);
  +      token = parseLiteralListSuffix(next, constKeyword).next;
         listener.endConstLiteral(token);
         return token;
       }
       if (identical(value, '{')) {
  -      listener.beginConstLiteral(token);
  -      listener.handleNoTypeArguments(token);
  -      token = parseLiteralMapSuffix(token, constKeyword).next;
  +      listener.beginConstLiteral(next);
  +      listener.handleNoTypeArguments(next);
  +      token = parseLiteralMapSuffix(next, constKeyword).next;
         listener.endConstLiteral(token);
         return token;
       }
       if (identical(value, '<')) {
  -      listener.beginConstLiteral(token);
  -      token = parseLiteralListOrMapOrFunction(token, constKeyword);
  +      listener.beginConstLiteral(next);
  +      token = parseLiteralListOrMapOrFunction(next, constKeyword);
         listener.endConstLiteral(token);
         return token;
       }
       listener.beginConstExpression(constKeyword);
  -    token = parseConstructorReference(token);
  +    token = parseConstructorReference(token.next);
       token = parseRequiredArguments(token).next;
       listener.endConstExpression(constKeyword);
       return token;
  
positive.code:     Token afterModifiers =
          identifiers.isNotEmpty ? identifiers.head.next : start.next;
      token = isField
          ? parseFields(start.next, identifiers.reverse(), type, name, false)
          : parseMethod(start.next, afterModifiers, type, getOrSet, name);
      listener.endMember();
      return token;
    }
  
    Token parseMethod(Token token, Token afterModifiers, Token type,
        Token getOrSet, Token name) {
      // TODO(brianwilkerson) Accept the last consumed token.
      Token start = token;
  
      Token externalModifier;
      Token staticModifier;
  
negative.code:   }
  
    Token parseClassOrNamedMixinApplication(Token abstractToken, Token token) {
      token = token.next;
      listener.beginClassOrNamedMixinApplication(token);
      Token begin = abstractToken ?? token;
      if (abstractToken != null) {
  