code: public static <T1, T2, T3, R> TriFunction<T1, T2, T3, R> intercept(TriFunction<T1, T2, T3, R> innermost, TernaryInterceptor<T1, T2, T3> first, TernaryInterceptor<T1, T2, T3> second, TernaryInterceptor<T1, T2, T3> third) {
          dbc.precondition(first != null, "cannot create an interceptor chain with a null interceptor");
          dbc.precondition(second != null, "cannot create an interceptor chain with a null interceptor");
          dbc.precondition(third != null, "cannot create an interceptor chain with a null interceptor");
          final ArrayIterator<TernaryInterceptor<T1, T2, T3>> interceptors = ArrayIterator.of(first, second, third);
          return new TernaryInterceptorChain<T1, T2, T3, R>(innermost, interceptors);
      }
docs: Creates a ternary interceptor chain.
  
  @param <R> the function result type
  @param <T1> the function first parameter type
  @param <T2> the function second parameter type
  @param <T3> the function third parameter type
  @param innermost the function to be intercepted
  @param first the first interceptor
  @param second the second interceptor
  @param third the third interceptor
  @return the resulting function