summaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoraclement <aclement>2006-03-27 21:16:39 +0000
committeraclement <aclement>2006-03-27 21:16:39 +0000
commit638db357bdf26a8afb6699c84002762fa7d4e518 (patch)
treec5d0b3916c49dc856dd0a5e1d50b1840575e0364 /weaver
parent6c4770cba1ff07c1d5a406b34f0cfc44a3e05ebe (diff)
downloadaspectj-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.java23
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