Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Another ITD question

I've been using ITDs as a big time saver in defining common actions that can be performed on objects. This is great in that the default code defined in the aspect applies a majority of the time. The problem is that in the cases where it doesn't apply, almost every time what I want to do is extend the code defined in the ITD and do something before and/or after the default rather than completely replace it, like a typical object hierarchy would do with a call to super.method(), and I can't find a good way to do that with ITDs. The best way I've come up with to handle this is to create an abstract superclass from which the interfaces are implemented so the abstract class inherits the default functionality and then in the concrete subclass I can call super.method().

I had posted a similar message a few months ago and someone suggested placing a second method in each ITD interface that would just be used to inherit the default functionality, ie:

public void method();

public void _method();

and then in the ITD _method would define the code and method() would just delegate to _method(), but that just seems like an awful lot of ugly code to perform a simple pattern, which is very anti AspectJ.

So I guess my question is.... is there a better way to do this? If not, shouldn't their be? I'd be satisfied with a way to call the method on the aspect, but since it's written out as something like public static void ajc$interMethod$... even if I knew the naming pattern and it wasn't subject to change those calls wouldn't lead to very readable code. I realize I could also use before/after/around advise on the method but that adds a whole new issue of what order the advice will fire in if the object structure becomes complex. So has this been an issue for anyone else? If there isn't a good solution, is there interest from any one else in a new feature to make this type of thing easier?



Back to the top