/************************************************************************************** * 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.optimizations; import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint; import org.codehaus.aspectwerkz.joinpoint.JoinPoint; import org.codehaus.aspectwerkz.joinpoint.Rtti; import org.codehaus.aspectwerkz.joinpoint.MethodRtti; import org.codehaus.aspectwerkz.definition.Pointcut; /** * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a> */ public class OptimizeAspect { //------------- advice with no args /** @Before execution(* test.optimizations.OptimizeTest$OptimizeNothing.before()) * || execution(* test.optimizations.OptimizeTest$OptimizeNothing.beforeAround())*/ public void beforeNothing() { OptimizeTest.log("before"); } /** @Around execution(* test.optimizations.OptimizeTest$OptimizeNothing.around()) * || execution(* test.optimizations.OptimizeTest$OptimizeNothing.beforeAround()) */ public Object aroundNothing() { OptimizeTest.log("around"); return null;// a crapy around aspect! } /** @Before execution(* test.optimizations.OptimizeTest$OptimizeNothing.before(int)) && args(i) */ public void beforeNothing(int i) { OptimizeTest.log("before"+i); } /** @Around execution(* test.optimizations.OptimizeTest$OptimizeNothing.around(int)) && args(i) */ public Object aroundNothing(int i) { OptimizeTest.log("around"+i); return null; } //------------- advice with StaticJoinPoint /** @Before execution(* test.optimizations.OptimizeTest$OptimizeStaticJoinPoint.before()) * || execution(* test.optimizations.OptimizeTest$OptimizeStaticJoinPoint.beforeAround())*/ public void beforeStaticJoinPoint(StaticJoinPoint sjp) { OptimizeTest.log("beforeSJP-" + sjp.getSignature().getName()); } /** @Around execution(* test.optimizations.OptimizeTest$OptimizeStaticJoinPoint.around()) * || execution(* test.optimizations.OptimizeTest$OptimizeStaticJoinPoint.beforeAround()) */ public Object aroundStaticJoinPoint(StaticJoinPoint sjp) throws Throwable { OptimizeTest.log("aroundSJP-" + sjp.getSignature().getName()); return sjp.proceed(); } /** @Before execution(* test.optimizations.OptimizeTest$OptimizeStaticJoinPoint.before(int)) && args(i) */ public void beforeStaticJoinPoint(StaticJoinPoint sjp, int i) { OptimizeTest.log("beforeSJP"+i); } /** @Around execution(* test.optimizations.OptimizeTest$OptimizeStaticJoinPoint.around(int)) && args(i) */ public Object aroundStaticJoinPoint(int i, StaticJoinPoint sjp) throws Throwable { OptimizeTest.log("aroundSJP"+i); return sjp.proceed(); } //------------- advice with JoinPoint, will make use of a runtime check for target /** @Expression withincode(* test.optimizations.OptimizeTest.testJoinPoint(..)) && target(test.optimizations.OptimizeTest$OptimizeJoinPoint) */ Pointcut pc_in; /** @Before "(call(* test.optimizations.OptimizeTest$IOptimize.before()) * || call(* test.optimizations.OptimizeTest$IOptimize.beforeAround()) * ) && pc_in" */ public void beforeJoinPoint(JoinPoint jp) { OptimizeTest.log("beforeJP-" + jp.getSignature().getName() + "-" + jp.getCallee().toString() + "-" + jp.getCaller().toString()); } /** @Around "(call(* test.optimizations.OptimizeTest$IOptimize.around()) * || call(* test.optimizations.OptimizeTest$IOptimize.beforeAround()) * ) && pc_in" */ public Object aroundJoinPoint(JoinPoint jp) throws Throwable { OptimizeTest.log("aroundJP-" + jp.getSignature().getName() + "-" + jp.getCallee().toString() + "-" + jp.getCaller().toString()); return jp.proceed(); } /** @Before call(* test.optimizations.OptimizeTest$IOptimize.before(int)) && args(i) && pc_in */ public void beforeJoinPoint(JoinPoint jp, int i) { OptimizeTest.log("beforeJP"+i); } /** @Around call(* test.optimizations.OptimizeTest$IOptimize.around(int)) && args(i) && pc_in */ public Object aroundJoinPoint(int i, JoinPoint jp) throws Throwable { OptimizeTest.log("aroundJP"+i); return jp.proceed(); } //------------- advice with Rtti /** * @Before execution(* test.optimizations.OptimizeTest$OptimizeRtti.before()) * || execution(* test.optimizations.OptimizeTest$OptimizeRtti.beforeAround()) */ public void beforeRtti(JoinPoint jp) { OptimizeTest.log("beforeRTTI-" + jp.getRtti().getName() + jp.getRtti().getThis() + jp.getRtti().getTarget()); } /** * @Around execution(* test.optimizations.OptimizeTest$OptimizeRtti.around()) * || execution(* test.optimizations.OptimizeTest$OptimizeRtti.beforeAround()) */ public Object aroundRtti(JoinPoint jp) throws Throwable { OptimizeTest.log("aroundRTTI-" + jp.getRtti().getName() + jp.getRtti().getThis() + jp.getRtti().getTarget()); return jp.proceed(); } /** * @Before execution(* test.optimizations.OptimizeTest$OptimizeRtti.before(int)) */ public void beforeRttiInt(JoinPoint jp) { OptimizeTest.log("beforeRTTI-" + jp.getRtti().getName() + jp.getRtti().getThis() + jp.getRtti().getTarget()); Integer param = (Integer) ((MethodRtti) jp.getRtti()).getParameterValues()[0]; //TODO ... } /** * @Around execution(* test.optimizations.OptimizeTest$OptimizeRtti.around(int)) */ public Object aroundRtti(StaticJoinPoint sjp, JoinPoint jp /* note: silly but possible...*/) throws Throwable { OptimizeTest.log("aroundRTTI-" /*TODO*/); return sjp.proceed(); } }