JoinpointClassification classification = JoinpointClassification.NOT_INSTRUMENTED;
Collection pointcuts = advisor.getManager().getPointcutInfos().values();
boolean dynamicAop = true;
for (Iterator it = pointcuts.iterator(); it.hasNext(); )
{
PointcutInfo pointcutInfo = (PointcutInfo) it.next();
// won't check matching of preparation pointcuts unnecessarily
if (classification == JoinpointClassification.PREPARED && pointcutInfo.getBinding() == null)
{
continue;
}
Pointcut pointcut = pointcutInfo.getPointcut();
if (joinpointMatcher.matches(pointcut, advisor, member)) {
// only prepare if pointcut isn't associated with a binding
if (pointcutInfo.getBinding() == null)
{
classification = JoinpointClassification.PREPARED;
}
else if (pointcutInfo.isDynamicAop())
{
classification = JoinpointClassification.DYNAMICALY_WRAPPED;
synchronized (pointcutInfo)
{
pointcutInfo.setDynamicAop(false);
}
}
else
{
classification = JoinpointClassification.WRAPPED;