Class AbstractParameterInfo

    • Field Detail

      • NO_MERGE

        protected static final Object NO_MERGE
        is used as return value when value cannot be added
    • Constructor Detail

      • AbstractParameterInfo

        protected AbstractParameterInfo​(ParameterInfo containerItemAccessor)
    • Method Detail

      • getContainerName

        protected String getContainerName()
      • getName

        public final String getName()
        Specified by:
        getName in interface ParameterInfo
        Returns:
        the full name of the parameter from the root of parameter container to the value represented by this ParameterInfo
      • getPlainName

        protected abstract String getPlainName()
      • getWrappedName

        protected abstract String getWrappedName​(String containerName)
      • addValueAs

        public ImmutableMap addValueAs​(ImmutableMap parameters,
                                       Object value)
        Description copied from interface: ParameterInfo
        Matches `value` into `parameters` under the name/structure defined by this ParameterInfo. 1) checks that value matches with optional internal rules of this ParameterInfo 2) creates new copy of ImmutableMap which contains the new `value` and returns that copy
        Specified by:
        addValueAs in interface ParameterInfo
        Parameters:
        parameters - the existing parameters
        value - the new, to be stored value
        Returns:
        copy of `parameters` with new value or existing `parameters` if value is already there or null if value doesn't fit into these parameters
      • addValueAs

        protected abstract Object addValueAs​(Object container,
                                             Function<Object,​Object> merger)
        takes existing item value from the `container`, sends it as parameter into `merger` and get's new to be stored value stores that value into new `container` and returns it
        Parameters:
        container - a container of values
        merger - a code which merges existing value from container with new value and returns merged value, which has to be stored in the container instead
        Returns:
        copy of the container with merged value
      • castTo

        protected <T> T castTo​(Object o,
                               Class<T> type)
      • getEmptyContainer

        protected abstract <T> T getEmptyContainer()
      • setMatchCondition

        public <T> AbstractParameterInfo setMatchCondition​(Class<T> requiredType,
                                                           Predicate<T> matchCondition)
        Parameters:
        requiredType - a required type of the value which matches as value of this parameter
        matchCondition - a Predicate which selects matching values
        Returns:
      • matches

        protected boolean matches​(Object value)
        Checks whether `value` matches with required type and match condition.
        Parameters:
        value -
        Returns:
      • getParameterValueType

        public Class<?> getParameterValueType()
        Specified by:
        getParameterValueType in interface ParameterInfo
        Returns:
        a type of parameter value - if known Note: Pattern builder needs to know the value type to be able to select substitute node. For example patter: return _expression_.S(); either replaces only `_expression_.S()` if the parameter value is an expression or replaces `return _expression_.S()` if the parameter value is a CtBlock
      • setParameterValueType

        public AbstractParameterInfo setParameterValueType​(Class<?> parameterValueType)
        Parameters:
        parameterValueType - a type of the value which is acceptable by this parameter
        Returns:
        this to support fluent API
      • isMultiple

        public boolean isMultiple()
        Specified by:
        isMultiple in interface ParameterInfo
        Returns:
        true if the value container has to be a List, otherwise the container will be a single value
      • setRepeatable

        public AbstractParameterInfo setRepeatable​(boolean repeatable)
        Parameters:
        repeatable - if this matcher can be applied more than once in the same container of targets Note: even if false, it may be applied again to another container and to match EQUAL value.
        Returns:
        this to support fluent API
      • getMinOccurrences

        public int getMinOccurrences()
      • getMaxOccurrences

        public int getMaxOccurrences()
        Returns:
        maximum number of values in this parameter. Note: if isMultiple()==false, then it never returns value > 1
      • setMaxOccurrences

        public void setMaxOccurrences​(int maxOccurrences)
      • setMatchingStrategy

        public void setMatchingStrategy​(Quantifier matchingStrategy)
      • isRepeatable

        public boolean isRepeatable()
        Specified by:
        isRepeatable in interface ParameterInfo
        Returns:
        true if this matcher can be applied more than once in the same container of targets Note: even if false, it may be applied again to another container and to match EQUAL value
      • isMandatory

        public boolean isMandatory​(ImmutableMap parameters)
        Specified by:
        isMandatory in interface ParameterInfo
        Parameters:
        parameters - matching parameters
        Returns:
        true if the ValueResolver of this parameter MUST match with next target in the state defined by current `parameters`. false if match is optional
      • isTryNextMatch

        public boolean isTryNextMatch​(ImmutableMap parameters)
        Specified by:
        isTryNextMatch in interface ParameterInfo
        Parameters:
        parameters - matching parameters
        Returns:
        true if the ValueResolver of this parameter should be processed again to match next target in the state defined by current `parameters`.
      • getValueAs

        public <T> void getValueAs​(Factory factory,
                                   ResultHolder<T> result,
                                   ImmutableMap parameters)
        Description copied from interface: ParameterInfo
        Takes the value of parameter identified by this ParameterInfo from the `parameters` and adds that 0, 1 or more values into result (depending on type of result)
        Specified by:
        getValueAs in interface ParameterInfo
        Parameters:
        factory - the factory used to create new entities if conversion of value is needed before it can be added into `result`
        result - the receiver of the result value. It defined required type of returned value and multiplicity of returned value
        parameters - here are stored all the parameter values
      • convertSingleValue

        protected <T> T convertSingleValue​(Factory factory,
                                           Object value,
                                           Class<T> type)