Package spoon.pattern.internal.node
Class ForEachNode
java.lang.Object
spoon.pattern.internal.node.AbstractNode
spoon.pattern.internal.node.ForEachNode
- All Implemented Interfaces:
Matchers,InlineNode,RepeatableMatcher,RootNode
Pattern node of multiple occurrences of the same model, just with different parameters.
Example with three occurrences of model `System.out.println(_x_)`, with parameter `_x_`
System.out.println("a")
System.out.println("b")
System.out.println(getStringOf(p1, p2))
where parameter values are _x_ = ["a", "b", getStringOf(p1, p2)]-
Field Summary
Fields inherited from interface spoon.pattern.internal.node.RootNode
MATCH_ALL, MATCH_PART -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidforEachParameterInfo(BiConsumer<ParameterInfo,RootNode> consumer)Calls consumer for each pair of parameter definition (ParameterInfo) andRootNode, which uses it<T> voidgenerateInlineTargets(DefaultGenerator generator, ResultHolder<T> result, ImmutableMap parameters)Generates inline statements of this inlineRootNode.<T> voidgenerateTargets(DefaultGenerator generator, ResultHolder<T> result, ImmutableMap parameters)Generates zero, one or more target depending on kind of thisRootNode, expected `result` and input `parameters`If twoRepeatableMatchers in a list are matching the same element, then returnedQuantifierdefines how resolve this conflictbooleanisMandatory(ImmutableMap parameters)booleanbooleanisTryNextMatch(ImmutableMap parameters)matchAllWith(TobeMatched tobeMatched)Matches all matchers of thisMatchersinstance with `targets`matchTargets(TobeMatched targets, Matchers next)booleanreplaceNode(RootNode oldNode, RootNode newNode)Call it to modify Pattern structure.voidsetIterableParameter(PrimitiveMatcher substRequestOfIterable)voidsetLocalParameter(ParameterInfo parameterInfo)voidsetNestedModel(RootNode valueResolver)Methods inherited from class spoon.pattern.internal.node.AbstractNode
isSimplifyGenerated, setSimplifyGenerated, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface spoon.pattern.internal.node.RootNode
isSimplifyGenerated, matchTargets, setSimplifyGenerated
-
Constructor Details
-
ForEachNode
public ForEachNode()
-
-
Method Details
-
replaceNode
Description copied from interface:RootNodeCall it to modify Pattern structure. It is actually called mainly by PatternBuilder. TODO: May be we can move this method into some internal interface?- Specified by:
replaceNodein interfaceRootNode- Parameters:
oldNode- oldRootNodenewNode- newRootNode- Returns:
- a true if `oldNode` was found in this
RootNodeor it's children and replaced by `newNode` false if `oldNode` was not found
-
generateTargets
public <T> void generateTargets(DefaultGenerator generator, ResultHolder<T> result, ImmutableMap parameters)Description copied from interface:RootNodeGenerates zero, one or more target depending on kind of thisRootNode, expected `result` and input `parameters`- Specified by:
generateTargetsin interfaceRootNode- Parameters:
generator-Generatorwhich drives generation processresult- holder for the generated objectsparameters- aImmutableMapholding parameters
-
getMatchingStrategy
Description copied from interface:RepeatableMatcherIf twoRepeatableMatchers in a list are matching the same element, then returnedQuantifierdefines how resolve this conflict- Specified by:
getMatchingStrategyin interfaceRepeatableMatcher- Returns:
Quantifier
-
matchAllWith
Description copied from interface:MatchersMatches all matchers of thisMatchersinstance with `targets`- Specified by:
matchAllWithin interfaceMatchers- Specified by:
matchAllWithin interfaceRootNode- Parameters:
tobeMatched- to be matched target nodes and input parameters- Returns:
TobeMatchedwith targets which remained after allRootNodes were matched + matched parameters
-
forEachParameterInfo
Description copied from interface:RootNodeCalls consumer for each pair of parameter definition (ParameterInfo) andRootNode, which uses it- Specified by:
forEachParameterInfoin interfaceRootNode- Parameters:
consumer- the receiver of pairs ofParameterInfoandRootNode
-
setNestedModel
-
setIterableParameter
-
setLocalParameter
-
isRepeatable
public boolean isRepeatable()- Specified by:
isRepeatablein interfaceRepeatableMatcher- Returns:
- true if this matcher can be applied more then 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
- Specified by:
isMandatoryin interfaceRepeatableMatcher- Parameters:
parameters- matching parameters- Returns:
- true if this ValueResolver MUST match with next target in the state defined by current `parameters`. false if match is optional
-
isTryNextMatch
- Specified by:
isTryNextMatchin interfaceRepeatableMatcher- Parameters:
parameters- matching parameters- Returns:
- true if this ValueResolver should be processed again to match next target in the state defined by current `parameters`.
-
generateInlineTargets
public <T> void generateInlineTargets(DefaultGenerator generator, ResultHolder<T> result, ImmutableMap parameters)Description copied from interface:InlineNodeGenerates inline statements of this inlineRootNode. This method is used when sources of pattern have to be printed- Specified by:
generateInlineTargetsin interfaceInlineNode- Parameters:
generator- a to be usedGeneratorresult- holder of the resultparameters- aImmutableMapwith current parameters
-
matchTargets
- Specified by:
matchTargetsin interfaceRootNode- Parameters:
targets- to be matched target nodes and input parametersnext- Chain of matchers which has to be processed after thisRootNode- Returns:
- new parameters and container with remaining targets
-