Re: [aspectj-users] Intertype declaration name mangling - for or against?

2009-11-23 Thread Dave Whittaker
I'm wondering, is it interesting that I proposed it because it seems  
like it would cause me problems with all the ITDs I use, or because it  
just seems problematic in general?  I think in my personal use cases I  
have ITDs with very specific behavior which is unlikely to cause many  
name clashes, and since they are private fields  if name clashes were  
to occur re-factoring the the code would be rather simple.  I did  
think of one potential problem though.  Lets say I have an ITD that  
handles object selection.


public interface SelectAction{

  public void select(Object selected);

}

public aspect SelectActionAspect{

  public Object SelectAction.selected;

  public void SelectActoin.select(Object selected){
this.selected = selected;
  }

}

Pretty straight forward stuff, an interface and a default  
implementation.  Now, I'm not worried that I might have a second ITD  
that would also inject a field named selected, but what if that  
default behavior didn't work for me and I wanted to do something to  
the object when it is selected.  What happens if I do:


public class SelectImpl implements SelectAction{

  private Object selected;

  public void select(Object selected){
System.out.println(I'm selected  + selected);
 this.selected = selected;
   }

}

What happens there?  Do I get an error that I can't add a field with  
that name, which would be bad because I might need to have a field  
named selected available for introspection?  Does the implementation  
field take precedence?  What then happens if I have a second method in  
my ITD that accesses the injected field?  Does that method now refer  
to the new overridden field?  I think maybe it makes the most sense  
that if a conflict like that arose the ITD wouldn't be applied at all,  
but that would have to be very obvious to the user in order to avoid a  
lot of confusion.  Maybe an annotation could be added that allowed one  
to selectively turn off ITDs for a particular type and the compiler  
would raise an error on a field name conflict unless that annotation  
was used:


public class SelectImpl implements @ApplyITD(false) SelectedAction{
  ...
}

Just some thoughts

On Nov 20, 2009, at 2:12 PM, Andy Clement wrote:


Thanks Dave and Ramnivas.  yes I have progressed on the new intertype
syntax, but a mountain of testing to do there.  It is interesting
about you (Dave) proposing the default be switched to non-mangling -
I'm nervous about that (from a backwards compatibility point of view I
think), but not entirely against it.  Intertype fields are far far far
far more straightforward than intertype methods, so that's where I'd
play around first and that would seem to help a lot with these
frameworks.

Andy

2009/11/20 Ramnivas Laddad ramni...@aspectivity.com:

I am all for this. Mangled names create problems with JPA and such.
I guess one issue to consider is what happens when two aspects want  
to
introduce a same-named field with a directive to not mangle,  
especially if
both aspects are from third-party libraries. This is quite unlikely  
to occur
in practice, but we may need to address it somehow. I wonder if the  
'declare

precedence' can be an arbitrator here.
-Ramnivas
On Thu, Nov 19, 2009 at 10:54 AM, Andy Clement andrew.clem...@gmail.com 


wrote:


I'm possibly going to review our approach to intertype declaration
naming.  The names are currently mangled deliberately to preserve  
some
of the 'rules' that AspectJ defines.  For example, private field  
itds

have mangled names because the field is private to the aspect and
shouldn't be visible as a 'regular' private field in the target.   
This
also enables two aspects to ITD the same private field and there  
is no

clash in the target type.

However, since those rules were defined a long time ago, things have
changed and various frameworks are looking at members via  
reflection,
for purposes of invocation or automatic persistence.  The mangling  
is

unhelpful here.

I *thinking* about allowing non-mangled names, possibly with a
directive annotation in the aspect that says do not mangle these, I
know what I'm doing and there won't be a problem.

Basically I wanted to collect any thoughts from you guys?

I suspect that the some of the scenarios AspectJ worries about  
rarely
happen in practice - have you ever ITD'd the same named private  
field

