[ 
https://issues.apache.org/jira/browse/GROOVY-7044?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shil Sinha reassigned GROOVY-7044:
----------------------------------

    Assignee: Shil Sinha

> Cloned NodeBuilder created nodes share values (child nodes) with original 
> node.
> -------------------------------------------------------------------------------
>
>                 Key: GROOVY-7044
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7044
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk, XML Processing
>    Affects Versions: 2.3.6
>            Reporter: Damir Perovi?
>            Assignee: Shil Sinha
>            Priority: Minor
>             Fix For: 2.4.8
>
>         Attachments: NodeBuilderTest.groovy
>
>
> Cloning nodes created by NodeBuilder share child nodes with original node.
> If node is added to original node or child node value is changed, the cloned 
> node will see those changes. Same applies to cloned node, adding node or 
> changing child node value will be seen by original node.
> The problem seem to originate in NodeBuilder methods:
> {code}
> protected Object createNode(Object name)
> protected Object createNode(Object name, Map attributes)
> {code}
> which use ArrayList when creating new Node instead of NodeList.
> Can be easily reproduced by groovysh or use attached junit file.
> {noformat}
> groovy:000> x1 = new NodeBuilder().a() { b() }
> ===> a[attributes={}; value=[b[attributes={}; value=[]]]]
> groovy:000> x2 = x1.clone()
> ===> a[attributes={}; value=[b[attributes={}; value=[]]]]
> groovy:000> x1.appendNode('c')
> ===> c[attributes={}; value=[]]
> groovy:000> x1
> ===> a[attributes={}; value=[b[attributes={}; value=[]], c[attributes={}; 
> value=[]]]]
> groovy:000> x2
> ===> a[attributes={}; value=[b[attributes={}; value=[]], c[attributes={}; 
> value=[]]]]
> groovy:000> x1.b[0].setValue(1)
> ===> null
> groovy:000> x1
> ===> a[attributes={}; value=[b[attributes={}; value=1], c[attributes={}; 
> value=[]]]]
> groovy:000> x2
> ===> a[attributes={}; value=[b[attributes={}; value=1], c[attributes={}; 
> value=[]]]]
> groovy:000> x2.c[0].setValue(2)
> ===> null
> groovy:000> x1
> ===> a[attributes={}; value=[b[attributes={}; value=1], c[attributes={}; 
> value=2]]]
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to