eric-milles opened a new pull request, #2372: URL: https://github.com/apache/groovy/pull/2372
`MetaClassImpl#invokeStaticMethod` checked for closure property before super class method followed by callable property. As noted in the issue ticket, the property check can be expensive. Therefore, I am proposing: check class for method, check super class for method, then check for callable property. I think this is compatible with STC, which checks for callable property here: https://github.com/apache/groovy/blob/c8ed37ef49d68b9bd57ef572d8ffea42ff57c70f/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java#L3818 ```java public Object invokeStaticMethod(final Object object, final String methodName, final Object[] arguments) { // initialize and redirect until object class is theClass Object[] nonNullArguments = arguments != null ? arguments.clone() : EMPTY_ARGUMENTS; MetaMethod method = retrieveStaticMethod(methodName, nonNullArguments); if (method != null) { MetaClassHelper.unwrap(nonNullArguments); return method.doMethodInvoke(object, nonNullArguments); } Class<?>[] argumentTypes = MetaClassHelper.convertToTypeArray(nonNullArguments); MetaClassHelper.unwrap(nonNullArguments); for (var superClass = theClass.getSuperclass(); superClass != null; superClass = superClass.getSuperclass()) { MetaClass mc = registry.getMetaClass(superClass); method = mc.getStaticMetaMethod(methodName, argumentTypes); if (method != null) return method.doMethodInvoke(object, nonNullArguments); } Object propertyValue = null; // GROOVY-3284, GROOVY-3422, GROOVY-9779 try { propertyValue = getProperty(theClass, theClass, methodName, false, false); } catch (MissingPropertyException ignore) { } if (propertyValue != null) { if (propertyValue instanceof Closure closure) { return closure.getMetaClass().invokeMethod(theClass, closure, DO_CALL_METHOD, arguments, false, false); } else { return registry.getMetaClass(propertyValue.getClass()).invokeMethod(propertyValue, CALL_METHOD, arguments); } } return invokeStaticMissingMethod(theClass, methodName, nonNullArguments); } ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
