anchor.diff:          kind = ParameterKind.REQUIRED;
         } else if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
           rightCurlyBracket = getAndAdvance();
  -        currentParameters = normalParameters;
           if (leftCurlyBracket == null) {
             if (leftSquareBracket != null) {
               _reportErrorForCurrentToken(
  
positive.code:       //
        FormalParameter parameter = _parseFormalParameter(kind);
        parameters.add(parameter);
        currentParameters.add(parameter);
        if (kind == ParameterKind.REQUIRED && wasOptionalParameter) {
          _reportErrorForNode(
              ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter);
  
negative.code:    */
    CommentAndMetadata _parseCommentAndMetadata() {
      Comment comment = _parseDocumentationComment();
      List<Annotation> metadata = null;
      while (_matches(TokenType.AT)) {
        metadata ??= new List<Annotation>();
        metadata.add(parseAnnotation());
        Comment optionalComment = _parseDocumentationComment();
        if (optionalComment != null) {
          comment = optionalComment;
        }
      }
      metadata ??= const <Annotation>[];
      return new CommentAndMetadata(comment, metadata);
    }
  
  