You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/02/23 22:36:18 UTC
[jira] [Commented] (GROOVY-7044) Cloned NodeBuilder created nodes
share values (child nodes) with original node.
[ https://issues.apache.org/jira/browse/GROOVY-7044?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15159688#comment-15159688 ]
ASF GitHub Bot commented on GROOVY-7044:
----------------------------------------
GitHub user daspilker opened a pull request:
https://github.com/apache/groovy/pull/270
GROOVY-7044: Fixed deep cloning of nodes generated by NodeBuilder
Use default behavior when creating Nodes without value.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/daspilker/groovy GROOVY-7044
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/groovy/pull/270.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #270
----
commit 7b99e656e734b14872048354731b01d9d3061af6
Author: Daniel Spilker <da...@coremedia.com>
Date: 2016-02-23T21:34:09Z
GROOVY-7044: Fixed deep cloning of nodes generated by NodeBuilder
Use default behavior when creating Nodes without value.
----
> 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)