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); @Override PipelineElement resolveAsPipelineElement(final String placeholderExpression); @Override boolean equals(@Nullable final Object o); @Override int hashCode(); @Override String toString();  }
@Test public void testUnsuccessfulSinglePlaceholderResolution() { assertThat(underTest.resolveAsPipelineElement("header:unknown")) .isEmpty(); assertThat(underTest.resolveAsPipelineElement("fn:substring-before('')")) .isEmpty(); }