@@ -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); | |||
} | |||
} |
@@ -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> |
@@ -0,0 +1,6 @@ | |||
package lib; | |||
public aspect ExecutionMonitor { | |||
public interface MonitoredItem {} | |||
private void MonitoredItem.record(String eventType, String eventName) {} | |||
} |
@@ -0,0 +1,5 @@ | |||
package model; | |||
public class BusObj { | |||
} |
@@ -0,0 +1,7 @@ | |||
package model; | |||
import lib.ExecutionMonitor; | |||
public aspect MonitorBusObj { | |||
declare parents: BusObj implements ExecutionMonitor.MonitoredItem; | |||
} |
@@ -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; | |||
} | |||
@@ -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() |