code: private JsDocToken parseModifiesTag(JsDocToken token) {
      if (token == JsDocToken.LEFT_CURLY) {
        Set<String> modifies = new HashSet<>();
        while (true) {
          if (match(JsDocToken.STRING)) {
            String name = stream.getString();
            if (!modifiesAnnotationKeywords.contains(name)
                && !jsdocBuilder.hasParameter(name)) {
              addParserWarning("msg.jsdoc.modifies.unknown", name);
            }
  
            modifies.add(stream.getString());
            token = next();
          } else {
            addParserWarning("msg.jsdoc.modifies");
            return token;
          }
  
          if (match(JsDocToken.PIPE)) {
            token = next();
          } else {
            break;
          }
        }
  
        if (!match(JsDocToken.RIGHT_CURLY)) {
          addParserWarning("msg.jsdoc.modifies");
        } else {
          token = next();
          if (!jsdocBuilder.recordModifies(modifies)) {
            addParserWarning("msg.jsdoc.modifies.duplicate");
          }
        }
      }
      return token;
    }
docs: Parse a {@code @modifies} tag of the form
  {@code @modifies&#123;this|arguments|param&#125;}.
  
  @param token The current token.