Description
To reproduce, create a TreeParser
instance with a labeled newick string and set IsLabelledTree="true". Following the part of initAndValidate() responsible for sorting the labels alphabetically, the leaf nodes in m_nodes[]
will have different IDs for a given node number compared with those in m_storedNodes[]
.
The side effect of this is that one cannot rely on node.getID()
to return the taxon name for a given node, as this mapping - while initially okay - is broken once a state.restore()
is performed.
While it's easy to fix the alphabetical sorting to update both m_nodes
and m_storedNodes
instead of only m_nodes, I'm not sure it's really necessary: It's possible/likely that my occasional use of node.getID()
to obtain taxon labels is non-idiomatic/deprecated in favour of tree.getTaxonName(node)
. But maybe we should fix this anyway just to avoid difficult-to-diagnose problems when programmers occasionally do the wrong thing? :)