Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] poss optimisations for target() when can't weave

[I'd reply inline if I weren't using Outlook which just won't do internet style.]
 
Bloat.  Yes, understand in the case of execution(), but where the user is forced to use call because the target cannot be woven, then it'd reduce code bloat and help JIT.  Seems to me that minimising the use of call() helps build times, and LTW times.
 
I'll stick an enhancement request in later (at least others might find it and comment too), and maybe even have a look at prototyping it.  It could be that I'm on a particularly weird project that has this use case show up, so it's definitely not high priority.
 
Once I get some time in late April, I may get a chance to capture what has and hasn't worked on this project - even if it's extended, I expect to free up a day a week for open source efforts.


From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Andy Clement
Sent: 26 March 2009 16:13
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] pointcut for super.*(..)

Hi Neale,

2009/3/26 Neale Upstone <neale.upstone@xxxxxxxxxx>
Would this not be a useful approach? 

Could be... show me there is a performance problem with the generated code we have today or a (real) use case that it doesn't work for and I would investigate - I don't like optimizing without good cause.  I've enough work to do on bugs we do have :)
 
It would save the runtime check and allow the advice to be applied with the least weaving / code bloat, and therefore would help performance.

Adding a new method to the subtype is code bloat...

I suspect it may be a special case, and that what you're doing at the moment allows the rest of the pointcut to be quite general.  e.g. && ((target(X) || target(Y))  would require code inserting in multiple places.  I still suspect it's better than grabbing every call() in the case where the target joinpoint is within a lib we don't want to weave.
 
It's also worth considering how this applies in the world of Equinox Aspects.  Doing the least weaving and having flexibility as to where that weaving happens could be quite important.

I do prefer general purpose reusable solutions for weaving - I tend to only look to special case for something that really needs it (for performance or feasibility reasons).  The JIT can do a better job in many cases than I can by crafting some intricate bit of code - so I will only meddle with optimization of generated code if necessary.  We have no open bugs related to the performance of the generated code (though there may well be issues but no-one is telling me about them...).  If you have a real use case then please raise an enhancement request so it isn't lost in the mailing list traffic.  You may be onto something with the flexibility equinox aspects will need given classloader boundaries and what the weaver can get to (although if every bundle has a weaver attached to its classloader, we can weave anywhere).

Andy.
 

 


From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Andy Clement
Sent: 25 March 2009 17:54

To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] pointcut for super.*(..)

We don't insert any methods like that.  It will advise the setVisible method in the superclass with a runtime check to see what 'this' is at the time setVisible is running - if it is a MyForm then the advice will run.

Andy.

2009/3/25 Neale Upstone <neale.upstone@xxxxxxxxxx>
This reminds me of a question I meant to ask.

If I create around() advice for a method that is not implemented in the
target class, and the implementation does exist in the super class, what
happens.

I know that call(public void setVisible(boolean)) && target(MyForm) will
weave at the call sites, but... what does the weaver do with:
       execution(public void setVisible(boolean)) && this(MyForm)  ?

I'd hope that it ends up with a method added to MyForm, where proceed()
calls super.setVisible().

Is that the case?


 
**********************************************************************
IMPORTANT NOTICE.
Confidentiality:  This e-mail and its attachments are intended for the above named only and may be confidential.  If they have come to you in error you must take no action based on them, nor must you copy or show them to anyone; please reply to this e-mail and highlight the error.
Security Warning:  Please note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium.
We advise that you understand and observe this lack of security when e-mailing us.
Viruses:  Although we have taken steps to ensure that this e-mail and attachments are free from any virus, we advise that in keeping with good computing practice the recipient should ensure they are actually virus free.
Monitoring and Scanning:  Cambridge Cognition has monitoring and scanning systems in place in relation to emails sent and received to: monitor / record business communications; prevent and detect crime; investigate the use of the Company's internal and external email system; and provide evidence of compliance with business practices.

Cambridge Cognition Limited
Company Registration Number 4338746
Registered address:
Tunbridge Court
Tunbridge Lane
Bottisham
Cambridge
CB25 9TU
UK
**********************************************************************





Back to the top