]> source.dussan.org Git - aspectj.git/commitdiff
fix for pr108818, remember the actual declaring type of a member that refers to a...
authoracolyer <acolyer>
Tue, 6 Sep 2005 10:59:34 +0000 (10:59 +0000)
committeracolyer <acolyer>
Tue, 6 Sep 2005 10:59:34 +0000 (10:59 +0000)
weaver/src/org/aspectj/weaver/Advice.java
weaver/src/org/aspectj/weaver/Checker.java
weaver/src/org/aspectj/weaver/CrosscuttingMembers.java
weaver/src/org/aspectj/weaver/ReferenceType.java
weaver/src/org/aspectj/weaver/ResolvedType.java
weaver/src/org/aspectj/weaver/ShadowMunger.java

index 0d47bf42450089c6b0dd7c0b6af984fb6c5ba895..989b5650151a359bf0f5acef9abf06e5659e3cce 100644 (file)
@@ -270,7 +270,7 @@ public abstract class Advice extends ShadowMunger {
      */
     public ShadowMunger concretize(ResolvedType fromType, World world, PerClause clause) {
        // assert !fromType.isAbstract();
-        Pointcut p = pointcut.concretize(fromType, signature.getArity(), this);
+        Pointcut p = pointcut.concretize(fromType, getDeclaringType(), signature.getArity(), this);
         if (clause != null) {
                Pointcut oldP = p;
                p = new AndPointcut(clause, p);
index 02678d535c071ab5541874bc4117c18388e6cd0f..4b035b1717951bd00cd431fbc5c756497e8d21d1 100644 (file)
@@ -32,7 +32,7 @@ public class Checker extends ShadowMunger {
        }                
 
     public ShadowMunger concretize(ResolvedType fromType, World world, PerClause clause) {
-        pointcut = pointcut.concretize(fromType, 0, this);
+        pointcut = pointcut.concretize(fromType, getDeclaringType(), 0, this);
         return this;
     }
 
index 85dfd3664f4c71fbc630325087c6893f959485c3..3e74251b38efe62cc94cbc6bcca50d65e7730bb8 100644 (file)
@@ -111,6 +111,7 @@ public class CrosscuttingMembers {
                // this is not extensible, oh well
                if (declare instanceof DeclareErrorOrWarning) {
                        ShadowMunger m = new Checker((DeclareErrorOrWarning)declare);
+                       m.setDeclaringType(declare.getDeclaringType());
                        addShadowMunger(m);
                } else if (declare instanceof DeclarePrecedence) {
                        declareDominates.add(declare);
@@ -122,7 +123,8 @@ public class CrosscuttingMembers {
                        DeclareSoft d = (DeclareSoft)declare;
                        // Ordered so that during concretization we can check the related munger
                        ShadowMunger m = Advice.makeSoftener(world, d.getPointcut(), d.getException(),inAspect,d);
-                       Pointcut concretePointcut = d.getPointcut().concretize(inAspect, 0,m);
+                       m.setDeclaringType(d.getDeclaringType());
+                       Pointcut concretePointcut = d.getPointcut().concretize(inAspect, d.getDeclaringType(), 0,m);
                        m.pointcut = concretePointcut;
                        declareSofts.add(new DeclareSoft(d.getException(), concretePointcut));
                        addConcreteShadowMunger(m);
index 0061e3f992f11758990b23d72819a52bfa262d1d..75d35acb513173a4bc262e7e0b862b0b751469d5 100644 (file)
@@ -421,6 +421,7 @@ public class ReferenceType extends ResolvedType {
        
        protected Collection getDeclares() {
                if (parameterizedDeclares != null) return parameterizedDeclares;
+               Collection declares = null;
                if (isParameterizedType()) {
                        Collection genericDeclares = delegate.getDeclares();
                        parameterizedDeclares = new ArrayList();
@@ -429,10 +430,15 @@ public class ReferenceType extends ResolvedType {
                                Declare declareStatement = (Declare) iter.next();
                                parameterizedDeclares.add(declareStatement.parameterizeWith(parameterizationMap));
                        }
-                       return parameterizedDeclares;
+                       declares = parameterizedDeclares;
                } else {
-                       return delegate.getDeclares();
+                       declares = delegate.getDeclares();
                }
+               for (Iterator iter = declares.iterator(); iter.hasNext();) {
+                       Declare d = (Declare) iter.next();
+                       d.setDeclaringType(this);
+               }
+               return declares;
        }
        
        protected Collection getTypeMungers() { return delegate.getTypeMungers(); }
index 73142c23bf6c2ac7526360335fbe8458299d6922..b453e1745faad830221ee35b5569678d41c8f145 100644 (file)
@@ -633,6 +633,7 @@ public abstract class ResolvedType extends UnresolvedType implements AnnotatedEl
                                if (this.isParameterizedType()) {
                                        munger.setPointcut(munger.getPointcut().parameterizeWith(typeVariableMap));
                                }
+                               munger.setDeclaringType(this);
                                l.add(munger);
                        }
                }
index 8a8d2bf6759a86465e8448942cfa8a64891a4f1f..0d7e749253baf2b328ba77e0c59e901c49db1fb3 100644 (file)
@@ -41,6 +41,7 @@ public abstract class ShadowMunger implements PartialOrder.PartialComparable, IH
        protected ISourceContext sourceContext;
        private ISourceLocation sourceLocation;
        private String handle = null;
+       private ResolvedType declaringType;  // the type that declared this munger.
 
        
        public ShadowMunger(Pointcut pointcut, int start, int end, ISourceContext sourceContext) {
@@ -112,7 +113,18 @@ public abstract class ShadowMunger implements PartialOrder.PartialComparable, IH
                this.pointcut = pointcut;
        }
 
-
+       /**
+        * Invoked when the shadow munger of a resolved type are processed.
+        * @param aType
+        */
+       public void setDeclaringType(ResolvedType aType) {
+               this.declaringType = aType;
+       }
+       
+       public ResolvedType getDeclaringType() {
+               return this.declaringType;
+       }
+       
        /**
         * @return a Collection of ResolvedType for all checked exceptions that
         *          might be thrown by this munger