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:45 UTC

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

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()