beginCompilationUnit(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields()
      handleNoType(var)
      handleIdentifier(simpleIdentifier, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(method, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
        endArguments(0, (, ))
        handleSend(f, .)
        handleIdentifier(m, expressionContinuation)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(m, <)
        handleEndingBinaryExpression(.)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(prefixedIdentifier, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(prefix, expression)
        handleNoTypeArguments(.)
        handleNoArguments(.)
        handleSend(prefix, .)
        handleIdentifier(f, expressionContinuation)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        handleEndingBinaryExpression(.)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(three_identifiers, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(prefix, expression)
        handleNoTypeArguments(.)
        handleNoArguments(.)
        handleSend(prefix, .)
        handleIdentifier(ClassName, expressionContinuation)
        handleNoTypeArguments(.)
        handleNoArguments(.)
        handleSend(ClassName, .)
        handleEndingBinaryExpression(.)
        handleIdentifier(m, expressionContinuation)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(m, <)
        handleEndingBinaryExpression(.)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration()
endCompilationUnit(4, )
