From c517e8507cbc0be482d3eb1be2694e3f6486a4e3 Mon Sep 17 00:00:00 2001 From: acolyer Date: Wed, 7 Jan 2004 13:10:07 +0000 Subject: [PATCH] fix for bug 49457 - test for duplicate pointcut definitions in classes --- .../compiler/ast/AspectDeclaration.java | 2 -- .../compiler/lookup/AjLookupEnvironment.java | 11 +++++++-- tests/ajcTests.xml | 20 ++++++++++++++++ tests/bugs/OverloadedPointcutsInAspect.java | 23 +++++++++++++++++++ tests/bugs/OverloadedPointcutsInClass.java | 9 ++++++++ 5 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 tests/bugs/OverloadedPointcutsInAspect.java create mode 100644 tests/bugs/OverloadedPointcutsInClass.java diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.java index 90ac38a84..e30a1fa16 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.java @@ -68,8 +68,6 @@ public class AspectDeclaration extends MemberTypeDeclaration { return; } - if (concreteName != null) concreteName.checkPointcutDeclarations(); - super.resolve(); } diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java index 711eb25fc..2969cc649 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java @@ -176,12 +176,13 @@ public class AjLookupEnvironment extends LookupEnvironment { private void resolvePointcutDeclarations(ClassScope s) { TypeDeclaration dec = s.referenceContext; SourceTypeBinding sourceType = s.referenceContext.binding; - + boolean hasPointcuts = false; AbstractMethodDeclaration[] methods = dec.methods; boolean initializedMethods = false; if (methods != null) { for (int i=0; i < methods.length; i++) { if (methods[i] instanceof PointcutDeclaration) { + hasPointcuts = true; if (!initializedMethods) { sourceType.methods(); //force initialization initializedMethods = true; @@ -190,7 +191,13 @@ public class AjLookupEnvironment extends LookupEnvironment { } } } - + + if (hasPointcuts || dec instanceof AspectDeclaration) { + ResolvedTypeX.Name name = (ResolvedTypeX.Name)factory.fromEclipse(sourceType); + EclipseSourceType eclipseSourceType = (EclipseSourceType)name.getDelegate(); + eclipseSourceType.checkPointcutDeclarations(); + } + ReferenceBinding[] memberTypes = sourceType.memberTypes; for (int i = 0, length = memberTypes.length; i < length; i++) { resolvePointcutDeclarations(((SourceTypeBinding) memberTypes[i]).scope); diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml index 09844ec3a..3f9841dc7 100644 --- a/tests/ajcTests.xml +++ b/tests/ajcTests.xml @@ -6802,4 +6802,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/tests/bugs/OverloadedPointcutsInAspect.java b/tests/bugs/OverloadedPointcutsInAspect.java new file mode 100644 index 000000000..d483a1885 --- /dev/null +++ b/tests/bugs/OverloadedPointcutsInAspect.java @@ -0,0 +1,23 @@ +class OverloadedPointcutsInAspect { + public static void main(String[] args) { + new C().run(); + } +} +class C { + public void run() {} +} + +aspect A { + declare parents: C implements Runnable; + declare parents: C implements SubRunnable; + interface SubRunnable extends Runnable {} + + pointcut pc(Runnable r) : target(r) && call(void run()); + pointcut pc(SubRunnable r) : target(r) && call(void run()); + before(Runnable r) : pc(r) { log("pc(Runnable r)"); } + before(SubRunnable r) : pc(r) { log("pc(SubRunnable r)"); } + before() : pc(Runnable) { log("pc(Runnable)"); } + before() : pc(SubRunnable) { log("pc(SubRunnable)"); } + before() : pc(*) { log("pc(*)"); } + void log(String s) { System.out.println(s); } +} diff --git a/tests/bugs/OverloadedPointcutsInClass.java b/tests/bugs/OverloadedPointcutsInClass.java new file mode 100644 index 000000000..49aff6996 --- /dev/null +++ b/tests/bugs/OverloadedPointcutsInClass.java @@ -0,0 +1,9 @@ +public class OverloadedPointcutsInClass { + + pointcut pc1(): call(* *(..)); + pointcut pc1(): execution(* *(..)); + + pointcut pc2(String s): call(* *(..)) && target(s); + pointcut pc2(StringBuffer sb): call(* *(..)) && target(sb); + +} -- 2.39.5