From: jhugunin Date: Fri, 8 Aug 2003 01:23:31 +0000 (+0000) Subject: fix and tests for Bugzilla Bug 41123 X-Git-Tag: V1_1_1~123 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3e5974557278e81a9891edd4269eca39a8d42f43;p=aspectj.git fix and tests for Bugzilla Bug 41123 Weaving failure when using injars --- 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 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/bugs/moreInterfaceLibrary/lib.jar b/tests/bugs/moreInterfaceLibrary/lib.jar new file mode 100644 index 000000000..0c6f6c26e Binary files /dev/null and b/tests/bugs/moreInterfaceLibrary/lib.jar 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()