for (Iterator iterator = systemDefinitions.iterator(); iterator.hasNext();) {
SystemDefinition systemDefinition = (SystemDefinition) iterator.next();
Collection aspects = systemDefinition.getAspectDefinitions();
for (Iterator iterator1 = aspects.iterator(); iterator1.hasNext();) {
AspectDefinition aspectDefinition = (AspectDefinition) iterator1.next();
if (aspectDefinition.getName().equals(Virtual.class.getName())) {
continue;
}
//TODO - do we care about non bounded pointcut ?
for (Iterator iterator2 = aspectDefinition.getAdviceDefinitions().iterator(); iterator2.hasNext();) {
AdviceDefinition adviceDefinition = (AdviceDefinition) iterator2.next();
final ExpressionInfo expressionInfo = adviceDefinition.getExpressionInfo();
if (expressionInfo == null) {
continue;
}
if (expressionInfo.getExpression().match(expressionContext)) {
// compute the target method to advice method arguments map, and grab information about this
// and target bindings
expressionContext.resetRuntimeState();
ArgsIndexVisitor.updateContextForRuntimeInformation(
expressionInfo,
expressionContext,
loader
);
// Note that the expressionContext dynamic information updated here should only be used
// in the scope of this code block, since at the next iteration, the data will be
// updated for another advice binding
// [hence see setMethodArgumentIndexes below]
// create a lightweight representation of the bounded advices to pass to the compiler
final MethodInfo adviceMethodInfo = adviceDefinition.getMethodInfo();
final AdviceInfo adviceInfo = new AdviceInfo(
aspectDefinition.getQualifiedName(),
aspectDefinition.getClassName(),
DeploymentModel.getDeploymentModelAsInt(aspectDefinition.getDeploymentModel()),
adviceMethodInfo.getName(),
AsmHelper.getMethodDescriptor(adviceMethodInfo),
AsmHelper.getArgumentTypes(adviceMethodInfo),
adviceDefinition.getType(),
adviceDefinition.getSpecialArgumentType(),