diff options
author | aclement <aclement> | 2006-03-27 21:16:39 +0000 |
---|---|---|
committer | aclement <aclement> | 2006-03-27 21:16:39 +0000 |
commit | 638db357bdf26a8afb6699c84002762fa7d4e518 (patch) | |
tree | c5d0b3916c49dc856dd0a5e1d50b1840575e0364 /weaver | |
parent | 6c4770cba1ff07c1d5a406b34f0cfc44a3e05ebe (diff) | |
download | aspectj-638db357bdf26a8afb6699c84002762fa7d4e518.tar.gz aspectj-638db357bdf26a8afb6699c84002762fa7d4e518.zip |
test and fixes for 98901, comment 29
Diffstat (limited to 'weaver')
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java index 540ad8099..f055002f9 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java @@ -875,8 +875,29 @@ public class BcelTypeMunger extends ConcreteTypeMunger { ResolvedMember mangledInterMethod = AjcMemberMaker.interMethod(unMangledInterMethod, aspectType, false); - + LazyMethodGen mg = makeMethodGen(gen, mangledInterMethod); + + // From 98901#29 - need to copy annotations across + if (weaver.getWorld().isInJava5Mode()){ + AnnotationX annotationsOnRealMember[] = null; + ResolvedType toLookOn = aspectType; + if (aspectType.isRawType()) toLookOn = aspectType.getGenericType(); + ResolvedMember realMember = getRealMemberForITDFromAspect(toLookOn,memberHoldingAnyAnnotations,false); + if (realMember==null) throw new BCException("Couldn't find ITD holder member '"+ + memberHoldingAnyAnnotations+"' on aspect "+aspectType); + annotationsOnRealMember = realMember.getAnnotations(); + + if (annotationsOnRealMember!=null) { + for (int i = 0; i < annotationsOnRealMember.length; i++) { + AnnotationX annotationX = annotationsOnRealMember[i]; + Annotation a = annotationX.getBcelAnnotation(); + AnnotationGen ag = new AnnotationGen(a,weaver.getLazyClassGen().getConstantPoolGen(),true); + mg.addAnnotation(new AnnotationX(ag.getAnnotation(),weaver.getWorld())); + } + } + } + if (mungingInterface) { // we want the modifiers of the ITD to be used for all *implementors* of the // interface, but the method itself we add to the interface must be public abstract |