class ImmutableExpressionResolver implements ExpressionResolver {

    @Override
    public PipelineElement resolveAsPipelineElement(final String placeholderExpression) {
        final List<String> pipelineStagesExpressions = getPipelineStagesExpressions(placeholderExpression);
        final String firstPlaceholderInPipe = getFirstExpressionInPipe(pipelineStagesExpressions);
        if (isFirstPlaceholderFunction(firstPlaceholderInPipe)) {
            return getPipelineFromExpressions(pipelineStagesExpressions, 0).execute(PipelineElement.unresolved(), this);
        } else {
            final PipelineElement pipelineInput = resolveSinglePlaceholder(firstPlaceholderInPipe);
            return getPipelineFromExpressions(pipelineStagesExpressions, 1).execute(pipelineInput, this);
        }
    }

      ImmutableExpressionResolver(final List<PlaceholderResolver<?>> placeholderResolvers);
      ImmutableExpressionResolver(final List<PlaceholderResolver<?>> placeholderResolvers,
            @Nullable final String stringUsedInPlaceholderValidation);

}