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)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, )
      handleNoType(const)
      handleIdentifier(annotation, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleLiteralNull(null)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, const, 1, const, ;)
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Annotation, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, Annotation)
      handleNoType(Annotation)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
            handleIdentifier(String, typeReference)
            handleNoTypeArguments(message)
            handleType(String, null)
            handleIdentifier(message, fieldDeclaration)
            handleNoFieldInitializer(;)
          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(const)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, 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, null, ., message, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, const, (, null, ;)
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(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, null, null, A)
      handleNoType(>)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(C, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, C)
      handleNoType(C)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(m)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, 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, (, ConstructorReferenceContext.New)
              beginArguments(()
              endArguments(0, (, ))
            endNewExpression(new)
            handleExpressionFunctionBody(=>, ;)
          endClassMethod(null, m, (, null, ;)
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(4, )
