[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] ITD syntax
|
Simone,
I think I see what you are saying, but can you just clarify the
difference between an ITD and a mixin for me? I had always thought of
them as being interchangeable, but I'm admittedly more familiar with
the use of aspects than the theory.
I think that you are correct that keeping fields "private to the
aspect" should not be violated, but couldn't this be implemented using
the standard delegation pattern that most people seem to recommend for
implementing multiple inheritance in Java? The declare statement
could cause any advised class to hold a reference to the class that
contains the default implementation and then automatically create the
delegate methods for you as per the interface. Since only the methods
in the interface would be added even if the class containing the
default implementation were to implement other methods or extend other
classes, the user would not be aware (which i think solves your other
problem). I guess this would be more of a complement to ITDs than an
alternative implementation since it would not allow the creation of
methods that aren't contained in the interface but personally, I would
see that as a positive thing for most of my own use cases.
What this basically boils down to for me is that the Java powers that
be have dictated, no multiple inheritance unless it's done with
interfaces and delegation, which works but a) it's an enormous pain to
create the delegate methods and then keep them in sync for every
targeted class and b) references to "this" inside a class that's being
delegated to don't do what they'd do in a situation where true
inheritance was involved. If AJ could solve both of those issues and
make it as easy as a declare statement, I'd imagine I'm not the only
person that would be useful to.... What do you all think?
On Dec 4, 2008, at 12:22 PM, Simone Gianni wrote:
Hi Ramnivas and Dave,
yes, I also liked the proposal, in fact I also find the ITD syntax a
bit
too verbose.
Ramnivas, your proposal moves from ITD to something near mixins,
which I
really like :). Anyway, that class could be every class, and that
bring
a number of problems, cause it could extend another class, and since
Java does not support multiple inheritance we should not give the user
the feeling that it is happening. Also, the fact that a ITD field is
private "to the aspect"is a very good feature, I already have more
than
one aspect declaring a "inited" boolean field, each aspect uses it to
mark a certain instance inited regarding its own concern. I see not
much
a technical problem in obtaining the same behavior with your proposal,
but again a problem from a user POV.
The direction seems correct to me, but some boundaries must be defined
to give the user the proper feeling of what they are doing.
Simone
Ramnivas Laddad wrote:
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
--
Simone Gianni CEO Semeru s.r.l. Apache Committer
http://www.simonegianni.it/
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users