From 86ce1f7ce2a4be24e55a0eafc96de86142ce1278 Mon Sep 17 00:00:00 2001 From: acolyer Date: Fri, 19 Aug 2005 16:51:30 +0000 Subject: [PATCH] fix for pr86057, overriding of final pointcut --- tests/bugs150/pr86057.aj | 11 +++++++++++ .../org/aspectj/systemtest/ajc150/Ajc150Tests.java | 4 ++++ tests/src/org/aspectj/systemtest/ajc150/ajc150.xml | 6 ++++++ weaver/src/org/aspectj/weaver/ResolvedType.java | 9 +++++++++ weaver/src/org/aspectj/weaver/WeaverMessages.java | 1 + .../src/org/aspectj/weaver/weaver-messages.properties | 1 + 6 files changed, 32 insertions(+) create mode 100644 tests/bugs150/pr86057.aj diff --git a/tests/bugs150/pr86057.aj b/tests/bugs150/pr86057.aj new file mode 100644 index 000000000..30861a262 --- /dev/null +++ b/tests/bugs150/pr86057.aj @@ -0,0 +1,11 @@ +abstract aspect Base { + + public final pointcut foo() : execution(* *(..)); + +} + +aspect Sub extends Base { + + public pointcut foo() : execution(* *(..)) && args(String); + +} \ No newline at end of file diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java index 213213497..f4ed350fa 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java @@ -238,6 +238,10 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { runTest("void field type in pointcut expression"); } + public void testPointcutOverriding() { + runTest("overriding final pointcut from super-aspect"); + } + // helper methods..... public SyntheticRepository createRepos(File cpentry) { diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml index a8a2967c6..da8d9e661 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml @@ -77,6 +77,12 @@ + + + + + + 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 -- 2.39.5