Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] ITD syntax

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
>


Back to the top