Language AspectJ
(Requires AspectJ Version 5)
| Date: | 11/30/05 |
| Author: | Tilo Dickopp |
| URL: | http://www.tiloswelt.de/ |
| Comments: | 0 |
| Info: | http://eclipse.org/aspectj/ |
| Score: |
aspect BeerAspect {
static String[][] REPLACE = {
{ "1 bottles", "1 bottle" },
{ "^0", "No more" },
{ "0", "no more" },
{ ".*-1", "Go to the store and buy some more, 99" },
};
void around (String text, int count) :
call(* *.println(..)) &&
args(text) &&
cflowbelow(call (* Beer.lyrics(..)) && args(count)) &&
!within(BeerAspect) &&
if(count <= 2) {
for (String[] replace : REPLACE) {
text = text.replaceAll(replace[0], replace[1]);
}
proceed(text, count);
}
after(int count) :
call (* Beer.lyrics(..)) &&
args(count) &&
if (count > 0) {
((Beer)thisJoinPoint.getTarget()).lyrics(count - 1);
}
}
class Beer {
static final String BEER = " bottles of beer";
static final String BEER_WALL = BEER + " on the wall";
static final String TAKE = "Take one down and pass it around, ";
void lyrics(int count) {
System.out.println(count + BEER_WALL + ", " + count + BEER + ".");
System.out.println(TAKE + (count - 1) + BEER_WALL + ".");
System.out.println();
}
public static void main(String[] args) {
new Beer().lyrics(99);
}
}
Download Source | Write Comment
Download Source | Write Comment
Add Comment
Please provide a value for the fields Name,
Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.
Please don't post large portions of code here! Use the form to submit new examples or updates instead!
Comments