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

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

commit 54bf508ee3158b1da0495b10df83b0f5285402bb
Author: Eric Milles <eric.mil...@thomsonreuters.com>
AuthorDate: Wed Aug 27 15:11:07 2025 -0500

    GROOVY-11745: check for null sender
---
 .../org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java 
b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
index 04f7fca254..0bdb5d7265 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
@@ -468,7 +468,7 @@ public class ScriptBytecodeAdapter {
 
     public static Object getProperty(Class senderClass, Object receiver, 
String messageName) throws Throwable {
         try {
-            if (receiver instanceof GroovyObject groovyObject && 
!receiver.getClass().getMethod("getProperty", String.class).isDefault()) {
+            if (receiver instanceof GroovyObject groovyObject && (senderClass 
== null || !receiver.getClass().getMethod("getProperty", 
String.class).isDefault())) {
                 // TODO: instead of checking for no getProperty 
specialization, pass senderClass in ThreadLocal or something
                 return groovyObject.getProperty(messageName);
             } else {
@@ -500,7 +500,7 @@ public class ScriptBytecodeAdapter {
 
     public static void setProperty(Object messageArgument, Class senderClass, 
Object receiver, String messageName) throws Throwable {
         try {
-            if (receiver instanceof GroovyObject groovyObject && 
!receiver.getClass().getMethod("setProperty", String.class, 
Object.class).isDefault()) {
+            if (receiver instanceof GroovyObject groovyObject && (senderClass 
== null || !receiver.getClass().getMethod("setProperty", String.class, 
Object.class).isDefault())) {
                 groovyObject.setProperty(messageName, messageArgument);
             } else {
                 MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
@@ -509,7 +509,7 @@ public class ScriptBytecodeAdapter {
         } catch (GroovyRuntimeException gre) {
             if (gre instanceof MissingPropertyException
                     && receiver instanceof GroovyObject groovyObject
-                    && GeneratedClosure.class.isAssignableFrom(senderClass)) {
+                    && senderClass != null && 
GeneratedClosure.class.isAssignableFrom(senderClass)) {
                 do {
                     senderClass = senderClass.getEnclosingClass();
                 } while (GeneratedClosure.class.isAssignableFrom(senderClass));
@@ -541,11 +541,11 @@ public class ScriptBytecodeAdapter {
     public static Object getGroovyObjectProperty(Class senderClass, 
GroovyObject receiver, String messageName) throws Throwable {
         Class<?> receiverClass = receiver.getClass();
         try {
-//          if (!receiverClass.getMethod("getProperty", 
String.class).isDefault()) {
+//          if (senderClass == null || !receiverClass.getMethod("getProperty", 
String.class).isDefault()) {
                 return receiver.getProperty(messageName);
 //          }
         } catch (MissingPropertyException mpe) {
-            if (senderClass == receiverClass || 
!senderClass.isInstance(receiver)) {
+            if (senderClass == null || senderClass == receiverClass || 
!senderClass.isInstance(receiver)) {
                 throw unwrap(mpe);
             }
         } catch (GroovyRuntimeException gre) {
@@ -575,12 +575,12 @@ public class ScriptBytecodeAdapter {
     public static void setGroovyObjectProperty(Object messageArgument, Class 
senderClass, GroovyObject receiver, String messageName) throws Throwable {
         Class<?> receiverClass = receiver.getClass();
         try {
-            if (!receiverClass.getMethod("setProperty", String.class, 
Object.class).isDefault()) {
+            if (senderClass == null || !receiverClass.getMethod("setProperty", 
String.class, Object.class).isDefault()) {
                 receiver.setProperty(messageName, messageArgument);
                 return;
             }
         } catch (MissingPropertyException mpe) {
-            if (senderClass == receiverClass || 
!senderClass.isInstance(receiver)) {
+            if (senderClass == null || senderClass == receiverClass || 
!senderClass.isInstance(receiver)) {
                 throw unwrap(mpe);
             }
         } catch (GroovyRuntimeException gre) {

Reply via email to