diff options
author | aclement <aclement> | 2004-02-09 15:07:37 +0000 |
---|---|---|
committer | aclement <aclement> | 2004-02-09 15:07:37 +0000 |
commit | 775d1175b7da80535cc48d22cb424239d76594bf (patch) | |
tree | 85ffa3bc3b3d9a88240e81a889285ed25801414e /org.aspectj.ajdt.core | |
parent | 481165a816d3209bed1b07b996a3b8f043140fd4 (diff) | |
download | aspectj-775d1175b7da80535cc48d22cb424239d76594bf.tar.gz aspectj-775d1175b7da80535cc48d22cb424239d76594bf.zip |
Fix for Bugzilla Bug 50641
Better binary compatibility for advice method names
- I've run the tests a thousand times and they all pass, I'm still nervous about this first big commit though *gulp*
Diffstat (limited to 'org.aspectj.ajdt.core')
3 files changed, 13 insertions, 5 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.java index 6b6b801f5..9d10f6381 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.java @@ -263,11 +263,18 @@ public class AdviceDeclaration extends MethodDeclaration { return ret; } - public void postParse(TypeDeclaration typeDec) { + int adviceSequenceNumberInType = ((AspectDeclaration)typeDec).adviceCounter++; + + StringBuffer stringifiedPointcut = new StringBuffer(30); + pointcutDesignator.print(0,stringifiedPointcut); this.selector = - NameMangler.adviceName(EclipseFactory.fromBinding(typeDec.binding), kind, sourceStart).toCharArray(); + NameMangler.adviceName( + EclipseFactory.fromBinding(typeDec.binding), + kind, + adviceSequenceNumberInType, + stringifiedPointcut.toString().hashCode()).toCharArray(); if (arguments != null) { baseArgumentCount = arguments.length; } 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 a3cff8ae6..27db10c3e 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 @@ -53,6 +53,7 @@ public class AspectDeclaration extends TypeDeclaration { public EclipseFactory factory; //??? should use this consistently + public int adviceCounter = 1; // Used as a part of the generated name for advice methods // for better error messages in 1.0 to 1.1 transition public TypePattern dominatesPattern; diff --git a/org.aspectj.ajdt.core/testsrc/AroundAMain.java b/org.aspectj.ajdt.core/testsrc/AroundAMain.java index 2f101dd74..fcdeab18e 100644 --- a/org.aspectj.ajdt.core/testsrc/AroundAMain.java +++ b/org.aspectj.ajdt.core/testsrc/AroundAMain.java @@ -33,12 +33,12 @@ public class AroundAMain extends TestCase { Object instance = Reflection.getStaticField(Class.forName("AroundA"), "ajc$perSingletonInstance"); - Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$46", + Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$1$73ebb943", // was $AroundA$46 new Integer(10), new Boolean(true), closure); - Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$c5", + Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$2$a758212d", // Was $AroundA$c5 "hello there", closure); - Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$150", + Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$3$a758212d", // Was $AroundA$150 new String[1], closure); } |