@Override
 public void after(Object target, Object[] args, Object result, Throwable throwable) {
   final int pop = scope.pop();
   if (pop != Scope.ZERO) {
     return;
   }
   this.delegate.after(target, args, result, throwable);
 }
 @Override
 public void before(Object target, Object[] args) {
   final int push = scope.push();
   if (push != Scope.ZERO) {
     return;
   }
   this.delegate.before(target, args);
 }
 @Override
 public int pop() {
   final Scope localScope = getLocalScope();
   return localScope.pop();
 }
 @Override
 public int depth() {
   final Scope localScope = getLocalScope();
   return localScope.depth();
 }