pointcut.getExpressionInfo().getArgsIndexMapper().match(ctx);
//TODO can we do cache, can we do in another visitor
//TODO skip map when no args()
for (int j = 0; j < beforeAdviceIndexes.length; j++) {
AdviceInfo indexTuple = beforeAdviceIndexes[j];
String adviceName = pointcut.getBeforeAdviceName(j);
//grab the parameters names
String[] adviceArgNames = JoinPointMetaData.getParameterNames(adviceName);
// map them from the ctx info
int[] adviceToTargetArgs = new int[adviceArgNames.length];
for (int k = 0; k < adviceArgNames.length; k++) {
String adviceArgName = adviceArgNames[k];
int exprArgIndex = pointcut.getExpressionInfo().getArgumentIndex(adviceArgName);
if (exprArgIndex >= 0 && ctx.m_exprIndexToTargetIndex.containsKey(exprArgIndex)) {
adviceToTargetArgs[k] = ctx.m_exprIndexToTargetIndex.get(exprArgIndex);
} else {
adviceToTargetArgs[k] = -1;
}
}
// //debug:
// for (int k = 0; k < adviceToTargetArgs.length; k++) {
// int adviceToTargetArg = adviceToTargetArgs[k];
// System.out.println(" " + k + " -> " + adviceToTargetArg);
// }
indexTuple.setMethodToArgIndexes(adviceToTargetArgs);
}
for (int j = 0; j < afterAdviceIndexes.length; j++) {
AdviceInfo indexTuple = afterAdviceIndexes[j];
String adviceName = pointcut.getAfterFinallyAdviceName(j);
//grab the parameters names
String[] adviceArgNames = JoinPointMetaData.getParameterNames(adviceName);
// map them from the ctx info
int[] adviceToTargetArgs = new int[adviceArgNames.length];
for (int k = 0; k < adviceArgNames.length; k++) {
String adviceArgName = adviceArgNames[k];
int exprArgIndex = pointcut.getExpressionInfo().getArgumentIndex(adviceArgName);
if (exprArgIndex >= 0 && ctx.m_exprIndexToTargetIndex.containsKey(exprArgIndex)) {
adviceToTargetArgs[k] = ctx.m_exprIndexToTargetIndex.get(exprArgIndex);
} else {
adviceToTargetArgs[k] = -1;
}
}
// //debug:
// for (int k = 0; k < adviceToTargetArgs.length; k++) {
// int adviceToTargetArg = adviceToTargetArgs[k];
// System.out.println(" " + k + " -> " + adviceToTargetArg);
// }
indexTuple.setMethodToArgIndexes(adviceToTargetArgs);
}
for (int j = 0; j < aroundAdviceIndexes.length; j++) {
AdviceInfo indexTuple = aroundAdviceIndexes[j];
String adviceName = pointcut.getAroundAdviceName(j);
//grab the parameters names
String[] adviceArgNames = JoinPointMetaData.getParameterNames(adviceName);
// map them from the ctx info
int[] adviceToTargetArgs = new int[adviceArgNames.length];
for (int k = 0; k < adviceArgNames.length; k++) {
String adviceArgName = adviceArgNames[k];
int exprArgIndex = pointcut.getExpressionInfo().getArgumentIndex(adviceArgName);
if (exprArgIndex >= 0 && ctx.m_exprIndexToTargetIndex.containsKey(exprArgIndex)) {
adviceToTargetArgs[k] = ctx.m_exprIndexToTargetIndex.get(exprArgIndex);
} else {
adviceToTargetArgs[k] = -1;
}
}
// //debug:
// for (int k = 0; k < adviceToTargetArgs.length; k++) {
// int adviceToTargetArg = adviceToTargetArgs[k];
// System.out.println(" " + k + " -> " + adviceToTargetArg);
// }
indexTuple.setMethodToArgIndexes(adviceToTargetArgs);
}
adviceIndexInfoList.add(adviceIndexInfo);
// collect the cflow expressions for the matching pointcuts (if they have one)