浏览代码

fix and tests for Bugzilla Bug 41123

	  	Weaving failure when using injars
tags/V1_1_1
jhugunin 21 年前
父节点
当前提交
3e59745572

+ 7
- 1
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);
}
}

+ 36
- 0
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>

二进制
tests/bugs/moreInterfaceLibrary/lib.jar 查看文件


+ 6
- 0
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) {}
}

+ 5
- 0
tests/bugs/moreInterfaceLibrary/model/BusObj.java 查看文件

@@ -0,0 +1,5 @@
package model;

public class BusObj {

}

+ 7
- 0
tests/bugs/moreInterfaceLibrary/model/MonitorBusObj.java 查看文件

@@ -0,0 +1,7 @@
package model;

import lib.ExecutionMonitor;

public aspect MonitorBusObj {
declare parents: BusObj implements ExecutionMonitor.MonitoredItem;
}

+ 3
- 1
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;
}



+ 15
- 0
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()

正在加载...
取消
保存