Jun 19th, 2012, 07:35 AM
Overriding AspectJ-generated code
how do you override code generated by AspectJ classes?
Let's say that I wish to override the following function present in a .aj file:
Photo.findPhotosBySlugLikeAndBudgetLikeAndProjectL ikeAndProjectStatusLike(String project, etc...
to replace null "project" parameter values by empty strings.
Where do I find the corresponding .java file, if there is any?
The following comment at the top of the .aj file is a not laconic: where's the "target java. compilation unit"?
// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO.
// You may push code into the target .java compilation unit if you wish to edit any member(s).
Jun 21st, 2012, 09:26 AM
If you use STS this is easy. The target class is usually part of the AJ filename, for example <TargetClass>_Roo_JavaBean.aj.
To override the method you have to push it in from the aspect to the target class. Load the target class into the STS editor, and notice light brown markers on the right hand border. Click on it and it should show all the aspect members in the Cross References view. Now select the method you want to override and STS will load the aspect into the editor. Highlight the member, right-click and then select AspectJ Refactoring and then Push In. Once you select OK it should Push the member In to the targer class.
BTW, the target and aspects are usually in the same folder/directory.
Hope this helps.
Last edited by henryve; Jun 21st, 2012 at 09:29 AM.
Reason: Additional Info