How would I fashion a point cut that matched a method invocation only if it had not already been applied to an overridden form of that method in a superclass? For instance in one project I have:

public class SimpleQuery{

        public void appendConstraints(){
                ..add default constraints..
        }

}

public interface SuppressableQuery{

        ...some stuff relevant to suppression...

}

public aspect SuppressableQueryAspect{

void around(SuppressableQuery query) : execution(protected void SimpleQuery.appendConstraints()) && this(query) {
                /* Not really important what this does, just when it is applied 
*/
                if(query.getSuppressed() != null){
                        query.addClause(
(query.getSuppressed() ? "" : "NOT ") + "EXISTS (SELECT suppression.partitionId " +
                                        "FROM " + 
query.getSuppressionType().getName() +
" suppression WHERE suppression.partitionId IN (:suppressionOrder) " + "AND suppression.entity = " + query.getSuppressedEntityField() + ")");
                        query.addParameter("suppressionOrder", 
query.getSuppressionOrder());
                }
                proceed(query);
        }

}

Then in another project with a jar containing the jar from the first project on the aspect path:

public class ProfileQuery extends SimpleQuery<Profile> implements
        PartitionedQuery<Profile>, SuppressableQuery<Profile> {

        @Override
        protected void appendConstraints() {
                super.appendConstraints();
                if(onetOccupationStub != null){
                        addClause(alias("delegate") + " = :onetOccupationStub");
                        addParameter("onetOccupationStub", onetOccupationStub);
                }
        }

}

What I'm seeing is that the clause is added to the query twice, when I only want it to match one invocation of appendConstraints, in this case the one in ProfileQuery. Can that be done?
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to