code: public static Stack startIfNotEmpty() {
          Stack stack = getStack();
          if (!stack.elements.isEmpty()) {
              stack.push(CombinedInterceptorAndDecoratorStackMethodHandler.NULL_INSTANCE);
              return stack;
          } else {
              // if RequestScopedCache is not active, remove now to prevent ThreadLocal leak
              stack.removeIfEmpty();
              return null;
          }
      }
docs: This is called by client proxies. Calling a method on a client proxy means that we left the interception context of the calling bean. Therefore,
  client proxies call this method to start a new interception context of the called (possibly intercepted) bean. If however there is not interception context
  at the time the proxy is called (meaning the caller is not intercepted), there is no need to create new interception context. This is an optimization as the
  first startInterceptorContext call is expensive.
  
  If this method returns a non-null value, the caller of this method is required to call {@link Stack#end()} on the returned value.