I like this proposal.
Here is an alternative syntax suggestion that
- addresses Dave's use case
- addresses a use case that is easy to implement in @AspectJ but not
in code style
- avoids new keywords
public aspect ITDAspect{
/* don't have define the class here, don't need to make it private;
but defining it that way matches Dave's example
*/
private static class ITDDefaultImpl {
private String string;
public String getString(){
return string;
}
public void setString(String string){
this.string = string;
}
}
/* declare that ITDInterface should be introduced with
all fields and methods in ITDDefaultImpl
Not sure about the choice of using "extends"
(trying to avoid new keyword)
Alternatives: declare implements? declare default?
*/
declare extends: ITDInterface, ITDDefaultImpl;
}
This makes a common use case implemented by the following @AspectJ
snippet available in the code style syntax. Essentially, I get to
reuse the implementation available from an existing class.
@DeclareParents(value="com.myco.domain.*",
defaultImpl= ITDDefaultImpl.class)
ITDInterface something;
How does this sound?
-Ramnivas
On Wed, Dec 3, 2008 at 9:40 PM, Andy Clement
<andrew.clement@xxxxxxxxx> wrote:
I could be wrong but I think I recall someone talking about something
like this a while ago - possibly Ramnivas. Although having just
trawled through our enhancement requests, I only found this:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=240011 which is about
saving typing but isn't quite the same thing. What you propose is
interesting, what do others think?
cheers,
Andy.
2008/12/3 Dave Whittaker <dave@xxxxxxxxxx>
I've been wondering recently.... is there a reason that ITDs are
defined the way they are? I don't know how others tend to use
them, but for me I'm pretty likely to have an aspect that contains
ITD fields and methods that apply to a single interface within a
given aspect. This makes me wonder why we have a syntax like:
public aspect ITDAspect{
private String ITDInterface.string;
public String ITDInterface.getString(){
return string;
}
public void ITDInterface.setString(String string){
this.string = string;
}
}
Instead of:
public aspect ITDAspect{
intertype(ITDInterface){
private String string;
public String getString(){
return string;
}
public void setString(String string){
this.string = string;
}
}
}
Or something similar. Something that involved less typing,
consolidated code that is defined for another type and looked more
like plain java code (not to mention more like other AJ
definitions in this case....). At the very least it would allow
for something that I've wanted many times: cut and paste between
classes and ITDs without having to post process with some sort of
wacky regex. Am I missing a reason why it's desirable or even
necessary to type out the full interface name on each line?
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users