beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Foo, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, Foo)
      handleNoType(Foo)
      handleClassExtends(null)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
        beginMetadataStar(String)
        endMetadataStar(0)
        beginMember()
          handleIdentifier(String, typeReference)
          handleNoTypeArguments(?)
          handleType(String, ?)
          handleIdentifier(x, fieldDeclaration)
          handleNoFieldInitializer(;)
        endClassFields(null, null, null, null, 1, String, ;)
      endMember()
      beginMetadataStar(int)
      endMetadataStar(0)
      beginMember()
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(y)
        handleType(int, null)
        handleIdentifier(y, fieldDeclaration)
        handleNoFieldInitializer(;)
      endClassFields(null, null, null, null, 1, int, ;)
    endMember()
    beginMetadataStar(Foo)
    endMetadataStar(0)
    beginMember()
      beginMethod(null, null, null, null, null, Foo)
        handleNoType(;)
        handleIdentifier(Foo, methodDeclaration)
        handleNoTypeVariables(()
        beginFormalParameters((, MemberKind.NonStaticMethod)
          beginMetadataStar(Object)
          endMetadataStar(0)
          beginFormalParameter(Object, MemberKind.NonStaticMethod, null, null, null)
            handleIdentifier(Object, typeReference)
            handleNoTypeArguments(?)
            handleType(Object, ?)
            handleIdentifier(o, formalParameterDeclaration)
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
        beginInitializers(:)
          beginInitializer(x)
            handleIdentifier(x, expression)
            handleNoTypeArguments(=)
            handleNoArguments(=)
            handleSend(x, =)
            handleIdentifier(o, expression)
            handleNoTypeArguments(as)
            handleNoArguments(as)
            handleSend(o, as)
            beginAsOperatorType(as)
              handleIdentifier(String, typeReference)
              handleNoTypeArguments(,)
              handleType(String, null)
            endAsOperatorType(as)
            handleAsOperator(as)
            handleAssignmentExpression(=)
          endInitializer(,)
          beginInitializer(y)
            handleIdentifier(y, expression)
            handleNoTypeArguments(=)
            handleNoArguments(=)
            handleSend(y, =)
            handleLiteralInt(0)
            handleAssignmentExpression(=)
          endInitializer(;)
        endInitializers(2, :, ;)
        handleAsyncModifier(null, null)
        handleEmptyFunctionBody(;)
      endClassConstructor(null, Foo, (, :, ;)
    endMember()
  endClassOrMixinBody(DeclarationKind.Class, 3, {, })
endClassDeclaration(class, })
endTopLevelDeclaration()
endCompilationUnit(1, )
