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, [)
      endBinaryExpression(.)
      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, )
