test_class.declarator: STAGES = Arrays.asList(
              "thing:name",
              "fn:substring-before(':')",
              "fn:default(thing:id)"
      )
test_class.modifier: private static final
test_class.original_string: private static final List<String> STAGES = Arrays.asList(
              "thing:name",
              "fn:substring-before(':')",
              "fn:default(thing:id)"
      );
test_class.type: List<String>
test_class.var_name: STAGES
test_class.declarator: INVALID_STAGES = Arrays.asList(
              "thing:name",
              "fn:substring-before(':')",
              "fn:unknown('foo')"
      )
test_class.modifier: private static final
test_class.original_string: private static final List<String> INVALID_STAGES = Arrays.asList(
              "thing:name",
              "fn:substring-before(':')",
              "fn:unknown('foo')"
      );
test_class.type: List<String>
test_class.var_name: INVALID_STAGES
test_class.declarator: PIPELINE_INPUT = PipelineElement.resolved("my-gateway:my-thing")
test_class.modifier: private static final
test_class.original_string: private static final PipelineElement PIPELINE_INPUT = PipelineElement.resolved("my-gateway:my-thing");
test_class.type: PipelineElement
test_class.var_name: PIPELINE_INPUT
test_class.declarator: RESPONSES = Arrays.asList(
              PipelineElement.resolved("my-gateway"),
              PipelineElement.resolved("my-gateway")
      )
test_class.modifier: private static final
test_class.original_string: private static final List<PipelineElement> RESPONSES = Arrays.asList(
              PipelineElement.resolved("my-gateway"),
              PipelineElement.resolved("my-gateway")
      );
test_class.type: List<PipelineElement>
test_class.var_name: RESPONSES
test_class.declarator: functionExpression
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private FunctionExpression functionExpression;
test_class.type: FunctionExpression
test_class.var_name: functionExpression
test_class.declarator: expressionResolver
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ExpressionResolver expressionResolver;
test_class.type: ExpressionResolver
test_class.var_name: expressionResolver
test_class.file: model/placeholders/src/test/java/org/eclipse/ditto/model/placeholders/ImmutablePipelineTest.java
test_class.identifier: ImmutablePipelineTest
test_case.body: @Test
      public void execute() {
          prepareFunctionExpressionResponses();
  
          final ImmutablePipeline pipeline = new ImmutablePipeline(functionExpression, STAGES);
          final PipelineElement result = pipeline.execute(PIPELINE_INPUT, expressionResolver);
  
          verifyResultEqualsLastResponse(result);
          verifyFunctionExpressionWasCalledWithIntermediateValues();
      }
test_case.class_method_signature: ImmutablePipelineTest.execute()
test_case.full_signature: @Test public void execute()
test_case.identifier: execute
test_case.invocations: prepareFunctionExpressionResponses execute verifyResultEqualsLastResponse verifyFunctionExpressionWasCalledWithIntermediateValues
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void execute()
focal_class.declarator: functionExpression
focal_class.modifier: private final
focal_class.original_string: private final FunctionExpression functionExpression;
focal_class.type: FunctionExpression
focal_class.var_name: functionExpression
focal_class.declarator: stageExpressions
focal_class.modifier: private final
focal_class.original_string: private final List<String> stageExpressions;
focal_class.type: List<String>
focal_class.var_name: stageExpressions
focal_class.file: model/placeholders/src/main/java/org/eclipse/ditto/model/placeholders/ImmutablePipeline.java
focal_class.identifier: ImmutablePipeline
focal_class.interfaces: implements Pipeline
focal_class.class_method_signature: ImmutablePipeline.ImmutablePipeline(final FunctionExpression functionExpression, final List<String> stageExpressions)
focal_class.full_signature:   ImmutablePipeline(final FunctionExpression functionExpression, final List<String> stageExpressions)
focal_class.identifier: ImmutablePipeline
focal_class.parameters: (final FunctionExpression functionExpression, final List<String> stageExpressions)
focal_class.signature:  ImmutablePipeline(final FunctionExpression functionExpression, final List<String> stageExpressions)
focal_class.class_method_signature: ImmutablePipeline.execute(final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)
focal_class.full_signature: @Override public PipelineElement execute(final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)
focal_class.identifier: execute
focal_class.modifiers: @Override public
focal_class.parameters: (final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)
focal_class.return: PipelineElement
focal_class.signature: PipelineElement execute(final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)
focal_class.class_method_signature: ImmutablePipeline.validate()
focal_class.full_signature: @Override public void validate()
focal_class.identifier: validate
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void validate()
focal_class.class_method_signature: ImmutablePipeline.equals(final Object o)
focal_class.full_signature: @Override public boolean equals(final Object o)
focal_class.identifier: equals
focal_class.modifiers: @Override public
focal_class.parameters: (final Object o)
focal_class.return: boolean
focal_class.signature: boolean equals(final Object o)
focal_class.class_method_signature: ImmutablePipeline.hashCode()
focal_class.full_signature: @Override public int hashCode()
focal_class.identifier: hashCode
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: int
focal_class.signature: int hashCode()
focal_class.class_method_signature: ImmutablePipeline.toString()
focal_class.full_signature: @Override public String toString()
focal_class.identifier: toString
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String toString()
focal_class.class_method_signature: ImmutablePipeline.combineElements(final PipelineElement self, final PipelineElement other)
focal_class.full_signature: private static PipelineElement combineElements(final PipelineElement self, final PipelineElement other)
focal_class.identifier: combineElements
focal_class.modifiers: private static
focal_class.parameters: (final PipelineElement self, final PipelineElement other)
focal_class.return: PipelineElement
focal_class.signature: PipelineElement combineElements(final PipelineElement self, final PipelineElement other)
focal_method.body: @Override
      public PipelineElement execute(final PipelineElement pipelineInput, final ExpressionResolver expressionResolver) {
  
          return stageExpressions.stream().reduce(
                  pipelineInput,
                  (element, expression) -> functionExpression.resolve(expression, element, expressionResolver),
                  ImmutablePipeline::combineElements
          );
      }
focal_method.class_method_signature: ImmutablePipeline.execute(final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)
focal_method.full_signature: @Override public PipelineElement execute(final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)
focal_method.identifier: execute
focal_method.invocations: reduce stream resolve
focal_method.modifiers: @Override public
focal_method.parameters: (final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)
focal_method.return: PipelineElement
focal_method.signature: PipelineElement execute(final PipelineElement pipelineInput, final ExpressionResolver expressionResolver)