beginCompilationUnit(Logger)
  beginMetadataStar(Logger)
  endMetadataStar(0)
  beginTopLevelMember(Logger)
    beginTopLevelMethod(, null)
      handleIdentifier(Logger, typeReference)
      handleNoTypeArguments(get)
      handleType(Logger, null)
      handleIdentifier(log, topLevelFunctionDeclaration)
      handleNoTypeVariables(=>)
      handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleIdentifier(Zone, expression)
      handleNoTypeArguments(.)
      handleNoArguments(.)
      handleSend(Zone, .)
      handleIdentifier(current, expressionContinuation)
      handleNoTypeArguments([)
      handleNoArguments([)
      handleSend(current, [)
      handleEndingBinaryExpression(.)
      handleIdentifier(logKey, expression)
      handleNoTypeArguments(])
      handleNoArguments(])
      handleSend(logKey, ])
      handleIndexedExpression(null, [, ])
      beginAsOperatorType(as)
        handleIdentifier(Logger, typeReference)
        handleNoTypeArguments(?)
        handleType(Logger, ?)
      endAsOperatorType(as)
      handleAsOperator(as)
      beginBinaryExpression(??)
        handleIdentifier(_default, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(_default, ;)
      endBinaryExpression(??)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(Logger, get, ;)
  endTopLevelDeclaration()
endCompilationUnit(1, )
