Frédéric Monjo created FLEX-34283:
-------------------------------------

             Summary: XML item's parent null in item renderer when added to 
XMLListCollection
                 Key: FLEX-34283
                 URL: https://issues.apache.org/jira/browse/FLEX-34283
             Project: Apache Flex
          Issue Type: Bug
          Components: Spark: List
    Affects Versions: Apache Flex 4.12.0
            Reporter: Frédéric Monjo
            Priority: Critical
         Attachments: Tests.mxml

Since 4.12, there seems to be a regression bug in XMLListCollection. The 
scenario is:
# The user selects an item in a list and clicks a button to create a copy of 
this item below the selected one
# Clone the item through {{item.copy()}}, make some modifications to this item
# Add the item to the XMLListCollection using {{addItemAt}}, then call 
{{refresh()}} on the collection
# Inside some item renderers (not obviously the cloned one), XML item's parent 
is null, and never get updated, which could cause runtime errors.

Up to version 4.11, there has never been such problems. After a short 
investigation, this problem may be caused by a change in {{XMLListAdapter}} 
from [this 
commit|https://github.com/apache/flex-sdk/commit/59dd2be7f6a9b0fda745249cf979adeac7f406b7].
 

Please find attached a sample program to reproduce the bug. Run the program, 
select an item and click on the "Duplicate after" button. 

When run in 4.11, you should see the following console trace :
{code}
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
{code}

Whereas when run in 4.12, you would get :
{code}
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="2"/> --- is child of ---> null
{code}

Where you can see that the last item has lost his parent (note that it is not 
the cloned item). You may try to clone several random items, and results get 
even more confusing as you clone more items :
{code}
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
<foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="2"/></root>
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="2"/></root>
<foo id="2"/> --- is child of ---> null
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/></root>
<foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/></root>
<foo id="2"/> --- is child of ---> null
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
<foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
<foo id="2"/> --- is child of ---> null
<foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
<foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
<foo id="2"/> --- is child of ---> null
<foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
<foo id="2+"/> --- is child of ---> null
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2++"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2++"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2++"/></root>
<foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2++"/></root>
<foo id="2"/> --- is child of ---> null
<foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2++"/></root>
<foo id="2+"/> --- is child of ---> null
<foo id="2++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2++"/></root>
--------------------------------------------------
<foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2+"/><foo id="2++"/></root>
<foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2+"/><foo id="2++"/></root>
<foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2+"/><foo id="2++"/></root>
<foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2+"/><foo id="2++"/></root>
<foo id="2"/> --- is child of ---> null
<foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo 
id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo 
id="2+"/><foo id="2++"/></root>
<foo id="2+"/> --- is child of ---> null
<foo id="2+"/> --- is child of ---> null
<foo id="2++"/> --- is child of ---> null
{code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to