[jira] [Commented] (GROOVY-7969) Incorrect modifers on setter for volatile property with @Bindable/@Vetoable

2016-10-13 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/GROOVY-7969?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15571138#comment-15571138
 ] 

ASF GitHub Bot commented on GROOVY-7969:


Github user paulk-asert closed the pull request at:

https://github.com/apache/groovy/pull/448


> Incorrect modifers on setter for volatile property with @Bindable/@Vetoable
> ---
>
> Key: GROOVY-7969
> URL: https://issues.apache.org/jira/browse/GROOVY-7969
> Project: Groovy
>  Issue Type: Bug
>Reporter: Paul King
>Assignee: Paul King
> Fix For: 2.4.8
>
>
> As part of GROOVY-3726 we fixed getter/setter method modifiers for volatile 
> (or transient) properties. The @Bindable and @Vetoable transforms however 
> generate their own setters and bypass that fix.
> Here is a script to reproduce the problem:
> {code}
> import static java.lang.reflect.Modifier.toString
> import groovy.beans.Bindable
> class Foo {
>   volatile Date now
> }
> @Bindable class Bar {
>   volatile Date then
> }
> void pretty(int mod) { println "${mod.toString().padRight(10)}" + 
> toString(mod) }
> pretty(Foo.getMethod('getNow').modifiers)
> pretty(Foo.getMethod('setNow', Date).modifiers)
> pretty(Bar.getMethod('getThen').modifiers)
> pretty(Bar.getMethod('setThen', Date).modifiers)
> {code}
> which currently produces:
> {noformat}
> 1 public
> 1 public
> 1 public
> 65public volatile
> {noformat}



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


[jira] [Commented] (GROOVY-7969) Incorrect modifers on setter for volatile property with @Bindable/@Vetoable

2016-10-12 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/GROOVY-7969?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15569528#comment-15569528
 ] 

ASF GitHub Bot commented on GROOVY-7969:


Github user blackdrag commented on a diff in the pull request:

https://github.com/apache/groovy/pull/448#discussion_r83071079
  
--- Diff: src/main/org/codehaus/groovy/ast/tools/PropertyNodeUtils.java ---
@@ -0,0 +1,50 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.ast.tools;
+
+import org.codehaus.groovy.ast.PropertyNode;
+
+import java.lang.reflect.Modifier;
+
+public class PropertyNodeUtils {
+/**
+ * Fields within the AST that have no explicit visibility are deemed 
to be properties
+ * and represented by a PropertyNode. The Groovy compiler creates 
accessor methods and
+ * a backing field for such property nodes. During this process, all 
modifiers
+ * from the property are carried over to the backing field (so a 
property marked as
+ * {@code transient} will have a {@code transient} backing field) but 
when creating
+ * the accessor methods we don't carry over modifier values which 
don't make sense for
+ * methods (this includes VOLATILE and TRANSIENT) but other modifiers 
are carried over,
+ * for example {@code static}.
+ *
+ * @param propNode the original property node
+ * @return the modifiers which make sense for an accessor method
+ */
+public static int adjustPropertyModifiersForMethod(PropertyNode 
propNode) {
+int propNodeModifiers = propNode.getModifiers();
+// GROOVY-3726: clear volatile, transient modifiers so that they 
don't get applied to methods
+if ((propNodeModifiers & Modifier.VOLATILE) != 0) {
+propNodeModifiers -= Modifier.VOLATILE;
+}
+if ((propNodeModifiers & Modifier.TRANSIENT) != 0) {
+propNodeModifiers -= Modifier.TRANSIENT;
+}
--- End diff --

or: propNodeModifiers = ~(Modifier.TRANSIENT | Modifier.VOLATILE) & 
propNodeModifiers


> Incorrect modifers on setter for volatile property with @Bindable/@Vetoable
> ---
>
> Key: GROOVY-7969
> URL: https://issues.apache.org/jira/browse/GROOVY-7969
> Project: Groovy
>  Issue Type: Bug
>Reporter: Paul King
>
> As part of GROOVY-3726 we fixed getter/setter method modifiers for volatile 
> (or transient) properties. The @Bindable and @Vetoable transforms however 
> generate their own setters and bypass that fix.
> Here is a script to reproduce the problem:
> {code}
> import static java.lang.reflect.Modifier.toString
> import groovy.beans.Bindable
> class Foo {
>   volatile Date now
> }
> @Bindable class Bar {
>   volatile Date then
> }
> void pretty(int mod) { println "${mod.toString().padRight(10)}" + 
> toString(mod) }
> pretty(Foo.getMethod('getNow').modifiers)
> pretty(Foo.getMethod('setNow', Date).modifiers)
> pretty(Bar.getMethod('getThen').modifiers)
> pretty(Bar.getMethod('setThen', Date).modifiers)
> {code}
> which currently produces:
> {noformat}
> 1 public
> 1 public
> 1 public
> 65public volatile
> {noformat}



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


[jira] [Commented] (GROOVY-7969) Incorrect modifers on setter for volatile property with @Bindable/@Vetoable

2016-10-12 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/GROOVY-7969?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15568490#comment-15568490
 ] 

ASF GitHub Bot commented on GROOVY-7969:


GitHub user paulk-asert opened a pull request:

https://github.com/apache/groovy/pull/448

GROOVY-7969: Incorrect modifers on setter for volatile property with …

…@Bindable/@Vetoable

You can merge this pull request into a Git repository by running:

$ git pull https://github.com/paulk-asert/groovy groovy7969

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/groovy/pull/448.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 #448


commit 254e6038e033b29b7fd9d0512dc11e13997d8730
Author: paulk 
Date:   2016-10-12T11:42:17Z

GROOVY-7969: Incorrect modifers on setter for volatile property with 
@Bindable/@Vetoable




> Incorrect modifers on setter for volatile property with @Bindable/@Vetoable
> ---
>
> Key: GROOVY-7969
> URL: https://issues.apache.org/jira/browse/GROOVY-7969
> Project: Groovy
>  Issue Type: Bug
>Reporter: Paul King
>
> As part of GROOVY-3726 we fixed getter/setter method modifiers for volatile 
> (or transient) properties. The @Bindable and @Vetoable transforms however 
> generate their own setters and bypass that fix.
> Here is a script to reproduce the problem:
> {code}
> import static java.lang.reflect.Modifier.toString
> import groovy.beans.Bindable
> class Foo {
>   volatile Date now
> }
> @Bindable class Bar {
>   volatile Date then
> }
> void pretty(int mod) { println "${mod.toString().padRight(10)}" + 
> toString(mod) }
> pretty(Foo.getMethod('getNow').modifiers)
> pretty(Foo.getMethod('setNow', Date).modifiers)
> pretty(Bar.getMethod('getThen').modifiers)
> pretty(Bar.getMethod('setThen', Date).modifiers)
> {code}
> which currently produces:
> {noformat}
> 1 public
> 1 public
> 1 public
> 65public volatile
> {noformat}



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