summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2004-12-02 10:30:25 +0000
committeraclement <aclement>2004-12-02 10:30:25 +0000
commit4a3b9fe5d1218adfc82296965be280c592769284 (patch)
treefb667405d578d871200164bcbcae4dd325092ee7
parentbbfea3bdfa9eddd1121791f46e63794175e63786 (diff)
downloadaspectj-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.java37
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,