TreeTraversal (@NotNull String debugName, final @NotNull TraversalInterceptor interceptor) { String nextName = debugName + "." + this.debugName; if (this instanceof Intercepted) { Intercepted intercepted = (Intercepted)this; return new Intercepted(nextName, intercepted.original, TraversalInterceptor.compose(intercepted.interceptor, interceptor)); } return new Intercepted(nextName, this, interceptor); }