[ 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)