Class PrefixAwareRecursionInterceptor
- java.lang.Object
-
- org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor
-
- All Implemented Interfaces:
RecursionInterceptor
public class PrefixAwareRecursionInterceptor extends java.lang.Object implements RecursionInterceptor
RecursionInterceptor
implementation that provides support for expressions with multiple synonyms, such as project.build.directory == pom.build.directory == build.directory in Maven's POM.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
DEFAULT_END_TOKEN
static java.lang.String
DEFAULT_START_TOKEN
private java.util.Stack<java.lang.String>
nakedExpressions
private java.lang.String[]
possiblePrefixes
private boolean
watchUnprefixedExpressions
-
Constructor Summary
Constructors Constructor Description PrefixAwareRecursionInterceptor(java.util.Collection<java.lang.String> possiblePrefixes)
Use the specified expression prefixes to detect synonyms.PrefixAwareRecursionInterceptor(java.util.Collection<java.lang.String> possiblePrefixes, boolean watchUnprefixedExpressions)
Use the specified expression prefixes to detect synonyms, and specify whether unprefixed expressions can be considered synonyms.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
Reset the interceptorvoid
expressionResolutionFinished(java.lang.String expression)
Signal to the interceptor that the all efforts to resolve the given expression have completed - whether successfully or not is irrelevant - and that the expression should not be tracked for recursion any longer.void
expressionResolutionStarted(java.lang.String expression)
Log the intention to start resolving the given expression.java.util.List
getExpressionCycle(java.lang.String expression)
When an expression is determined to be a recursive reference, this method returns the sublist of tracked expressions that participate in this cycle.boolean
hasRecursiveExpression(java.lang.String expression)
Check whether the given value contains an expression that is currently being tracked by this interceptor.
-
-
-
Field Detail
-
DEFAULT_START_TOKEN
public static final java.lang.String DEFAULT_START_TOKEN
- See Also:
- Constant Field Values
-
DEFAULT_END_TOKEN
public static final java.lang.String DEFAULT_END_TOKEN
- See Also:
- Constant Field Values
-
nakedExpressions
private java.util.Stack<java.lang.String> nakedExpressions
-
possiblePrefixes
private final java.lang.String[] possiblePrefixes
-
watchUnprefixedExpressions
private boolean watchUnprefixedExpressions
-
-
Constructor Detail
-
PrefixAwareRecursionInterceptor
public PrefixAwareRecursionInterceptor(java.util.Collection<java.lang.String> possiblePrefixes, boolean watchUnprefixedExpressions)
Use the specified expression prefixes to detect synonyms, and specify whether unprefixed expressions can be considered synonyms.- Parameters:
possiblePrefixes
- The collection of expression prefixes supportedwatchUnprefixedExpressions
- Whether to consider unprefixed expressions as synonyms
-
PrefixAwareRecursionInterceptor
public PrefixAwareRecursionInterceptor(java.util.Collection<java.lang.String> possiblePrefixes)
Use the specified expression prefixes to detect synonyms. Consider unprefixed expressions synonyms as well.- Parameters:
possiblePrefixes
- The collection of expression prefixes supported
-
-
Method Detail
-
hasRecursiveExpression
public boolean hasRecursiveExpression(java.lang.String expression)
Description copied from interface:RecursionInterceptor
Check whether the given value contains an expression that is currently being tracked by this interceptor. If so, that expression is still in the process of being resolved, and this constitutes an expression cycle.- Specified by:
hasRecursiveExpression
in interfaceRecursionInterceptor
- Parameters:
expression
- The value to check for expression cycles.- Returns:
- True if the value contains tracked expressions; false otherwise.
-
expressionResolutionFinished
public void expressionResolutionFinished(java.lang.String expression)
Description copied from interface:RecursionInterceptor
Signal to the interceptor that the all efforts to resolve the given expression have completed - whether successfully or not is irrelevant - and that the expression should not be tracked for recursion any longer.- Specified by:
expressionResolutionFinished
in interfaceRecursionInterceptor
- Parameters:
expression
- The expression to stop tracking.
-
expressionResolutionStarted
public void expressionResolutionStarted(java.lang.String expression)
Description copied from interface:RecursionInterceptor
Log the intention to start resolving the given expression. This signals the interceptor to start tracking that expression to make sure it doesn't come up again until after it has been resolved (or, fails to resolve).- Specified by:
expressionResolutionStarted
in interfaceRecursionInterceptor
- Parameters:
expression
- The expression to be resolved.
-
getExpressionCycle
public java.util.List getExpressionCycle(java.lang.String expression)
When an expression is determined to be a recursive reference, this method returns the sublist of tracked expressions that participate in this cycle. Otherwise, if the expression isn't present in the in-process stack, returnCollections.EMPTY_LIST
. Also, if the expression doesn't have a matched prefix from this interceptor's list, and unprefixed expressions aren't allowed then returnCollections.EMPTY_LIST
.- Specified by:
getExpressionCycle
in interfaceRecursionInterceptor
- Parameters:
expression
- the expression to start with.- Returns:
- The list of expressions that participate in the cycle caused by the given expression.
-
clear
public void clear()
Description copied from interface:RecursionInterceptor
Reset the interceptor- Specified by:
clear
in interfaceRecursionInterceptor
-
-