Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: 1.8-rc-4, 1.9-beta-1, 1.7.11
-
Component/s: None
-
Labels:None
-
Number of attachments :
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);
}