Package spoon.pattern.internal.parameter
Class AbstractParameterInfo
- java.lang.Object
-
- spoon.pattern.internal.parameter.AbstractParameterInfo
-
- All Implemented Interfaces:
ParameterInfo
- Direct Known Subclasses:
ComputedParameterInfo
,ListParameterInfo
,MapParameterInfo
,SetParameterInfo
public abstract class AbstractParameterInfo extends Object implements ParameterInfo
-
-
Field Summary
Fields Modifier and Type Field Description protected static Object
NO_MERGE
is used as return value when value cannot be added-
Fields inherited from interface spoon.pattern.internal.parameter.ParameterInfo
UNLIMITED_OCCURRENCES
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractParameterInfo(ParameterInfo containerItemAccessor)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description 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 itImmutableMap
addValueAs(ImmutableMap parameters, Object value)
Matches `value` into `parameters` under the name/structure defined by this ParameterInfo.protected Object
addValueToContainer(Object container, Function<Object,Object> merger)
protected <T> T
castTo(Object o, Class<T> type)
protected <T> T
convertSingleValue(Factory factory, Object value, Class<T> type)
protected <T> void
convertValue(Factory factory, ResultHolder<T> result, Object rawValue)
ContainerKind
getContainerKind()
protected ContainerKind
getContainerKind(Object existingValue, Object value)
protected ContainerKind
getContainerKind(ImmutableMap params)
protected AbstractParameterInfo
getContainerKindAccessor(ContainerKind containerKind)
protected String
getContainerName()
protected abstract <T> T
getEmptyContainer()
Quantifier
getMatchingStrategy()
int
getMaxOccurrences()
int
getMinOccurrences()
String
getName()
Class<?>
getParameterValueType()
protected abstract String
getPlainName()
protected Object
getValue(ImmutableMap parameters)
<T> void
getValueAs(Factory factory, ResultHolder<T> result, ImmutableMap parameters)
Takes the value of parameter identified by thisParameterInfo
from the `parameters` and adds that 0, 1 or more values into result (depending on type of result)ValueConvertor
getValueConvertor()
protected abstract String
getWrappedName(String containerName)
boolean
isMandatory(ImmutableMap parameters)
boolean
isMultiple()
boolean
isRepeatable()
boolean
isTryNextMatch(ImmutableMap parameters)
protected boolean
matches(Object value)
Checks whether `value` matches with required type and match condition.protected Object
merge(Object existingValue, Object newValue)
protected Object
mergeSingle(Object existingValue, Object newValue)
AbstractParameterInfo
setContainerKind(ContainerKind containerKind)
<T> AbstractParameterInfo
setMatchCondition(Class<T> requiredType, Predicate<T> matchCondition)
void
setMatchingStrategy(Quantifier matchingStrategy)
void
setMaxOccurrences(int maxOccurrences)
AbstractParameterInfo
setMinOccurrences(int minOccurrences)
AbstractParameterInfo
setParameterValueType(Class<?> parameterValueType)
AbstractParameterInfo
setRepeatable(boolean repeatable)
AbstractParameterInfo
setValueConvertor(ValueConvertor valueConvertor)
String
toString()
-
-
-
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 interfaceParameterInfo
- 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()
-
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 thisParameterInfo
2) creates new copy ofImmutableMap
which contains the new `value` and returns that copy- Specified by:
addValueAs
in interfaceParameterInfo
- Parameters:
parameters
- the existing parametersvalue
- 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
-
addValueToContainer
protected Object addValueToContainer(Object container, Function<Object,Object> merger)
-
getContainerKindAccessor
protected AbstractParameterInfo getContainerKindAccessor(ContainerKind containerKind)
-
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 valuesmerger
- 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
-
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 parametermatchCondition
- aPredicate
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 interfaceParameterInfo
- 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 interfaceParameterInfo
- 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()
-
setMinOccurrences
public AbstractParameterInfo setMinOccurrences(int minOccurrences)
-
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)
-
getMatchingStrategy
public Quantifier getMatchingStrategy()
- Specified by:
getMatchingStrategy
in interfaceParameterInfo
- Returns:
- the strategy used to resolve conflict between two
RootNode
s
-
setMatchingStrategy
public void setMatchingStrategy(Quantifier matchingStrategy)
-
getValueConvertor
public ValueConvertor getValueConvertor()
- Returns:
- the
ValueConvertor
used by reading and writing into parameter values defined by thisParameterInfo
-
setValueConvertor
public AbstractParameterInfo setValueConvertor(ValueConvertor valueConvertor)
- Parameters:
valueConvertor
- theValueConvertor
used by reading and writing into parameter values defined by thisParameterInfo
-
isRepeatable
public boolean isRepeatable()
- Specified by:
isRepeatable
in interfaceParameterInfo
- 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 interfaceParameterInfo
- 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 interfaceParameterInfo
- 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`.
-
getContainerKind
public ContainerKind getContainerKind()
-
setContainerKind
public AbstractParameterInfo setContainerKind(ContainerKind containerKind)
-
getContainerKind
protected ContainerKind getContainerKind(ImmutableMap params)
-
getContainerKind
protected ContainerKind getContainerKind(Object existingValue, Object value)
-
getValueAs
public <T> void getValueAs(Factory factory, ResultHolder<T> result, ImmutableMap parameters)
Description copied from interface:ParameterInfo
Takes the value of parameter identified by thisParameterInfo
from the `parameters` and adds that 0, 1 or more values into result (depending on type of result)- Specified by:
getValueAs
in interfaceParameterInfo
- 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 valueparameters
- here are stored all the parameter values
-
getValue
protected Object getValue(ImmutableMap parameters)
-
convertValue
protected <T> void convertValue(Factory factory, ResultHolder<T> result, Object rawValue)
-
convertSingleValue
protected <T> T convertSingleValue(Factory factory, Object value, Class<T> type)
-
-