3838import dev .cel .optimizer .AstMutator ;
3939import dev .cel .optimizer .CelAstOptimizer ;
4040import java .util .ArrayList ;
41+ import java .util .List ;
4142import java .util .NoSuchElementException ;
4243import java .util .Optional ;
4344import java .util .stream .Stream ;
@@ -51,21 +52,53 @@ public final class InliningOptimizer implements CelAstOptimizer {
5152 private final ImmutableList <InlineVariable > inlineVariables ;
5253 private final AstMutator astMutator ;
5354
55+ /**
56+ * Creates a new {@code InliningOptimizer} with one or more {@link InlineVariable}s.
57+ *
58+ * <p>Note that the variables to be inlined can be a dependency to one other based on the supplied
59+ * ordering. This allows for recursive inlining where a replacement value might itself contain
60+ * variables that need to be inlined.
61+ *
62+ * <p>For example, given a source expression {@code "a + b"} and inline variables in the following
63+ * order:
64+ *
65+ * <ul>
66+ * <li>{@code {a: b, b: 2}}, result: {@code 2 + 2}.
67+ * <li>{@code {b: 2, a: b}}, result: {@code b + 2}.
68+ * </ul>
69+ */
5470 public static InliningOptimizer newInstance (InlineVariable ... inlineVariables ) {
5571 return newInstance (ImmutableList .copyOf (inlineVariables ));
5672 }
5773
58- public static InliningOptimizer newInstance (Iterable <InlineVariable > inlineVariables ) {
74+ /**
75+ * Creates a new {@code InliningOptimizer}.
76+ *
77+ * @see #newInstance(InlineVariable...)
78+ */
79+ public static InliningOptimizer newInstance (List <InlineVariable > inlineVariables ) {
5980 return newInstance (InliningOptions .newBuilder ().build (), ImmutableList .copyOf (inlineVariables ));
6081 }
6182
83+ /**
84+ * Creates a new {@code InliningOptimizer}.
85+ *
86+ * @see #newInstance(InlineVariable...)
87+ * @param options {@link InliningOptions} to customize the inlining behavior with.
88+ */
6289 public static InliningOptimizer newInstance (
6390 InliningOptions options , InlineVariable ... inlineVariables ) {
6491 return newInstance (options , ImmutableList .copyOf (inlineVariables ));
6592 }
6693
94+ /**
95+ * Creates a new {@code InliningOptimizer}.
96+ *
97+ * @see #newInstance(InlineVariable...)
98+ * @param options {@link InliningOptions} to customize the inlining behavior with.
99+ */
67100 public static InliningOptimizer newInstance (
68- InliningOptions options , Iterable <InlineVariable > inlineVariables ) {
101+ InliningOptions options , List <InlineVariable > inlineVariables ) {
69102 return new InliningOptimizer (options , ImmutableList .copyOf (inlineVariables ));
70103 }
71104
0 commit comments