beginCompilationUnit(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    handleNoType(var)
    handleIdentifier(a, topLevelVariableDeclaration)
    handleNoFieldInitializer(,)
    handleIdentifier(b, topLevelVariableDeclaration)
    handleNoFieldInitializer(,)
    handleIdentifier(c, topLevelVariableDeclaration)
    handleNoFieldInitializer(,)
    handleIdentifier(d, topLevelVariableDeclaration)
    handleNoFieldInitializer(,)
    handleIdentifier(e, topLevelVariableDeclaration)
    handleNoFieldInitializer(;)
  endTopLevelFields(null, null, null, var, 5, var, ;)
endTopLevelDeclaration(List)
beginMetadataStar(List)
endMetadataStar(0)
beginTopLevelMember(List)
  beginTopLevelMethod(;, null)
    handleIdentifier(List, typeReference)
    handleNoTypeArguments(get)
    handleType(List, null)
    handleIdentifier(f, topLevelFunctionDeclaration)
    handleNoTypeVariables(=>)
    handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
    handleAsyncModifier(null, null)
    handleIdentifier(a, expression)
    handleNoTypeArguments(..)
    handleNoArguments(..)
    handleSend(a, ..)
    beginCascade(..)
      handleIdentifier(addAll, expressionContinuation)
      handleNoTypeArguments(()
      beginArguments(()
        handleIdentifier(b, expression)
        handleNoTypeArguments(&&)
        handleNoArguments(&&)
        handleSend(b, &&)
        handleUnaryPrefixExpression(!)
        beginBinaryExpression(&&)
        handleIdentifier(c, expression)
        handleNoTypeArguments([)
        handleNoArguments([)
        handleSend(c, [)
        handleIdentifier(d, expression)
        handleNoTypeArguments(])
        handleNoArguments(])
        handleSend(d, ])
        handleIndexedExpression(null, [, ])
        endBinaryExpression(&&)
        beginConditionalExpression(?)
          handleNoTypeArguments([)
          handleIdentifier(a, expression)
          handleNoTypeArguments(,)
          handleNoArguments(,)
          handleSend(a, ,)
          handleIdentifier(e, expression)
          handleNoTypeArguments(()
          beginArguments(()
            handleIdentifier(f, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(f, ))
          endArguments(1, (, ))
          handleSend(e, ])
          handleLiteralList(2, [, null, ])
          handleConditionalExpressionColon()
          handleNoTypeArguments([)
          handleIdentifier(a, expression)
          handleNoTypeArguments(])
          handleNoArguments(])
          handleSend(a, ])
          handleLiteralList(1, [, null, ])
        endConditionalExpression(?, :)
      endArguments(1, (, ))
      handleSend(addAll, ;)
      endBinaryExpression(..)
    endCascade()
    handleExpressionFunctionBody(=>, ;)
  endTopLevelMethod(List, get, ;)
endTopLevelDeclaration()
endCompilationUnit(2, )
