test_class.declarator: KNOWN_INPUT = PipelineElement.resolved("org.eclipse.ditto:any.thing.or.else")
test_class.modifier: private static final
test_class.original_string: private static final PipelineElement KNOWN_INPUT = PipelineElement.resolved("org.eclipse.ditto:any.thing.or.else");
test_class.type: PipelineElement
test_class.var_name: KNOWN_INPUT
test_class.declarator: EMPTY_INPUT = PipelineElement.unresolved()
test_class.modifier: private static final
test_class.original_string: private static final PipelineElement EMPTY_INPUT = PipelineElement.unresolved();
test_class.type: PipelineElement
test_class.var_name: EMPTY_INPUT
test_class.declarator: UNMATCHING_INPUT = PipelineElement.resolved("any.thing.without.colon")
test_class.modifier: private static final
test_class.original_string: private static final PipelineElement UNMATCHING_INPUT = PipelineElement.resolved("any.thing.without.colon");
test_class.type: PipelineElement
test_class.var_name: UNMATCHING_INPUT
test_class.declarator: SUBSTRING_AT = ":"
test_class.modifier: private static final
test_class.original_string: private static final String SUBSTRING_AT = ":";
test_class.type: String
test_class.var_name: SUBSTRING_AT
test_class.declarator: EXPECTED_RESULT = "any.thing.or.else"
test_class.modifier: private static final
test_class.original_string: private static final String EXPECTED_RESULT = "any.thing.or.else";
test_class.type: String
test_class.var_name: EXPECTED_RESULT
test_class.declarator: function = new PipelineFunctionSubstringAfter()
test_class.modifier: private final
test_class.original_string: private final PipelineFunctionSubstringAfter function = new PipelineFunctionSubstringAfter();
test_class.type: PipelineFunctionSubstringAfter
test_class.var_name: function
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/PipelineFunctionSubstringAfterTest.java
test_class.identifier: PipelineFunctionSubstringAfterTest
test_case.body: @Test
      public void returnsEmptyForEmptyInput() {
          assertThat(function.apply(EMPTY_INPUT, "('" + SUBSTRING_AT + "')", expressionResolver)).isEmpty();
      }
test_case.class_method_signature: PipelineFunctionSubstringAfterTest.returnsEmptyForEmptyInput()
test_case.full_signature: @Test public void returnsEmptyForEmptyInput()
test_case.identifier: returnsEmptyForEmptyInput
test_case.invocations: isEmpty assertThat apply
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void returnsEmptyForEmptyInput()
focal_class.declarator: FUNCTION_NAME = "substring-after"
focal_class.modifier: private static final
focal_class.original_string: private static final String FUNCTION_NAME = "substring-after";
focal_class.type: String
focal_class.var_name: FUNCTION_NAME
focal_class.file: model/placeholders/src/main/java/org/eclipse/ditto/model/placeholders/PipelineFunctionSubstringAfter.java
focal_class.identifier: PipelineFunctionSubstringAfter
focal_class.interfaces: implements PipelineFunction
focal_class.class_method_signature: PipelineFunctionSubstringAfter.getName()
focal_class.full_signature: @Override public String getName()
focal_class.identifier: getName
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getName()
focal_class.class_method_signature: PipelineFunctionSubstringAfter.getSignature()
focal_class.full_signature: @Override public Signature getSignature()
focal_class.identifier: getSignature
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: Signature
focal_class.signature: Signature getSignature()
focal_class.class_method_signature: PipelineFunctionSubstringAfter.apply(final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_class.full_signature: @Override public PipelineElement apply(final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_class.identifier: apply
focal_class.modifiers: @Override public
focal_class.parameters: (final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_class.return: PipelineElement
focal_class.signature: PipelineElement apply(final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_class.class_method_signature: PipelineFunctionSubstringAfter.parseAndResolve(final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_class.full_signature: private String parseAndResolve(final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_class.identifier: parseAndResolve
focal_class.modifiers: private
focal_class.parameters: (final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_class.return: String
focal_class.signature: String parseAndResolve(final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_method.body: @Override
      public PipelineElement apply(final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver) {
  
          final String splitValue = parseAndResolve(paramsIncludingParentheses, expressionResolver);
  
          return value.onResolved(previousStage -> {
              if (previousStage.contains(splitValue)) {
                  return PipelineElement.resolved(previousStage.substring(previousStage.indexOf(splitValue) + 1));
              } else {
                  return PipelineElement.unresolved();
              }
          });
      }
focal_method.class_method_signature: PipelineFunctionSubstringAfter.apply(final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_method.full_signature: @Override public PipelineElement apply(final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_method.identifier: apply
focal_method.invocations: parseAndResolve onResolved contains resolved substring indexOf unresolved
focal_method.modifiers: @Override public
focal_method.parameters: (final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)
focal_method.return: PipelineElement
focal_method.signature: PipelineElement apply(final PipelineElement value, final String paramsIncludingParentheses,
              final ExpressionResolver expressionResolver)