code: public static <T> T track(T target){
  
          //noinspection unchecked
          return (T) Enhancer.create(target.getClass(), (MethodInterceptor) (o, method, objects, methodProxy) -> {
              METHODSTACK.get().push(method);
              try{
  
                  return methodProxy.invokeSuper(o, objects);
              } finally {
                  METHODSTACK.get().pop();
              }
  
          });
      }
docs: Enhances the target object to track the invocation of methods of the target. The current method can
  be retrieved by invoking {@link #currentMethod()}
  @param target
  the target object whose method invocations should be tracked
  @param <T>
  the type of the tracked object
  @return
  a tracked object whose method references will be put onto a stack so that the most recent method can
  be retrieved using the {@link #currentMethod()} call