diff options
author | aclement <aclement> | 2004-12-02 10:30:25 +0000 |
---|---|---|
committer | aclement <aclement> | 2004-12-02 10:30:25 +0000 |
commit | 4a3b9fe5d1218adfc82296965be280c592769284 (patch) | |
tree | fb667405d578d871200164bcbcae4dd325092ee7 | |
parent | bbfea3bdfa9eddd1121791f46e63794175e63786 (diff) | |
download | aspectj-4a3b9fe5d1218adfc82296965be280c592769284.tar.gz aspectj-4a3b9fe5d1218adfc82296965be280c592769284.zip |
72766 - when *binary weaving* output messages to stop ITDs on enums/annotations
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java index a824e84d2..219c91fc4 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java @@ -98,7 +98,7 @@ public class BcelTypeMunger extends ConcreteTypeMunger { } // TAG: WeavingMessage - if (worthReporting && munger!=null && !weaver.getWorld().getMessageHandler().isIgnoring(IMessage.WEAVEINFO)) { + if (changed && worthReporting && munger!=null && !weaver.getWorld().getMessageHandler().isIgnoring(IMessage.WEAVEINFO)) { String tName = weaver.getLazyClassGen().getType().getSourceLocation().getSourceFile().getName(); if (tName.indexOf("no debug info available")!=-1) tName = "no debug info available"; else tName = getShortname(weaver.getLazyClassGen().getType().getSourceLocation().getSourceFile().getPath()); @@ -379,6 +379,16 @@ public class BcelTypeMunger extends ConcreteTypeMunger { ResolvedTypeX onType = weaver.getWorld().resolve(signature.getDeclaringType(),munger.getSourceLocation()); boolean onInterface = onType.isInterface(); + if (onType.isAnnotation(weaver.getWorld())) { + signalError(WeaverMessages.ITDM_ON_ANNOTATION_NOT_ALLOWED,weaver,onType); + return false; + } + + if (onType.isEnum(weaver.getWorld())) { + signalError(WeaverMessages.ITDM_ON_ENUM_NOT_ALLOWED,weaver,onType); + return false; + } + if (onType.equals(gen.getType())) { ResolvedMember introMethod = AjcMemberMaker.interMethod(signature, aspectType, onInterface); @@ -508,6 +518,11 @@ public class BcelTypeMunger extends ConcreteTypeMunger { } } + private void signalError(String msgid,BcelClassWeaver weaver,TypeX onType) { + IMessage msg = MessageUtil.error( + WeaverMessages.format(msgid,onType.getName()),getSourceLocation()); + weaver.getWorld().getMessageHandler().handleMessage(msg); + } private boolean mungeNewConstructor( BcelClassWeaver weaver, @@ -519,6 +534,16 @@ public class BcelTypeMunger extends ConcreteTypeMunger { ResolvedMember newConstructorMember = newConstructorTypeMunger.getSyntheticConstructor(); TypeX onType = newConstructorMember.getDeclaringType(); + if (onType.isAnnotation(weaver.getWorld())) { + signalError(WeaverMessages.ITDC_ON_ANNOTATION_NOT_ALLOWED,weaver,onType); + return false; + } + + if (onType.isEnum(weaver.getWorld())) { + signalError(WeaverMessages.ITDC_ON_ENUM_NOT_ALLOWED,weaver,onType); + return false; + } + if (! onType.equals(currentClass.getType())) return false; ResolvedMember explicitConstructor = newConstructorTypeMunger.getExplicitConstructor(); @@ -655,6 +680,16 @@ public class BcelTypeMunger extends ConcreteTypeMunger { ResolvedTypeX onType = weaver.getWorld().resolve(field.getDeclaringType(),munger.getSourceLocation()); boolean onInterface = onType.isInterface(); + if (onType.isAnnotation(weaver.getWorld())) { + signalError(WeaverMessages.ITDF_ON_ANNOTATION_NOT_ALLOWED,weaver,onType); + return false; + } + + if (onType.isEnum(weaver.getWorld())) { + signalError(WeaverMessages.ITDF_ON_ENUM_NOT_ALLOWED,weaver,onType); + return false; + } + if (onType.equals(gen.getType())) { if (onInterface) { LazyMethodGen mg = makeMethodGen(gen, |