Interface Expression.Comprehension<E extends Expression>

  • All Known Implementing Classes:
    CelExpr.CelComprehension
    Enclosing interface:
    Expression

    public static interface Expression.Comprehension<E extends Expression>
    A comprehension expression applied to a list or map.

    Comprehensions are not part of the core syntax, but enabled with macros. A macro matches a specific call signature within a parsed AST and replaces the call with an alternate AST block. Macro expansion happens at parse time.

    The following macros are supported within CEL:

    Aggregate type macros may be applied to all elements in a list or all keys in a map:

    `all`, `exists`, `exists_one` - test a predicate expression against the inputs and return `true` if the predicate is satisfied for all, any, or only one value `list.all(x, x < 10)`. `filter` - test a predicate expression against the inputs and return the subset of elements which satisfy the predicate: `payments.filter(p, p > 1000)`. `map` - apply an expression to all elements in the input and return the output aggregate type: `[1, 2, 3].map(i, i * i)`.

    The `has(m.x)` macro tests whether the property `x` is present in struct `m`. The semantics of this macro depend on the type of `m`. For proto2 messages `has(m.x)` is defined as 'defined, but not set`. For proto3, the macro tests whether the property is set to its default. For map and struct types, the macro tests whether the property `x` is defined on `m`.

    Comprehension evaluation can be best visualized as the following pseudocode:

    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      E accuInit()
      The initial value of the accumulator.
      java.lang.String accuVar()
      The name of the variable used for accumulation of the result.
      E iterRange()
      The range over which var iterates.
      java.lang.String iterVar()
      The name of the iteration variable.
      E loopCondition()
      An expression which can contain iter_var and accu_var.
      E loopStep()
      An expression which can contain iter_var and accu_var.
      E result()
      An expression which can contain accu_var.
    • Method Detail

      • iterVar

        java.lang.String iterVar()
        The name of the iteration variable.
      • iterRange

        E iterRange()
        The range over which var iterates.
      • accuVar

        java.lang.String accuVar()
        The name of the variable used for accumulation of the result.
      • accuInit

        E accuInit()
        The initial value of the accumulator.
      • loopCondition

        E loopCondition()
        An expression which can contain iter_var and accu_var.

        Returns false when the result has been computed and may be used as a hint to short-circuit the remainder of the comprehension.

      • loopStep

        E loopStep()
        An expression which can contain iter_var and accu_var.

        Computes the next value of accu_var.

      • result

        E result()
        An expression which can contain accu_var.

        Computes the result.