Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
None
-
None
-
None
Description
There is a regression whereby you cannot override methods using ExpandoMetaClass.
The reason is that ClosureMetaMethod.createMethodList creates an anonymous inner class of type MetaMethod and adds it to the returned List<MetaMethod> that are to be registered
Later the isNonRealMethod(MetaMethod) check in MetaMethodIndex does this check:
private boolean isNonRealMethod(MetaMethod method) { return method instanceof NewInstanceMetaMethod || method instanceof NewStaticMetaMethod || method instanceof ClosureMetaMethod || method instanceof GeneratedMetaMethod || method instanceof ClosureStaticMetaMethod || method instanceof MixinInstanceMetaMethod; }
Since the anonymous inner MetaMethod defined in ClosureMetaMethod is not an instance of any of these types then the method is never registered in the MetaMethodIndex:
if (methodC == matchC) { if (isNonRealMethod(method)) { list.set(found, method); }