This is an automated email from the ASF dual-hosted git repository. emilles pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/groovy.git
commit d58f383fd69b81b3ba867d0349230d2d9467f9ea Author: Eric Milles <[email protected]> AuthorDate: Tue Dec 30 15:03:55 2025 -0600 GROOVY-11813: indy select: support indirect non-proxy `MetaClassImpl` --- .../java/org/codehaus/groovy/vmplugin/v8/Selector.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java index c6d9b565d5..a2901292c9 100644 --- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java +++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java @@ -29,6 +29,7 @@ import groovy.lang.MetaClassImpl; import groovy.lang.MetaClassImpl.MetaConstructor; import groovy.lang.MetaMethod; import groovy.lang.MissingMethodException; +import groovy.lang.ProxyMetaClass; import groovy.transform.Internal; import org.codehaus.groovy.GroovyBugError; import org.codehaus.groovy.reflection.CachedField; @@ -1077,17 +1078,14 @@ public abstract class Selector { //-------------------------------------------------------------------------- /** - * Returns the MetaClassImpl if the given MetaClass is one of - * MetaClassImpl, AdaptingMetaClass or ClosureMetaClass. If - * none of these cases matches, this method returns null. + * @return {@code mc} if {@code ClosureMetaClass}, {@code ExpandoMetaClass} or not {@code ProxyMetaClass}; otherwise null */ private static MetaClassImpl getMetaClassImpl(final MetaClass mc, final boolean includeEMC) { - Class<?> mcc = mc.getClass(); - boolean valid = mcc == MetaClassImpl.class - || mcc == ClosureMetaClass.class - || (includeEMC && mcc == ExpandoMetaClass.class); + boolean valid = (mc.getClass() == ClosureMetaClass.class) + || (includeEMC && mc instanceof ExpandoMetaClass) + || (mc instanceof MetaClassImpl && !(mc instanceof ExpandoMetaClass || mc instanceof ProxyMetaClass)); // GROOVY-11813 if (!valid) { - if (LOG_ENABLED) LOG.info("meta class is neither MetaClassImpl, nor ClosureMetaClass, normal method selection path disabled."); + if (LOG_ENABLED) LOG.info("meta class isn't a ClosureMetaClass, ExpandoMetaClass, or non-proxy MetaClassImpl; normal method selection path disabled."); return null; } if (LOG_ENABLED) LOG.info("meta class is a recognized MetaClassImpl");
