[
https://issues.apache.org/jira/browse/GROOVY-7044?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Spilker updated GROOVY-7044:
-----------------------------------
Comment: was deleted
(was: https://github.com/apache/groovy/pull/270)
> 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?
> Priority: Minor
> 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)