[
https://issues.apache.org/jira/browse/FLEX-34119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14070108#comment-14070108
]
Mihai Chira commented on FLEX-34119:
------------------------------------
Update: proposed solution and unit tests committed on the FLEX-34119 branch.
> mx.collections.HierarchicalCollectionViewCursor causes CursorError RTE from
> ListCollectionView when the underlying collections change
> -------------------------------------------------------------------------------------------------------------------------------------
>
> Key: FLEX-34119
> URL: https://issues.apache.org/jira/browse/FLEX-34119
> Project: Apache Flex
> Issue Type: Bug
> Components: Advanced Data Grid
> Affects Versions: Apache Flex 4.12.1
> Reporter: Mihai Chira
> Assignee: Mihai Chira
> Labels: collections, cursors, easytest
> Fix For: Apache Flex 4.12.0
>
> Attachments: BookmarkErrorScenarios.txt,
> _HierarchicalCollectionViewCursorBug.fxp
>
>
> *Steps to reproduce A*:
> # Run the unit test called HierarchicalCollectionViewCursor_FLEX_34119_Test
> in the "FLEX-34119" branch against the HierarchicalCollectionViewCursor class
> in the develop branch. You should see lots of "Bookmark no longer valid"
> errors.
> *Steps to reproduce B*:
> # Run the attached AIR project. (Avoid debug mode unless you want to press F8
> MANY times). It will take around 10s.
> The unit test (HierarchicalCollectionViewCursorTest.as) shows many of the
> ways in which HierarchicalCollectionViewCursor's state can make
> ListCollectionView fail through a seek() operation on
> ListCollectionViewCursor by allowing a CursorError to be thrown from
> ListCollectionView.getBookmarkIndex() (I say 'allowing' because it could
> easily prevent it).
> The trace output (also attached to this ticket as BookmarkErrorScenarios.txt)
> shows all the configurations of the collection view that I constructed which
> cause the RTE.
> *Notations in trace output*:
> * [SEL] - the currently selected item by the HierarchicalCollectionViewCursor
> (cursor.current).
> * [INS] - the newly inserted item, which caused the RTE
> * [REPL] - the item which, when replaced, causes the RTE (notice there's only
> one such instance - when the (selected) second stage is replaced with another
> item).
> *NOTES*:
> * for us this has caused numerous, apparently mysterious bugs within
> AdvancedDataGrids and Trees which boiled down to one or other of these
> configurations.
> * The reproduceCursorErrorWithDisableAutoUpdate() test shows that the error
> can also be thrown by not allowing the HierarchicalCollectionView (and,
> implicitly, the HierarchicalCollectionViewCursor) to know about changes in
> the underlying collections (by using disableAutoUpdate() in conjunction with
> refresh() and enableAutoUpdate()). We were using these methods to optimise
> expensive updates in the collections shown in the AdvancedDataGrids, without
> realising they had a knock-on effect on the HierarchicalCollectionView used
> by the grids. This part of the error-generation scenario is controlled by the
> programmers, of course, but it might be worth documenting, so that others can
> avoid these issues.
> * FLEX-33054 reports a limited scenario of this bug too. When this is fixed,
> so should FLEX-33054.
> *The RTE that's usually thrown*:
> Main Thread (Suspended: Error: Bookmark no longer valid.)
>
> mx.collections::HierarchicalCollectionViewCursor/collectionChangeHandler
>
> flash.events::EventDispatcher/dispatchEventFunction [no source]
> flash.events::EventDispatcher/dispatchEvent [no source]
>
> mx.collections::HierarchicalCollectionView/nestedCollectionChangeHandler
>
> flash.events::EventDispatcher/dispatchEventFunction [no source]
> flash.events::EventDispatcher/dispatchEvent [no source]
> mx.collections::ListCollectionView/dispatchEvent
> mx.collections::ListCollectionView/addItemsToView
> mx.collections::ListCollectionView/listChangeHandler
> flash.events::EventDispatcher/dispatchEventFunction [no source]
> flash.events::EventDispatcher/dispatchEvent [no source]
> mx.collections::ArrayList/internalDispatchEvent
> mx.collections::ArrayList/addItemAt
> mx.collections::ListCollectionView/addItemAt
--
This message was sent by Atlassian JIRA
(v6.2#6252)