beginCompilationUnit(enum)
  beginMetadataStar(enum)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(enum)
    handleIdentifier(E, enumDeclaration)
    beginEnum(enum)
      handleNoTypeVariables({)
      handleEnumNoWithClause()
      handleImplements(null, 0)
      handleEnumHeader(enum, {)
      beginMetadataStar(x)
      endMetadataStar(0)
      handleIdentifier(x, enumValueDeclaration)
      handleNoTypeNameInConstructorReference(;)
      beginConstructorReference(x)
        handleNoTypeArguments(;)
        handleNoConstructorReferenceContinuationAfterTypeArguments(;)
      endConstructorReference(x, null, ;, ConstructorReferenceContext.Const)
      handleNoArguments(x)
      handleEnumElement({)
      handleEnumElements(;, 1)
      beginMetadataStar(String)
      endMetadataStar(0)
      beginMember()
        beginMethod(DeclarationKind.Enum, null, null, null, null, null, null, hello)
          handleIdentifier(String, typeReference)
          handleNoTypeArguments(hello)
          handleType(String, null)
          handleIdentifier(hello, methodDeclaration)
          handleNoTypeVariables(()
          beginFormalParameters((, MemberKind.NonStaticMethod)
          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          beginBlockFunctionBody({)
            handleIdentifier(print, expression)
            handleNoTypeArguments(()
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
            handleSend(print, ;)
            handleExpressionStatement(;)
            beginReturnStatement(return)
              beginLiteralString("hello")
              endLiteralString(0, ;)
            endReturnStatement(true, return, ;)
          endBlockFunctionBody(2, {, })
        endEnumMethod(null, String, (, null, })
      endMember()
    endEnum(enum, {, 1)
  endTopLevelDeclaration()
endCompilationUnit(1, )
