anchor.diff:      // TODO(brianwilkerson) Accept the last consumed token.
       // TODO(brianwilkerson) Return the last consumed token.
       Token beginToken = ensureIdentifier(token, context);
  -    token = listener.injectGenericCommentTypeList(beginToken.next);
  -    if (isValidMethodTypeArguments(token)) {
  -      token = parseTypeArgumentsOpt(token);
  -    } else {
  +    // TODO(brianwilkerson): Remove the invocation of `previous` when
  +    // `injectGenericCommentTypeList` returns the last consumed token.
  +    token = listener.injectGenericCommentTypeList(beginToken.next).previous;
  +    if (isValidMethodTypeArguments(token.next)) {
  +      token = parseTypeArgumentsOpt(token.next);
  +    } else {
  +      token = token.next;
         listener.handleNoTypeArguments(token);
       }
       token = parseArgumentsOpt(token);
  
positive.code:       if (isValidMethodTypeArguments(token)) {
          // For example a(b)..<T>(c), where token is '<'.
          typeArguments = token;
          token = parseTypeArgumentsOpt(token);
          assert(optional('(', token));
        }
        token = parseArgumentOrIndexStar(token, typeArguments);
  
negative.code:     /// The number of function types seen during analysis.
      int functionTypes = 0;
  
      /// The tokens before the start of type variables of function types seen
      /// during analysis. Notice that the tokens in this list might precede
      /// either `'<'` or `'('` as not all function types have type parameters.
      /// Also, it is safe to assume that [closeBraceTokenFor] will return
      /// non-null for all of the tokens following these tokens.
      Link<Token> typeVariableStarters = const Link<Token>();
  
      {
  