/************************************************************************************** * 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 org.codehaus.aspectwerkz.transform.inlining; import org.codehaus.aspectwerkz.aspect.AdviceInfo; import org.codehaus.aspectwerkz.transform.inlining.spi.AspectModel; /** * Container for the advice method info. * * @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a> * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> */ public class AdviceMethodInfo { private final AspectInfo m_aspectInfo; private final AdviceInfo m_adviceInfo; private int m_specialArgumentIndex = -1;//FIXME remove - should not be here private int m_joinPointIndex;//FIXME remove - should not be here private String m_calleeClassSignature; private String m_callerClassSignature; private String m_joinPointClassName; private String m_calleeMemberDesc; public AdviceMethodInfo(final AspectInfo aspectInfo, final AdviceInfo adviceInfo, final String callerClassSignature, final String calleeClassSignature, final String joinPointClassName, final String calleeMemberDesc) { m_aspectInfo = aspectInfo; m_adviceInfo = adviceInfo; m_callerClassSignature = callerClassSignature; m_calleeClassSignature = calleeClassSignature; m_joinPointClassName = joinPointClassName; m_calleeMemberDesc = calleeMemberDesc; } public AdviceInfo getAdviceInfo() { return m_adviceInfo; } public AspectInfo getAspectInfo() { return m_aspectInfo; } public int[] getAdviceMethodArgIndexes() { return m_adviceInfo.getMethodToArgIndexes(); } public String getSpecialArgumentTypeDesc() { return m_adviceInfo.getSpecialArgumentTypeDesc(); } public String getSpecialArgumentTypeName() { return m_adviceInfo.getSpecialArgumentTypeName(); } public int getSpecialArgumentIndex() { return m_specialArgumentIndex; } public void setSpecialArgumentIndex(final int index) { m_specialArgumentIndex = index; } public String getCalleeClassSignature() { return m_calleeClassSignature; } public String getCallerClassSignature() { return m_callerClassSignature; } public String getJoinPointClassName() { return m_joinPointClassName; } public String getCalleeMemberDesc() { return m_calleeMemberDesc; } /** * @return true if the advice uses this or target (bounded or runtime check) */ public boolean requiresThisOrTarget() { if (m_adviceInfo.hasTargetWithRuntimeCheck()) { return true; } else { // look for TARGET or THIS bindings for (int i = 0; i < m_adviceInfo.getMethodToArgIndexes().length; i++) { int index = m_adviceInfo.getMethodToArgIndexes()[i]; if (index == AdviceInfo.TARGET_ARG || index == AdviceInfo.THIS_ARG) { return true; } } } return false; } /** * @return true if the advice uses non static JoinPoint explicitly */ public boolean requiresJoinPoint() { // look for JoinPoint for (int i = 0; i < m_adviceInfo.getMethodToArgIndexes().length; i++) { int index = m_adviceInfo.getMethodToArgIndexes()[i]; if (index == AdviceInfo.JOINPOINT_ARG) { return true; } } return false; } }