Problems reported:

parser/nnbd/issue_40267_method_call_with_type_arguments:5:13: Unexpected token ';'.
  a?<Foo>(b);
            ^

parser/nnbd/issue_40267_method_call_with_type_arguments:5:13: Expected a function body or '=>'.
  a?<Foo>(b);
            ^

parser/nnbd/issue_40267_method_call_with_type_arguments:6:1: Expected ':' before this.
}
^

parser/nnbd/issue_40267_method_call_with_type_arguments:6:1: Expected an identifier, but got '}'.
}
^

parser/nnbd/issue_40267_method_call_with_type_arguments:5:13: Expected ';' after this.
  a?<Foo>(b);
            ^

beginCompilationUnit(f)
  beginMetadataStar(f)
  endMetadataStar(0)
  beginTopLevelMember(f)
    beginTopLevelMethod(, null, null)
      handleNoType()
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(var)
        endMetadataStar(0)
        handleNoType(var)
        beginVariablesDeclaration(a, null, var)
          handleIdentifier(a, localVariableDeclaration)
          beginInitializedIdentifier(a)
            handleNoVariableInitializer(a)
          endInitializedIdentifier(a)
          handleIdentifier(b, localVariableDeclaration)
          beginInitializedIdentifier(b)
            handleNoVariableInitializer(b)
          endInitializedIdentifier(b)
        endVariablesDeclaration(2, ;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(?.)
        handleNoArguments(?.)
        handleSend(a, ?.)
        handleIdentifier(call, expressionContinuation)
        beginTypeArguments(<)
          handleIdentifier(Foo, typeReference)
          handleNoTypeArguments(>)
          handleType(Foo, null)
        endTypeArguments(1, <, >)
        beginArguments(()
          handleIdentifier(b, expression)
          handleNoTypeArguments())
          handleNoArguments())
          handleSend(b, ))
        endArguments(1, (, ))
        handleSend(call, ;)
        handleEndingBinaryExpression(?.)
        handleExpressionStatement(;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(?)
        handleNoArguments(?)
        handleSend(a, ?)
        beginConditionalExpression(?)
          beginTypeVariables(<)
            beginMetadataStar(Foo)
            endMetadataStar(0)
            handleIdentifier(Foo, typeVariableDeclaration)
            beginTypeVariable(Foo)
              handleTypeVariablesDefined(Foo, 1)
              handleNoType(Foo)
            endTypeVariable(>, 0, null, null)
          endTypeVariables(<, >)
          handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ;, ;)
          beginFunctionExpression(()
            beginFormalParameters((, MemberKind.Local)
              beginMetadataStar(b)
              endMetadataStar(0)
              beginFormalParameter(b, MemberKind.Local, null, null, null)
                handleNoType(()
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
            endFormalParameters(1, (, ), MemberKind.Local)
            handleAsyncModifier(null, null)
            handleRecoverableError(ExpectedBody, ;, ;)
            handleEmptyFunctionBody(;)
          endFunctionExpression((, })
          handleRecoverableError(Message[ExpectedButGot, Expected ':' before this., null, {string: :}], }, })
          handleConditionalExpressionColon()
          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
          handleIdentifier(, expression)
          handleNoTypeArguments(})
          handleNoArguments(})
          handleSend(, })
        endConditionalExpression(?, :)
        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
        handleExpressionStatement(;)
      endBlockFunctionBody(3, {, })
    endTopLevelMethod(f, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
