aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhugunin <jhugunin>2003-08-08 01:23:31 +0000
committerjhugunin <jhugunin>2003-08-08 01:23:31 +0000
commit3e5974557278e81a9891edd4269eca39a8d42f43 (patch)
tree3b6198180f7da196f47896ba3d5570bb58ebefe2
parentefc1cc47398443b33fe90da11c4cf1d14dc9c108 (diff)
downloadaspectj-3e5974557278e81a9891edd4269eca39a8d42f43.tar.gz
aspectj-3e5974557278e81a9891edd4269eca39a8d42f43.zip
fix and tests for Bugzilla Bug 41123
Weaving failure when using injars
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java8
-rw-r--r--tests/ajcTests.xml36
-rw-r--r--tests/bugs/moreInterfaceLibrary/lib.jarbin0 -> 1458 bytes
-rw-r--r--tests/bugs/moreInterfaceLibrary/lib/ExecutionMonitor.aj6
-rw-r--r--tests/bugs/moreInterfaceLibrary/model/BusObj.java5
-rw-r--r--tests/bugs/moreInterfaceLibrary/model/MonitorBusObj.java7
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java4
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java15
8 files changed, 79 insertions, 2 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java
index daacbc4e5..8bbf228a8 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java
@@ -160,7 +160,7 @@ public class AjLookupEnvironment extends LookupEnvironment {
Collection mungers =
onType.getWeaverState().getTypeMungers(onType);
- //System.out.println("mungers: " + mungers);
+ //System.out.println(onType + " mungers: " + mungers);
for (Iterator i = mungers.iterator(); i.hasNext(); ) {
ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
EclipseTypeMunger munger = factory.makeEclipseTypeMunger(m);
@@ -235,6 +235,12 @@ public class AjLookupEnvironment extends LookupEnvironment {
if (!newParents.isEmpty()) {
for (Iterator i = newParents.iterator(); i.hasNext(); ) {
ResolvedTypeX parent = (ResolvedTypeX)i.next();
+ if (dangerousInterfaces.containsKey(parent)) {
+ ResolvedTypeX onType = factory.fromEclipse(sourceType);
+ factory.showMessage(IMessage.ERROR,
+ onType + ": " + dangerousInterfaces.get(parent),
+ onType.getSourceLocation(), null);
+ }
addParent(sourceType, parent);
}
}
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml
index 1a73d9990..5fa1ab82d 100644
--- a/tests/ajcTests.xml
+++ b/tests/ajcTests.xml
@@ -6667,4 +6667,40 @@
</compile>
</ajc-test>
+
+ <ajc-test dir="bugs/moreInterfaceLibrary"
+ pr="41123"
+ title="Weaving failure when using injars (no jars)">
+ <compile
+ files="lib/ExecutionMonitor.aj,model/BusObj.java,model/MonitorBusObj.java">
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs/moreInterfaceLibrary"
+ pr="41123"
+ title="Weaving failure when using injars (on aspectpath)">
+ <compile
+ files="model/BusObj.java,model/MonitorBusObj.java"
+ aspectpath="lib.jar">
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs/moreInterfaceLibrary"
+ pr="41123"
+ title="Weaving failure when using injars (on classpath)">
+ <compile
+ files="model/BusObj.java,model/MonitorBusObj.java"
+ classpath="lib.jar">
+ <message kind="error" line="3"/>
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs/moreInterfaceLibrary"
+ pr="41123"
+ title="Weaving failure when using injars (actual injars)">
+ <compile
+ files="model/BusObj.java,model/MonitorBusObj.java,lib.jar">
+ <message kind="error" line="3"/>
+ </compile>
+ </ajc-test>
</suite>
diff --git a/tests/bugs/moreInterfaceLibrary/lib.jar b/tests/bugs/moreInterfaceLibrary/lib.jar
new file mode 100644
index 000000000..0c6f6c26e
--- /dev/null
+++ b/tests/bugs/moreInterfaceLibrary/lib.jar
Binary files differ
diff --git a/tests/bugs/moreInterfaceLibrary/lib/ExecutionMonitor.aj b/tests/bugs/moreInterfaceLibrary/lib/ExecutionMonitor.aj
new file mode 100644
index 000000000..ec2314d14
--- /dev/null
+++ b/tests/bugs/moreInterfaceLibrary/lib/ExecutionMonitor.aj
@@ -0,0 +1,6 @@
+package lib;
+
+public aspect ExecutionMonitor {
+ public interface MonitoredItem {}
+ private void MonitoredItem.record(String eventType, String eventName) {}
+} \ No newline at end of file
diff --git a/tests/bugs/moreInterfaceLibrary/model/BusObj.java b/tests/bugs/moreInterfaceLibrary/model/BusObj.java
new file mode 100644
index 000000000..90efbd79d
--- /dev/null
+++ b/tests/bugs/moreInterfaceLibrary/model/BusObj.java
@@ -0,0 +1,5 @@
+package model;
+
+public class BusObj {
+
+}
diff --git a/tests/bugs/moreInterfaceLibrary/model/MonitorBusObj.java b/tests/bugs/moreInterfaceLibrary/model/MonitorBusObj.java
new file mode 100644
index 000000000..2d5224004
--- /dev/null
+++ b/tests/bugs/moreInterfaceLibrary/model/MonitorBusObj.java
@@ -0,0 +1,7 @@
+package model;
+
+import lib.ExecutionMonitor;
+
+public aspect MonitorBusObj {
+ declare parents: BusObj implements ExecutionMonitor.MonitoredItem;
+} \ No newline at end of file
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java
index 5b9de1855..6f57e56bf 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java
@@ -223,13 +223,15 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
private LazyMethodGen makeMethodGen(LazyClassGen gen, ResolvedMember member) {
- return new LazyMethodGen(
+ LazyMethodGen ret = new LazyMethodGen(
member.getModifiers(),
BcelWorld.makeBcelType(member.getReturnType()),
member.getName(),
BcelWorld.makeBcelTypes(member.getParameterTypes()),
TypeX.getNames(member.getExceptions()),
gen);
+ ret.makeSynthetic();
+ return ret;
}
diff --git a/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java b/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java
index 7c4e660db..dd011f6c3 100644
--- a/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java
+++ b/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java
@@ -30,11 +30,13 @@ import org.apache.bcel.Constants;
import org.apache.bcel.classfile.Attribute;
import org.apache.bcel.classfile.ConstantPool;
import org.apache.bcel.classfile.Method;
+import org.apache.bcel.classfile.Synthetic;
import org.apache.bcel.generic.BranchHandle;
import org.apache.bcel.generic.BranchInstruction;
import org.apache.bcel.generic.CPInstruction;
import org.apache.bcel.generic.ClassGenException;
import org.apache.bcel.generic.CodeExceptionGen;
+import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.generic.Instruction;
import org.apache.bcel.generic.InstructionHandle;
import org.apache.bcel.generic.InstructionList;
@@ -85,6 +87,8 @@ public final class LazyMethodGen {
private boolean canInline = true;
private boolean hasExceptionHandlers;
+ private boolean isSynthetic = false;
+
/**
* only used by {@link BcelClassWeaver}
*/
@@ -702,6 +706,13 @@ public final class LazyMethodGen {
for (int i = 0, len = attributes.length; i < len; i++) {
gen.addAttribute(attributes[i]);
}
+
+ if (isSynthetic) {
+ ConstantPoolGen cpg = gen.getConstantPool();
+ int index = cpg.addUtf8("Synthetic");
+ gen.addAttribute(new Synthetic(index, 0, new byte[0], cpg.getConstantPool()));
+ }
+
if (hasBody()) {
packBody(gen);
gen.setMaxLocals();
@@ -711,6 +722,10 @@ public final class LazyMethodGen {
}
return gen;
}
+
+ public void makeSynthetic() {
+ isSynthetic = true;
+ }
/** fill the newly created method gen with our body,
* inspired by InstructionList.copy()