/**************************************************************************************
* Copyright (c) Jonas Bon?r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package test.rtti;
import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
import org.codehaus.aspectwerkz.joinpoint.MethodRtti;
import org.codehaus.aspectwerkz.joinpoint.Rtti;
/**
* @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a>
*/
public class RttiTarget {
public static StringBuffer LOG = new StringBuffer();
private static int COUNT = 0;
private static boolean NESTED = false;
private final int m_id = ++COUNT;
public void doSomething(int i) {
LOG.append(toString()).append(".").append(i).append(" ");
if (!NESTED) {
NESTED = true;
RttiTarget nested = new RttiTarget();
nested.doSomething(i + 1);
}
}
public String toString() {
return "Target-" + m_id;
}
/**
* This aspect within the target class allows testing of non side effect at system init time
*/
public static class TestAspect {
/**
* This field of type the target class allows testing of non side effect at system init time
*/
public static RttiTarget ASPECT_Rtti_TARGET_EXECUTING_INSTANCE;
/**
* This method using the type of the target class allows testing of non side effect at system init time
*
* NOT SUPPORTED IN 1.0
*/
//public Target fake(Target target) {return null;}
/**
* @param jp
* @return
* @throws Throwable
* @Around execution(* test.rtti.RttiTarget.doSomething(int))
*/
public Object around(JoinPoint jp) throws Throwable {
Object target = jp.getTarget();
int arg0 = ((Integer) (((MethodRtti) jp.getRtti()).getParameterValues()[0])).intValue();
LOG.append("+").append(target.toString()).append(".").append(arg0).append(" ");
Object ret = jp.proceed();
Object targetAfter = jp.getTarget();
int arg0After = ((Integer) (((MethodRtti) jp.getRtti()).getParameterValues()[0])).intValue();
LOG.append("-").append(targetAfter.toString()).append(".").append(arg0After).append(" ");
return ret;
}
}
}