I think that your recent change that stores the Locator instance in each FONode is incorrect use of the Locator interface. The docs says:
Note that the results returned by the object will be valid only during the scope of each content handler method: the application will receive unpredictable results if it attempts to use the locator at any other time.
And in fact, it is the same Locator instance that is stored in each FONode.
I think it would be better to revert to using separate line/column/systemId fields if we want to know the location of each FONode.