| /* |
| Copyright (c) Xerox Corporation 1998-2002. All rights reserved. |
| |
| Use and copying of this software and preparation of derivative works based |
| upon this software are permitted. Any distribution of this software or |
| derivative works must comply with all applicable United States export control |
| laws. |
| |
| This software is made available AS IS, and Xerox Corporation makes no warranty |
| about the software, its performance or its conformity to any specification. |
| */ |
| |
| package tjp; |
| |
| import org.aspectj.lang.JoinPoint; |
| import org.aspectj.lang.reflect.CodeSignature; |
| |
| aspect GetInfo { |
| |
| static final void println(String s){ System.out.println(s); } |
| |
| pointcut goCut(): cflow(this(Demo) && execution(void go())); |
| |
| pointcut demoExecs(): within(Demo) && execution(* *(..)); |
| |
| Object around(): demoExecs() && !execution(* go()) && goCut() { |
| println("Intercepted message: " + |
| thisJoinPointStaticPart.getSignature().getName()); |
| println("in class: " + |
| thisJoinPointStaticPart.getSignature().getDeclaringType().getName()); |
| printParameters(thisJoinPoint); |
| println("Running original method: \n" ); |
| Object result = proceed(); |
| println(" result: " + result ); |
| return result; |
| } |
| |
| static private void printParameters(JoinPoint jp) { |
| println("Arguments: " ); |
| Object[] args = jp.getArgs(); |
| String[] names = ((CodeSignature)jp.getSignature()).getParameterNames(); |
| Class[] types = ((CodeSignature)jp.getSignature()).getParameterTypes(); |
| for (int i = 0; i < args.length; i++) { |
| println(" " + i + ". " + names[i] + |
| " : " + types[i].getName() + |
| " = " + args[i]); |
| } |
| } |
| } |