BcelMethod(BcelObjectType declaringType, Method method) {
super(
- method.getName().equals("<init>") ? CONSTRUCTOR : METHOD,
+ method.getName().equals("<init>") ? CONSTRUCTOR :
+ (method.getName().equals("<clinit>") ? STATIC_INITIALIZATION : METHOD),
declaringType,
declaringType.isInterface()
? method.getAccessFlags() | Modifier.INTERFACE
public AjAttribute.EffectiveSignatureAttribute getEffectiveSignature() {
return effectiveSignature;
}
+
+ public Kind getKind() {
+ if (associatedShadowMunger != null) {
+ return ADVICE;
+ } else {
+ return super.getKind();
+ }
+ }
}
new BcelShadow(
world,
AdviceExecution,
- world.makeMethodSignature(enclosingMethod),
+ world.makeMethodSignature(enclosingMethod, Member.ADVICE),
enclosingMethod,
null);
ShadowRange r = new ShadowRange(body);
fi.getName(cpg),
"(" + fi.getSignature(cpg) + ")" +fi.getSignature(cpg));
}
-
+
public Member makeMethodSignature(LazyMethodGen mg) {
+ return makeMethodSignature(mg, null);
+ }
+
+
+ public Member makeMethodSignature(LazyMethodGen mg, Member.Kind kind) {
ResolvedMember ret = mg.getMemberView();
if (ret == null) {
int mods = mg.getAccessFlags();
if (mg.getEnclosingClass().isInterface()) {
mods |= Modifier.INTERFACE;
}
-
- org.aspectj.weaver.Member.Kind kind;
- if (mg.getName().equals("<init>")) {
- kind = Member.CONSTRUCTOR;
- } else if (mg.getName().equals("<clinit>")) {
- kind = Member.STATIC_INITIALIZATION;
- } else {
- kind = Member.METHOD;
+ if (kind == null) {
+ if (mg.getName().equals("<init>")) {
+ kind = Member.CONSTRUCTOR;
+ } else if (mg.getName().equals("<clinit>")) {
+ kind = Member.STATIC_INITIALIZATION;
+ } else {
+ kind = Member.METHOD;
+ }
}
-
return new ResolvedMember(kind,
TypeX.forName(mg.getClassName()),
mods,
world.getLint().unresolvableMember.signal(member.toString(), getSourceLocation());
return false;
}
-
- // AMC test for Kind match surely???
- if (!(sig.getKind() == kind)) return false;
-
-
+
+ // This check should only matter when used from WithincodePointcut as KindedPointcut
+ // has already effectively checked this with the shadows kind.
+ if (kind != member.getKind()) {
+ return false;
+ }
+
if (kind == Member.ADVICE) return true;
if (!modifiers.matches(sig.getModifiers())) return false;
-
-
if (kind == Member.STATIC_INITIALIZATION) {
//System.err.println("match static init: " + sig.getDeclaringType() + " with " + this);