anchor.diff:      if (optional(':', token.next)) return token.next;
       Message message = fasta.templateExpectedButGot.withArguments(':');
       Token newToken = new SyntheticToken(TokenType.COLON, token.charOffset);
  -    return rewriteAndRecover(token, message, newToken);
  +    return rewriteAndRecover(token, message, newToken).next;
     }
   
     Token ensureParseLiteralString(Token token) {
  
positive.code:     if (optional(';', next)) return next;
      Message message = fasta.templateExpectedButGot.withArguments(';');
      Token newToken = new SyntheticToken(TokenType.SEMICOLON, next.charOffset);
      return rewriteAndRecover(token, message, newToken);
    }
  
    Token rewriteAndRecover(Token token, Message message, Token newToken) {
      reportRecoverableError(token.next, message);
      rewriter.insertTokenAfter(token, newToken);
      return newToken;
    }
  
    void rewriteGtCompositeOrRecover(Token token, Token next, String value) {
  
negative.code:             Message message = fasta.templateExpectedButGot.withArguments('.');
              Token newToken =
                  new SyntheticToken(TokenType.PERIOD, token.charOffset);
              periodAfterThis =
                  rewriteAndRecover(thisKeyword, message, newToken).next;
            } else {
              periodAfterThis = token;
            }
  