class_docstr: Abstract base class for protocol messages.
  
  Protocol message classes are almost always generated by the protocol
  compiler.  These generated types subclass Message and implement the methods
  shown below.
  
  TODO(robinson): Link to an HTML document here.
  
  TODO(robinson): Document that instances of this class will also
  have an Extensions attribute with __getitem__ and __setitem__.
  Again, not sure how to best convey this.
  
  TODO(robinson): Document that the class must also have a static
    RegisterExtension(extension_field) method.
    Not sure how to best express at this point.
class_docstr_tok: ["Abstract","base","class","for","protocol","messages",".","Protocol","message","classes","are","almost","always","generated","by","the","protocol","compiler",".","These","generated","types","subclass","Message","and","implement","the","methods","shown","below",".","TODO","(","robinson",")",":","Link","to","an","HTML","document","here",".","TODO","(","robinson",")",":","Document","that","instances","of","this","class","will","also","have","an","Extensions","attribute","with","__getitem__","and","__setitem__",".","Again",",","not","sure","how","to","best","convey","this",".","TODO","(","robinson",")",":","Document","that","the","class","must","also","have","a","static","RegisterExtension","(","extension_field",")","method",".","Not","sure","how","to","best","express","at","this","point","."]
docstr: Internal method used by the protocol message implementation.
  Clients should not call this directly.
  
  Sets a listener that this message will call on certain state transitions.
  
  The purpose of this method is to register back-edges from children to
  parents at runtime, for the purpose of setting "has" bits and
  byte-size-dirty bits in the parent and ancestor objects whenever a child or
  descendant object is modified.
  
  If the client wants to disconnect this Message from the object tree, she
  explicitly sets callback to None.
  
  If message_listener is None, unregisters any existing listener.  Otherwise,
  message_listener must implement the MessageListener interface in
  internal/message_listener.py, and we discard any listener registered
  via a previous _SetListener() call.
docstr_tok: ["Internal","method","used","by","the","protocol","message","implementation",".","Clients","should","not","call","this","directly",".","Sets","a","listener","that","this","message","will","call","on","certain","state","transitions",".","The","purpose","of","this","method","is","to","register","back-edges","from","children","to","parents","at","runtime",",","for","the","purpose","of","setting","``","has","''","bits","and","byte-size-dirty","bits","in","the","parent","and","ancestor","objects","whenever","a","child","or","descendant","object","is","modified",".","If","the","client","wants","to","disconnect","this","Message","from","the","object","tree",",","she","explicitly","sets","callback","to","None",".","If","message_listener","is","None",",","unregisters","any","existing","listener",".","Otherwise",",","message_listener","must","implement","the","MessageListener","interface","in","internal\/message_listener.py",",","and","we","discard","any","listener","registered","via","a","previous","_SetListener","(",")","call","."]
code: def _SetListener(self, message_listener):
      """Internal method used by the protocol message implementation.
      Clients should not call this directly.
  
      Sets a listener that this message will call on certain state transitions.
  
      The purpose of this method is to register back-edges from children to
      parents at runtime, for the purpose of setting "has" bits and
      byte-size-dirty bits in the parent and ancestor objects whenever a child or
      descendant object is modified.
  
      If the client wants to disconnect this Message from the object tree, she
      explicitly sets callback to None.
  
      If message_listener is None, unregisters any existing listener.  Otherwise,
      message_listener must implement the MessageListener interface in
      internal/message_listener.py, and we discard any listener registered
      via a previous _SetListener() call.
      """
      raise NotImplementedError
  
label_desc: Use image node_id 24 for calling the Message obj's underlying member method code with example usage: obj._SetListener(message_listener) without return types