beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(A, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, A)
      handleNoType(A)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(extension)
  beginMetadataStar(extension)
  endMetadataStar(0)
  beginExtensionDeclarationPrelude(extension)
    handleNoTypeVariables(on)
    beginExtensionDeclaration(extension, type)
      handleIdentifier(A, typeReference)
      handleNoTypeArguments({)
      handleType(A, null)
      beginClassOrMixinBody(DeclarationKind.Extension, {)
        beginMetadataStar(method)
        endMetadataStar(0)
        beginMember()
          beginMethod(null, null, null, null, null, method)
            handleNoType({)
            handleIdentifier(method, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
            endFormalParameters(0, (, ), MemberKind.ExtensionNonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endExtensionMethod(null, method, (, null, })
        endMember()
      endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
    endExtensionDeclaration(extension, null, on, })
  endTopLevelDeclaration(test)
  beginMetadataStar(test)
  endMetadataStar(0)
  beginTopLevelMember(test)
    beginTopLevelMethod(}, null)
      handleNoType(})
      handleIdentifier(test, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(A)
        endMetadataStar(0)
        beginFormalParameter(A, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(A, typeReference)
          handleNoTypeArguments(a)
          handleType(A, null)
          handleIdentifier(a, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleIdentifier(type, expression)
      handleNoTypeArguments(()
      beginArguments(()
        beginNewExpression(new)
          handleIdentifier(A, constructorReference)
          beginConstructorReference(A)
            handleNoTypeArguments(()
            handleNoConstructorReferenceContinuationAfterTypeArguments(()
          endConstructorReference(A, null, ()
          beginArguments(()
          endArguments(0, (, ))
        endNewExpression(new)
      endArguments(1, (, ))
      handleSend(type, .)
      handleIdentifier(method, expressionContinuation)
      handleNoTypeArguments(()
      beginArguments(()
      endArguments(0, (, ))
      handleSend(method, ;)
      handleEndingBinaryExpression(.)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(test, null, ;)
  endTopLevelDeclaration()
endCompilationUnit(3, )
