Hi,
Am 06.01.2017 um 22:16 schrieb Marshall Schor: > ... > > Before I embark on this fix, I'd feel better if I could get some confirmation > that Ruta is operating in this manner (at least for this test case) (i.e., > > 1) adding Annotations to indexes > 2) getting iterator(s) over those in RutaStream > 3) removing and adding Annotations to the indexes while holding on to these > iterators > 4) avoiding any ConcurrentModificationExceptions by always doing one of the 3 > repositioning iterator operations: moveTo First/Last/a-Feature_structure, > before > doing any other operation on the iterator. > 1) - 3) yes 4) not by purpose, but accidentally yes. It could happen but I have not found a use case where it directly accesses the other methods. Let me mention that the design of RutaStream and the approach with RutaBasic annotation origins in the implementation of TextMarker before it was ported to UIMA. I incrementally changed the implementation, added new functionality, refactored a bit over the years, but overall I did not change it completely because the implementations of conditions/actions depended on it. The iterators are now still there, but it is not necessary anymore that RutaStream holds them. The complete RutaStream/RutaBasic stuff is on my TODO list for 2017: creating a stable/clean interface for RutaSream with different implementations, e.g., not requiring RutaBasic. There is no need to adapt UIMA v3 to allow stuff that should be supported. I can simply adapt/fix Ruta. Peter
