You may need to associate a piece of information with a node without persisting it to disk as part of the model.
For example, you might want to store the result of evaluating a node with an interpreter, or a string to filter a large list of children in the editor.
You could reach for a static
Map<SNode, MyInformation> and it could work as long as you use a hash map with weak
keys, to avoid memory leaks. For example, a
java.util.WeakHashMap would do.
There is a better solution, however: each
SNode object manages a hash map of user objects which, as the name
suggests, can contain arbitrary objects added by the user. The map is accessed via two methods,
SNode#getUserObject(Object key) and
SNode#putUserObject(Object key, Object value). User objects free you from the
necessity of using weak hash maps, and may be slightly faster.
One caveat: although any
Object can serve as a key to the map, it is preferable to stick to plain strings. Since MPS
reloads classes as you recompile your code, a key object created before a reload will not equal the same key object
created after the reload.