Package com.strobel.expressions
Class ForEachExpression
- java.lang.Object
-
- com.strobel.expressions.Expression
-
- com.strobel.expressions.ForEachExpression
-
public final class ForEachExpression extends Expression
-
-
Field Summary
Fields Modifier and Type Field Description private Expression
_body
private LabelTarget
_breakTarget
private LabelTarget
_continueTarget
private Expression
_sequence
private ParameterExpression
_variable
-
Constructor Summary
Constructors Constructor Description ForEachExpression(ParameterExpression variable, Expression sequence, Expression body, LabelTarget breakTarget, LabelTarget continueTarget)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Expression
accept(ExpressionVisitor visitor)
Dispatches to the specific visit method for this node type.boolean
canReduce()
Indicates that the node can be reduced to a simpler node.Expression
getBody()
LabelTarget
getBreakTarget()
LabelTarget
getContinueTarget()
ExpressionType
getNodeType()
Returns the node type of thisExpression
.Expression
getSequence()
Type<?>
getType()
Gets the static type of the expression that thisExpression
represents.ParameterExpression
getVariable()
Expression
reduce()
Reduces this node to a simpler expression.private Expression
reduceForArray()
private Expression
reduceForIterable()
private Type<?>
tryGetGenericEnumerableArgument()
ForEachExpression
update(ParameterExpression variable, Expression sequence, Expression body, LabelTarget breakTarget, LabelTarget continueTarget)
protected Expression
visitChildren(ExpressionVisitor visitor)
Reduces the node and then calls the visitor on the reduced expression.-
Methods inherited from class com.strobel.expressions.Expression
add, add, addAssign, addAssign, addAssign, and, and, andAlso, andAlso, andAlso, andAssign, andAssign, andAssign, arrayIndex, arrayLength, arrayToList, arrayToList, arrayToReadOnlyList, assign, base, block, block, block, block, block, block, block, block, block, block, block, block, block, block, box, call, call, call, call, call, call, call, call, call, call, classConstant, coalesce, coalesce, concat, concat, concat, condition, condition, constant, constant, convert, convert, decrement, decrement, defaultValue, divide, divide, divideAssign, divideAssign, divideAssign, empty, ensureUnmodifiable, equal, equal, exclusiveOr, exclusiveOr, exclusiveOrAssign, exclusiveOrAssign, exclusiveOrAssign, field, field, field, field, forEach, forEach, forEach, getDebugView, getInvokeMethod, getInvokeMethod, getMethodValidated, greaterThan, greaterThan, greaterThanOrEqual, greaterThanOrEqual, ifThen, ifThenElse, increment, increment, instanceOf, invoke, invoke, isFalse, isFalse, isNotNull, isNull, isTrue, isTrue, label, label, label, label, label, label, lambda, lambda, lambda, lambda, lambda, lambda, lambda, lambda, lambda, lambda, lambda, lambda, lambda, leftShift, leftShift, leftShiftAssign, leftShiftAssign, leftShiftAssign, lessThan, lessThan, lessThanOrEqual, lessThanOrEqual, loop, loop, loop, makeBinary, makeBinary, makeBinary, makeBinary, makeBinary, makeBreak, makeBreak, makeBreak, makeBreak, makeCatch, makeCatch, makeCatch, makeCatch, makeCatch, makeCatch, makeContinue, makeContinue, makeFor, makeFor, makeFor, makeGoto, makeGoto, makeGoto, makeGoto, makeGoto, makeMemberAccess, makeNew, makeNew, makeNew, makeNew, makeReturn, makeReturn, makeReturn, makeReturn, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeSwitch, makeThrow, makeThrow, makeTry, makeTry, makeTry, makeUnary, makeUnary, methodArgumentsMatch, modulo, modulo, moduloAssign, moduloAssign, moduloAssign, multiply, multiply, multiplyAssign, multiplyAssign, multiplyAssign, negate, negate, newArrayBounds, newArrayInit, newArrayInit, not, not, notEqual, notEqual, onesComplement, onesComplement, or, or, orAssign, orAssign, orAssign, orElse, orElse, orElse, parameter, parameter, parameterIsAssignable, parameters, performBinaryNumericPromotion, postDecrementAssign, postDecrementAssign, postIncrementAssign, postIncrementAssign, preDecrementAssign, preDecrementAssign, preIncrementAssign, preIncrementAssign, reduceAndCheck, reduceExtensions, referenceEqual, referenceNotEqual, returnObject, rightShift, rightShift, rightShiftAssign, rightShiftAssign, rightShiftAssign, runtimeVariables, runtimeVariables, self, subtract, subtract, subtractAssign, subtractAssign, subtractAssign, switchCase, switchCase, toString, tryCatch, tryCatchFinally, tryFinally, typeEqual, unaryPlus, unaryPlus, unbox, unbox, unsignedRightShift, unsignedRightShift, unsignedRightShiftAssign, unsignedRightShiftAssign, unsignedRightShiftAssign, validateVariables, variable, variable, variables
-
-
-
-
Field Detail
-
_variable
private final ParameterExpression _variable
-
_sequence
private final Expression _sequence
-
_body
private final Expression _body
-
_breakTarget
private final LabelTarget _breakTarget
-
_continueTarget
private final LabelTarget _continueTarget
-
-
Constructor Detail
-
ForEachExpression
ForEachExpression(ParameterExpression variable, Expression sequence, Expression body, LabelTarget breakTarget, LabelTarget continueTarget)
-
-
Method Detail
-
getVariable
public ParameterExpression getVariable()
-
getSequence
public Expression getSequence()
-
getBody
public Expression getBody()
-
getBreakTarget
public LabelTarget getBreakTarget()
-
getContinueTarget
public LabelTarget getContinueTarget()
-
getNodeType
public ExpressionType getNodeType()
Description copied from class:Expression
Returns the node type of thisExpression
.- Overrides:
getNodeType
in classExpression
- Returns:
- the
ExpressionType
that represents this expression.
-
getType
public Type<?> getType()
Description copied from class:Expression
Gets the static type of the expression that thisExpression
represents.- Overrides:
getType
in classExpression
- Returns:
- the
Type
that represents the static type of the expression.
-
canReduce
public boolean canReduce()
Description copied from class:Expression
Indicates that the node can be reduced to a simpler node. If this returnstrue
,reduce()
can be called to produce the reduced form.- Overrides:
canReduce
in classExpression
- Returns:
true
if the node can be reduced; otherwise,false
.
-
update
public ForEachExpression update(ParameterExpression variable, Expression sequence, Expression body, LabelTarget breakTarget, LabelTarget continueTarget)
-
accept
protected Expression accept(ExpressionVisitor visitor)
Description copied from class:Expression
Dispatches to the specific visit method for this node type. For example,BinaryExpression
will call intoExpressionVisitor.visitBinary()
.- Overrides:
accept
in classExpression
- Parameters:
visitor
- the visitor to visit this node.- Returns:
- the result of visiting this node.
-
visitChildren
protected Expression visitChildren(ExpressionVisitor visitor)
Description copied from class:Expression
Reduces the node and then calls the visitor on the reduced expression. Throws an exception if the node isn't reducible.- Overrides:
visitChildren
in classExpression
- Parameters:
visitor
- an expression visitor- Returns:
- the expression being visited, or an expression which should replace it in the tree.
-
reduce
public Expression reduce()
Description copied from class:Expression
Reduces this node to a simpler expression. IfcanReduce()
returnstrue
, this should return a valid expression. This method is allowed to return another node which itself must be reduced.- Overrides:
reduce
in classExpression
- Returns:
- the reduced expression.
-
reduceForArray
private Expression reduceForArray()
-
reduceForIterable
private Expression reduceForIterable()
-
tryGetGenericEnumerableArgument
private Type<?> tryGetGenericEnumerableArgument()
-
-