This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit b520fe5fb136192c9a4acc32d7913ce6adb140ae
Author: Paul King <[email protected]>
AuthorDate: Fri Jul 17 23:20:24 2020 +1000

    GROOVY-9618: Property reference resolves to field, not getter when property 
name is single upper-case letter
---
 src/main/java/groovy/lang/MetaClassImpl.java | 9 ++++++++-
 src/test/groovy/PropertyTest.groovy          | 8 ++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/main/java/groovy/lang/MetaClassImpl.java 
b/src/main/java/groovy/lang/MetaClassImpl.java
index 9d1a4e7..4313bb0 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -2088,9 +2088,16 @@ public class MetaClassImpl implements MetaClass, 
MutableMetaClass {
     private Tuple2<MetaMethod, MetaProperty> 
createMetaMethodAndMetaProperty(final Class senderForMP, final Class 
senderForCMG, final String name, final boolean useSuper, final boolean 
isStatic) {
         MetaMethod method = null;
         MetaProperty mp = getMetaProperty(senderForMP, name, useSuper, 
isStatic);
-        if (mp == null && isUpperCase(name.charAt(0)) && (name.length() < 2 || 
!isUpperCase(name.charAt(1)))) {
+        if ((mp == null || mp instanceof CachedField) && 
isUpperCase(name.charAt(0)) && (name.length() < 2 || 
!isUpperCase(name.charAt(1))) && !"Class".equals(name)) {
+            // GROOVY-9618 adjust because capitalised properties aren't stored 
as meta bean props
+            MetaProperty saved = mp;
             mp = getMetaProperty(senderForMP, BeanUtils.decapitalize(name), 
useSuper, isStatic);
+            if (mp == null || (saved != null && mp instanceof CachedField)) {
+                // restore if we didn't find something better
+                mp = saved;
+            }
         }
+
         if (mp != null) {
             if (mp instanceof MetaBeanProperty) {
                 MetaBeanProperty mbp = (MetaBeanProperty) mp;
diff --git a/src/test/groovy/PropertyTest.groovy 
b/src/test/groovy/PropertyTest.groovy
index 5efbc57..4f49395 100644
--- a/src/test/groovy/PropertyTest.groovy
+++ b/src/test/groovy/PropertyTest.groovy
@@ -280,6 +280,10 @@ class PropertyTest extends GroovyTestCase {
     void testJavaBeanNamingForPropertyAccess() {
         assertScript '''
         class A {
+            private String X = 'fieldX'
+            private String Prop = 'fieldProp'
+            private String DB = 'fieldDB'
+            private String XML = 'fieldXML'
             String getProp() { 'Prop' }
             String getSomeProp() { 'SomeProp' }
             String getX() { 'X' }
@@ -344,6 +348,10 @@ class PropertyTest extends GroovyTestCase {
     void testJavaBeanNamingForStaticPropertyAccess() {
         assertScript '''
         class A {
+            private static String X = 'fieldX'
+            private static String Prop = 'fieldProp'
+            private static String DB = 'fieldDB'
+            private static String XML = 'fieldXML'
             static String getProp() { 'Prop' }
             static String getSomeProp() { 'SomeProp' }
             static String getX() { 'X' }

Reply via email to