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);
}
Activity
Guillaume Laforge
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Attachment | GROOVY-4720__Method_overriding_with_ExpandoMetaClass_is_partially_broken.patch [ 54254 ] |
Guillaume Laforge
made changes -
| Fix Version/s | 1.8-rc-4 [ 17245 ] | |
| Fix Version/s | 1.8-rc-3 [ 17228 ] |
Guillaume Laforge
made changes -
| Priority | Blocker [ 1 ] | Critical [ 2 ] |
Guillaume Laforge
made changes -
| Assignee | Guillaume Laforge [ guillaume ] |
Guillaume Laforge
made changes -
| Status | Open [ 1 ] | Resolved [ 5 ] |
| Fix Version/s | 1.7.11 [ 17244 ] | |
| Fix Version/s | 1.9-beta-1 [ 17153 ] | |
| Resolution | Fixed [ 1 ] |
Paul King
made changes -
| Status | Resolved [ 5 ] | Closed [ 6 ] |