Problems reported:

parser/error_recovery/issue_22314:11:16: Type arguments can't have annotations because they aren't declarations.
  m() => new A<@annotation @Annotation("test") C>();
               ^^^^^^^^^^^

parser/error_recovery/issue_22314:11:28: Type arguments can't have annotations because they aren't declarations.
  m() => new A<@annotation @Annotation("test") C>();
                           ^^^^^^^^^^^^^^^^^^^

beginCompilationUnit(const)
  beginMetadataStar(const)
  endMetadataStar(0)
  beginTopLevelMember(const)
    handleNoType(const)
    handleIdentifier(annotation, topLevelVariableDeclaration)
    beginFieldInitializer(=)
      handleLiteralNull(null)
    endFieldInitializer(=, ;)
  endTopLevelFields(null, null, null, null, const, 1, const, ;)
endTopLevelDeclaration(class)
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrNamedMixinApplicationPrelude(class)
  handleIdentifier(Annotation, classOrMixinDeclaration)
  handleNoTypeVariables({)
  beginClassDeclaration(class, null, Annotation)
    handleNoType(Annotation)
    handleClassExtends(null, 1)
    handleClassNoWithClause()
    handleClassOrMixinImplements(null, 0)
    handleClassHeader(class, class, null)
    beginClassOrMixinBody(DeclarationKind.Class, {)
      beginMetadataStar(final)
      endMetadataStar(0)
      beginMember()
        handleIdentifier(String, typeReference)
        handleNoTypeArguments(message)
        handleType(String, null)
        handleIdentifier(message, fieldDeclaration)
        handleNoFieldInitializer(;)
      endClassFields(null, null, null, null, null, final, 1, final, ;)
    endMember()
    beginMetadataStar(const)
    endMetadataStar(0)
    beginMember()
      beginMethod(null, null, null, const, null, Annotation)
        handleNoType(const)
        handleIdentifier(Annotation, methodDeclaration)
        handleNoTypeVariables(()
        beginFormalParameters((, MemberKind.NonStaticMethod)
          beginMetadataStar(this)
          endMetadataStar(0)
          beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
            handleNoType(()
            handleIdentifier(message, fieldInitializer)
            handleFormalParameterWithoutValue())
          endFormalParameter(this, ., message, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
        handleNoInitializers()
        handleAsyncModifier(null, null)
        handleEmptyFunctionBody(;)
      endClassConstructor(null, const, (, null, ;)
    endMember()
  endClassOrMixinBody(DeclarationKind.Class, 2, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(class)
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrNamedMixinApplicationPrelude(class)
handleIdentifier(A, classOrMixinDeclaration)
beginTypeVariables(<)
  beginMetadataStar(E)
  endMetadataStar(0)
  handleIdentifier(E, typeVariableDeclaration)
  beginTypeVariable(E)
    handleTypeVariablesDefined(E, 1)
    handleNoType(E)
  endTypeVariable(>, 0, null, null)
endTypeVariables(<, >)
beginClassDeclaration(class, null, A)
  handleNoType(>)
  handleClassExtends(null, 1)
  handleClassNoWithClause()
  handleClassOrMixinImplements(null, 0)
  handleClassHeader(class, class, null)
  beginClassOrMixinBody(DeclarationKind.Class, {)
  endClassOrMixinBody(DeclarationKind.Class, 0, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(class)
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrNamedMixinApplicationPrelude(class)
handleIdentifier(C, classOrMixinDeclaration)
handleNoTypeVariables({)
beginClassDeclaration(class, null, C)
  handleNoType(C)
  handleClassExtends(null, 1)
  handleClassNoWithClause()
  handleClassOrMixinImplements(null, 0)
  handleClassHeader(class, class, null)
  beginClassOrMixinBody(DeclarationKind.Class, {)
    beginMetadataStar(m)
    endMetadataStar(0)
    beginMember()
      beginMethod(null, null, null, null, null, m)
        handleNoType({)
        handleIdentifier(m, methodDeclaration)
        handleNoTypeVariables(()
        beginFormalParameters((, MemberKind.NonStaticMethod)
        endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
        handleNoInitializers()
        handleAsyncModifier(null, null)
        beginNewExpression(new)
          handleIdentifier(A, constructorReference)
          beginConstructorReference(A)
            beginTypeArguments(<)
              handleRecoverableError(AnnotationOnTypeArgument, @, annotation)
              handleRecoverableError(AnnotationOnTypeArgument, @, ))
              handleIdentifier(C, typeReference)
              handleNoTypeArguments(>)
              handleType(C, null)
            endTypeArguments(1, <, >)
            handleNoConstructorReferenceContinuationAfterTypeArguments(()
          endConstructorReference(A, null, ()
          beginArguments(()
          endArguments(0, (, ))
        endNewExpression(new)
        handleExpressionFunctionBody(=>, ;)
      endClassMethod(null, m, (, null, ;)
    endMember()
  endClassOrMixinBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration()
endCompilationUnit(4, )
