]> source.dussan.org Git - aspectj.git/commitdiff
handling kinds more carefully for shadow sigs so that we can check for
authorjhugunin <jhugunin>
Wed, 5 Mar 2003 19:34:28 +0000 (19:34 +0000)
committerjhugunin <jhugunin>
Wed, 5 Mar 2003 19:34:28 +0000 (19:34 +0000)
matching kinds with SignaturePattern

weaver/src/org/aspectj/weaver/bcel/BcelMethod.java
weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
weaver/src/org/aspectj/weaver/bcel/BcelWorld.java
weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java

index 696a5df4dc654009ce1232f0b5c59834b54feb9b..9d38b2fd49feb512ed0925fe27cbe56d8988de3b 100644 (file)
@@ -37,7 +37,8 @@ final class BcelMethod extends ResolvedMember {
 
        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
@@ -113,4 +114,12 @@ final class BcelMethod extends ResolvedMember {
        public AjAttribute.EffectiveSignatureAttribute getEffectiveSignature() {
                return effectiveSignature;
        }
+       
+       public Kind getKind() {
+               if (associatedShadowMunger != null) {
+                       return ADVICE;
+               } else {
+                       return super.getKind();
+               }
+       }
 }
index cff8c4fa9687fe6b09a5624333a2d2e07c05f885..c1417b7a663862931e5d591d4cb65f6958ce68b1 100644 (file)
@@ -538,7 +538,7 @@ public class BcelShadow extends Shadow {
                        new BcelShadow(
                                world,
                                AdviceExecution,
-                               world.makeMethodSignature(enclosingMethod),
+                               world.makeMethodSignature(enclosingMethod, Member.ADVICE),
                                enclosingMethod,
                                null);
                ShadowRange r = new ShadowRange(body);
index 27249e2cffc238cb95553ff685ef9f86a3fc3e4e..b683aff61293eff4c17a8489fb11c72a1c4055a4 100644 (file)
@@ -252,24 +252,28 @@ public class BcelWorld extends World {
                 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,
index d07a2bb12675e0c278a8990ca0023046efc78f44..28ffb33dcdaf9a078f449b397298248b26017a62 100644 (file)
@@ -93,16 +93,16 @@ public class SignaturePattern extends PatternNode {
                        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);