[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=15360262#comment-15360262 ] ASF GitHub Bot commented on GROOVY-7044: Github user asfgit closed the pull request at: 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)
[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=15182779#comment-15182779 ] Jochen Theodorou commented on GROOVY-7044: -- This PR requires a testcase > 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)
[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=15182277#comment-15182277 ] Pascal Schumacher commented on GROOVY-7044: --- [~paulk] What do you think? Is this a bug or a feature? Should we merge the pull request? > 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)
[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=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 SpilkerDate: 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)