diff options
author | acolyer <acolyer> | 2005-08-19 16:51:30 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-08-19 16:51:30 +0000 |
commit | 86ce1f7ce2a4be24e55a0eafc96de86142ce1278 (patch) | |
tree | 511d007aca7d387d9b92000a7a2d0cb3360ef593 /weaver | |
parent | 92c16e8dc34f86500628a825141cd035bdf1bc4a (diff) | |
download | aspectj-86ce1f7ce2a4be24e55a0eafc96de86142ce1278.tar.gz aspectj-86ce1f7ce2a4be24e55a0eafc96de86142ce1278.zip |
fix for pr86057, overriding of final pointcut
Diffstat (limited to 'weaver')
-rw-r--r-- | weaver/src/org/aspectj/weaver/ResolvedType.java | 9 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/WeaverMessages.java | 1 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/weaver-messages.properties | 1 |
3 files changed, 11 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/ResolvedType.java b/weaver/src/org/aspectj/weaver/ResolvedType.java index 8e359fcdc..1d4b40188 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedType.java +++ b/weaver/src/org/aspectj/weaver/ResolvedType.java @@ -1233,9 +1233,18 @@ public abstract class ResolvedType extends UnresolvedType implements AnnotatedEl /** * @return true if the override is legal + * note: calling showMessage with two locations issues TWO messages, not ONE message + * with an additional source location. */ public boolean checkLegalOverride(ResolvedMember parent, ResolvedMember child) { //System.err.println("check: " + child.getDeclaringType() + " overrides " + parent.getDeclaringType()); + if (Modifier.isFinal(parent.getModifiers())) { + world.showMessage(Message.ERROR, + WeaverMessages.format(WeaverMessages.CANT_OVERRIDE_FINAL_MEMBER,parent), + child.getSourceLocation(),null); + return false; + } + if (!parent.getReturnType().equals(child.getReturnType())) { world.showMessage(IMessage.ERROR, WeaverMessages.format(WeaverMessages.ITD_RETURN_TYPE_MISMATCH,parent,child), diff --git a/weaver/src/org/aspectj/weaver/WeaverMessages.java b/weaver/src/org/aspectj/weaver/WeaverMessages.java index 0665e2940..4bee39a7d 100644 --- a/weaver/src/org/aspectj/weaver/WeaverMessages.java +++ b/weaver/src/org/aspectj/weaver/WeaverMessages.java @@ -55,6 +55,7 @@ public class WeaverMessages { public static final String ITD_MEMBER_CONFLICT = "itdMemberConflict"; public static final String ITD_NON_EXPOSED_IMPLEMENTOR = "itdNonExposedImplementor"; public static final String ITD_ABSTRACT_MUST_BE_PUBLIC_ON_INTERFACE = "itdAbstractMustBePublicOnInterface"; + public static final String CANT_OVERRIDE_FINAL_MEMBER = "cantOverrideFinalMember"; public static final String NON_VOID_RETURN = "nonVoidReturn"; public static final String INCOMPATIBLE_RETURN_TYPE="incompatibleReturnType"; diff --git a/weaver/src/org/aspectj/weaver/weaver-messages.properties b/weaver/src/org/aspectj/weaver/weaver-messages.properties index e1c2cad55..af95e1e38 100644 --- a/weaver/src/org/aspectj/weaver/weaver-messages.properties +++ b/weaver/src/org/aspectj/weaver/weaver-messages.properties @@ -47,6 +47,7 @@ itdConsOnAspect=can''t declare constructor on an aspect returnTypeMismatch=can''t override {0} with {1} return types don''t match paramTypeMismatch=can''t override {0} with {1} parameter types don''t match visibilityReduction=can''t override {0} with {1} visibility is reduced +cantOverrideFinalMember=can''t override final {0} doesntThrow=overriden method doesn't throw {0} overriddenStatic={0} cannot override {1}; overridden method is static overridingStatic={0} cannot override {1}; overriding method is static |