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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
>>
>> 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@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

Reply via email to