beginCompilationUnit(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields()
      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, 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, ;)
        handleEndingBinaryExpression(..)
      endCascade()
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(List, get, ;)
  endTopLevelDeclaration()
endCompilationUnit(2, )
