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:6:1: Expected ';' after this.
}
^

beginCompilationUnit(f)
  beginMetadataStar(f)
  endMetadataStar(0)
  beginTopLevelMember(f)
    beginTopLevelMethod(, 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, {token: ;}], ;, ;)
          beginFunctionExpression(()
            beginFormalParameters((, MemberKind.Local)
              beginMetadataStar(b)
              endMetadataStar(0)
              beginFormalParameter(b, MemberKind.Local, null, null, null)
                handleNoType(()
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, 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 '}'., {token: }}], }, })
          handleIdentifier(, expression)
          handleNoTypeArguments(})
          handleNoArguments(})
          handleSend(, })
        endConditionalExpression(?, :)
        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
        handleExpressionStatement(;)
      endBlockFunctionBody(3, {, })
    endTopLevelMethod(f, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