from two aspects onto the same type?  (AspectJ can continue to
warn/error when it sees this about to happen of course)

cheers,
Andy
___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users



___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users



___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users



Re: [aspectj-users] Intertype declaration name mangling - for or against?

2009-11-20 Thread Ramnivas Laddad
I am all for this. Mangled names create problems with JPA and such.

I guess one issue to consider is what happens when two aspects want to
introduce a same-named field with a directive to not mangle, especially if
both aspects are from third-party libraries. This is quite unlikely to occur
in practice, but we may need to address it somehow. I wonder if the 'declare
precedence' can be an arbitrator here.

-Ramnivas

On Thu, Nov 19, 2009 at 10:54 AM, Andy Clement andrew.clem...@gmail.comwrote:

 I'm possibly going to review our approach to intertype declaration
 naming.  The names are currently mangled deliberately to preserve some
 of the 'rules' that AspectJ defines.  For example, private field itds
 have mangled names because the field is private to the aspect and
 shouldn't be visible as a 'regular' private field in the target.  This
 also enables two aspects to ITD the same private field and there is no
 clash in the target type.

 However, since those rules were defined a long time ago, things have
 changed and various frameworks are looking at members via reflection,
 for purposes of invocation or automatic persistence.  The mangling is
 unhelpful here.

 I *thinking* about allowing non-mangled names, possibly with a
 directive annotation in the aspect that says do not mangle these, I
 know what I'm doing and there won't be a problem.

 Basically I wanted to collect any thoughts from you guys?

 I suspect that the some of the scenarios AspectJ worries about rarely
 happen in practice - have you ever ITD'd the same named private field
 from two aspects onto the same type?  (AspectJ can continue to
 warn/error when it sees this about to happen of course)

 cheers,
 Andy
 ___
 aspectj-users mailing list
 aspectj-users@eclipse.org
 https://dev.eclipse.org/mailman/listinfo/aspectj-users

___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Re: [aspectj-users] Intertype declaration name mangling - for or against?

2009-11-20 Thread Andy Clement
Thanks Dave and Ramnivas.  yes I have progressed on the new intertype
syntax, but a mountain of testing to do there.  It is interesting
about you (Dave) proposing the default be switched to non-mangling -
I'm nervous about that (from a backwards compatibility point of view I
think), but not entirely against it.  Intertype fields are far far far
far more straightforward than intertype methods, so that's where I'd
play around first and that would seem to help a lot with these
frameworks.

Andy

2009/11/20 Ramnivas Laddad ramni...@aspectivity.com:
 I am all for this. Mangled names create problems with JPA and such.
 I guess one issue to consider is what happens when two aspects want to
 introduce a same-named field with a directive to not mangle, especially if
 both aspects are from third-party libraries. This is quite unlikely to occur
 in practice, but we may need to address it somehow. I wonder if the 'declare
 precedence' can be an arbitrator here.
 -Ramnivas
 On Thu, Nov 19, 2009 at 10:54 AM, Andy Clement andrew.clem...@gmail.com
 wrote:

 I'm possibly going to review our approach to intertype declaration
 naming.  The names are currently mangled deliberately to preserve some
 of the 'rules' that AspectJ defines.  For example, private field itds
 have mangled names because the field is private to the aspect and
 shouldn't be visible as a 'regular' private field in the target.  This
 also enables two aspects to ITD the same private field and there is no
 clash in the target type.

 However, since those rules were defined a long time ago, things have
 changed and various frameworks are looking at members via reflection,
 for purposes of invocation or automatic persistence.  The mangling is
 unhelpful here.

 I *thinking* about allowing non-mangled names, possibly with a
 directive annotation in the aspect that says do not mangle these, I
 know what I'm doing and there won't be a problem.

 Basically I wanted to collect any thoughts from you guys?

 I suspect that the some of the scenarios AspectJ worries about rarely
 happen in practice - have you ever ITD'd the same named private field
 from two aspects onto the same type?  (AspectJ can continue to
 warn/error when it sees this about to happen of course)

 cheers,
 Andy
 ___
 aspectj-users mailing list
 aspectj-users@eclipse.org
 https://dev.eclipse.org/mailman/listinfo/aspectj-users


 ___
 aspectj-users mailing list
 aspectj-users@eclipse.org
 https://dev.eclipse.org/mailman/listinfo/aspectj-users


