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