You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2022/10/02 21:33:44 UTC

[groovy] branch GROOVY-10783 created (now e0928d55e0)

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

sunlan pushed a change to branch GROOVY-10783
in repository https://gitbox.apache.org/repos/asf/groovy.git


      at e0928d55e0 GROOVY-10783: propertyMissing of category does not work when indy enabled

This branch includes the following new commits:

     new e0928d55e0 GROOVY-10783: propertyMissing of category does not work when indy enabled

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[groovy] 01/01: GROOVY-10783: propertyMissing of category does not work when indy enabled

Posted by su...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY-10783
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit e0928d55e019cde354cea955f425ce757d2fb967
Author: Daniel Sun <su...@apache.org>
AuthorDate: Mon Oct 3 05:33:03 2022 +0800

    GROOVY-10783: propertyMissing of category does not work when indy enabled
    
    Though groovy 4+ enable indy by default, gradle does not.
    To enable indy in gradle, set `groovyOptions.optimizationOptions.indy = true`
---
 src/main/java/groovy/lang/MetaClassImpl.java |  3 +++
 src/test/groovy/CategoryTest.groovy          | 15 ++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index 7617f376f3..2c0c40ac90 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -2118,6 +2118,9 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
         //----------------------------------------------------------------------
         if (!useSuper && !isStatic && GroovyCategorySupport.hasCategoryInCurrentThread()) {
             method = getCategoryMethodGetter(sender, "get", true);
+            if (null == method) {
+                method = getCategoryMethodGetter(sender, PROPERTY_MISSING, true);
+            }
             if (method != null) {
                 return new GetMethodMetaProperty(name, VM_PLUGIN.transformMetaMethod(this, method));
             }
diff --git a/src/test/groovy/CategoryTest.groovy b/src/test/groovy/CategoryTest.groovy
index f8c0a0f2a7..7f0c2e662b 100644
--- a/src/test/groovy/CategoryTest.groovy
+++ b/src/test/groovy/CategoryTest.groovy
@@ -21,7 +21,6 @@ package groovy
 import groovy.test.GroovyTestCase
 
 import static groovy.test.GroovyAssert.isAtLeastJdk
-import static org.junit.Assume.assumeTrue
 
 final class CategoryTest extends GroovyTestCase {
 
@@ -358,6 +357,20 @@ final class CategoryTest extends GroovyTestCase {
         }
     }
 
+    // GROOVY-10783
+    void testPropertyMissing2() {
+        assertScript '''\
+            class X{ def bar(){1}}
+            class XCat4{ static propertyMissing(X x, String name) {"works"}}
+
+            def x = new X()
+
+            use(XCat4) {
+                assert x.baz == "works"
+            }
+        '''
+    }
+
     // GROOVY-3867
     void testMethodMissing() {
         def x = new X()