Hi Dean,

 

The declare error doesn't apply because the advice is dispatched from those
methods but it isn't executed within them. You are asking for a new
pointcut, say advised, that is to adviceexecution as call is to execution
(modulo the difference between implicit and explicit dispatch).

 

  _____  

From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Dean Wampler
Sent: Tuesday, February 20, 2007 12:07 PM
To: [email protected]
Subject: Re: [aspectj-users] Q about "adviceexecution" and "declare error"

 

Ron Bodkin wrote: 

Indeed, you would want a withinadvice pointcut, but failing that you might
just refactor to expose the relevant code as a method. Of course, to have
something like withinadvice be useful, I'd want AspectJ to have better
matching on advice signatures too (so you could say
adviceexecution(before(int, String))).

Agreed. 

What I ended up doing was writing a PCD that looks something like this:

    cflow(execution(* MyClass.myRestrictedMethod(..)) && adviceexecution()
&& !within(ProhibitAdvice+)

(ProhibitAdvice is the aspect...)

Then I used before advice to throw an exception. Again, my particular goal
is to prevent any advice from being invoked within the execution context of
"myRestrictedMethod()".

Here's what I find perplexing. The following does nothing:

declare error: withincode(* MyClass.myRestrictedMethod(..)) &&
adviceexecution(): "message";

Looking at the AJDT adornments, it's clear that advice is being applied
within the method, from another aspect designed to trigger the error (the
adornment doesn't have a '?' on it ;). What am I missing? I thought of
precedence, but experiments there didn't do anything.

Thanks,

dean



 

  _____  

From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Dean Wampler
Sent: Tuesday, February 20, 2007 8:35 AM
To: [email protected]
Subject: Re: [aspectj-users] Q about "adviceexecution" and "declare error"

 

Thanks, Ramnivas,

I was under the mistaken impression that adviceexecution works something
like a "withincode" or "cflow", which of course it doesn't.

dean

Ramnivas Laddad wrote: 

Dean,

Since adviceexecution() will match an advice join point and
criticalSectionPCD() will match a non-advice join point (in your case, I
presume you are selecting execution() or call() join point), combining the
corresponding pointcuts using && will match nothing. 

-Ramnivas

On 2/20/07, Dean Wampler <[EMAIL PROTECTED]> wrote: 

I'm working on idioms for defining PCDs that a class developer can use to
exclude join points from possible advices. For example, say I want a
'critical section' to never be advised.

What I've tried is something like the following:

declare error: criticalSectionPCD() && adviceexecution(): "Can't advise the
critical section."

This compiles fine, but it has no effect. (I defined another aspect that
breaks the rule.)

Suggestions?

dean

 

 





  _____  



 
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users
  

 

-- 

Dean Wampler, Ph.D.
dean at aspectprogramming.com
objectmentor.com <http://www.objectmentor.com> 
aspectprogramming.com <http://www.aspectprogramming.com> 
contract4j.org <http://www.contract4j.org> 

I want my tombstone to say: 


Unknown Application Error in Dean Wampler.exe.
Application Terminated.


Okay

Cancel

_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to