anchor.diff:      Token equals = token = token.next;
       assert(optional('=', equals));
       token = parseType(token.next);
  -    token = parseMixinApplicationRest(token.next);
  +    token = parseMixinApplicationRest(token).next;
       Token implementsKeyword = null;
       if (optional('implements', token)) {
         implementsKeyword = token;
  
positive.code:     return rewriter.insertToken(newToken, token);
    }
  
    /// Report the given token as unexpected and return the next token
    /// if the next token is one of the [expectedNext],
    /// otherwise just return the given token.
    Token skipUnexpectedTokenOpt(Token token, List<String> expectedNext) {
      if (token.keyword == null) {
        final String nextValue = token.next.stringValue;
        for (String expectedValue in expectedNext) {
          if (identical(nextValue, expectedValue)) {
            reportRecoverableErrorWithToken(token, fasta.templateUnexpectedToken);
            return token.next;
          }
        }
      }
  
negative.code:       Token start = token.next;
  
        // Check for extraneous token in the middle of an import statement.
        token = skipUnexpectedTokenOpt(
            token, const <String>['if', 'deferred', 'as', 'hide', 'show', ';']);
  
        // During recovery, clauses are parsed in the same order
        // and generate the same events as in the parseImport method above.
  