___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Re: [aspectj-users] Intertype declaration name mangling - for or against?

2009-11-19 Thread Dave Whittaker

Andy,

I'm all for this.  It's something that I've thought about requesting  
in the past but since I have some other ITD features that I'm slightly  
more interested in like the new ITD syntax (I noticed the update to  
the bug today, good stuff) and the ability to invoke super.method()  
when overriding a method introduced via ITD, I figured it could  
wait .  Anyway, I think this absolutely would help ITDs work in a more  
seamless manner with various frameworks that do a lot of reflection  
(JPA, Seam, Spring, etc).  It would be fine whether this was done by  
annotation (possibly something like: @Asis intertype  
ITDInterface{ } ?) or it became the default (maybe turned of via an  
annotation?).


On Nov 19, 2009, at 1:54 PM, Andy Clement wrote:


I'm possibly going to review our approach to intertype declaration
naming.  The names are currently mangled deliberately to preserve some
of the 'rules' that AspectJ defines.  For example, private field itds
have mangled names because the field is private to the aspect and
shouldn't be visible as a 'regular' private field in the target.  This
also enables two aspects to ITD the same private field and there is no
clash in the target type.

However, since those rules were defined a long time ago, things have
changed and various frameworks are looking at members via reflection,
for purposes of invocation or automatic persistence.  The mangling is
unhelpful here.

I *thinking* about allowing non-mangled names, possibly with a
directive annotation in the aspect that says do not mangle these, I
know what I'm doing and there won't be a problem.

Basically I wanted to collect any thoughts from you guys?

I suspect that the some of the scenarios AspectJ worries about rarely
happen in practice - have you ever ITD'd the same named private field
from two aspects onto the same type?  (AspectJ can continue to
warn/error when it sees this about to happen of course)

cheers,
Andy
___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users


___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Re: [aspectj-users] Intertype declaration name mangling - for or against?

2009-11-19 Thread Jeff Sinclair
Hi Andy,

You mentioned that the annotation directive might be placed on the aspect 
itself. Would it not be better to control the name mangling through config 
passed to the weaver? The reason I mention this is because often the developer 
of the aspect is not the end user and only the end user can know if this is a 
safe operation. 

Jeff

- Reply message -
From: Andy Clement andrew.clem...@gmail.com
Date: Thu, Nov 19, 2009 18:54
Subject: [aspectj-users] Intertype declaration name mangling - for or   against?
To: aspectj-users@eclipse.org

I'm possibly going to review our approach to intertype declaration
naming.  The names are currently mangled deliberately to preserve some
of the 'rules' that AspectJ defines.  For example, private field itds
have mangled names because the field is private to the aspect and
shouldn't be visible as a 'regular' private field in the target.  This
also enables two aspects to ITD the same private field and there is no
clash in the target type.

However, since those rules were defined a long time ago, things have
changed and various frameworks are looking at members via reflection,
for purposes of invocation or automatic persistence.  The mangling is
unhelpful here.

I *thinking* about allowing non-mangled names, possibly with a
directive annotation in the aspect that says do not mangle these, I
know what I'm doing and there won't be a problem.

Basically I wanted to collect any thoughts from you guys?

I suspect that the some of the scenarios AspectJ worries about rarely
happen in practice - have you ever ITD'd the same named private field
from two aspects onto the same type?  (AspectJ can continue to
warn/error when it sees this about to happen of course)

cheers,
Andy
___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users
___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users