Skip to content

Commit 98658e7

Browse files
l46kokcopybara-github
authored andcommitted
Implement trace for planner
PiperOrigin-RevId: 902822484
1 parent f2d69d9 commit 98658e7

36 files changed

Lines changed: 483 additions & 238 deletions

extensions/src/main/java/dev/cel/extensions/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ java_library(
122122
":extension_library",
123123
"//checker:checker_builder",
124124
"//common:compiler_common",
125-
"//common:options",
126125
"//common/ast",
127126
"//common/exceptions:numeric_overflow",
128127
"//common/internal:comparison_functions",

extensions/src/test/java/dev/cel/extensions/CelExtensionTestBase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
* planner runtime, along with parsed-only and checked expression evaluations for the planner.
3030
*/
3131
abstract class CelExtensionTestBase {
32-
@TestParameter public CelRuntimeFlavor runtimeFlavor;
33-
@TestParameter public boolean isParseOnly;
32+
@TestParameter CelRuntimeFlavor runtimeFlavor;
33+
@TestParameter boolean isParseOnly;
3434

3535
@Before
3636
public void setUpBase() {

extensions/src/test/java/dev/cel/extensions/CelMathExtensionsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646

4747
@RunWith(TestParameterInjector.class)
4848
public class CelMathExtensionsTest {
49-
@TestParameter public CelRuntimeFlavor runtimeFlavor;
50-
@TestParameter public boolean isParseOnly;
49+
@TestParameter private CelRuntimeFlavor runtimeFlavor;
50+
@TestParameter private boolean isParseOnly;
5151

5252
private Cel cel;
5353

policy/src/test/java/dev/cel/policy/CelPolicyCompilerImplTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public final class CelPolicyCompilerImplTest {
6767
.enableHeterogeneousNumericComparisons(true)
6868
.build();
6969

70-
@TestParameter public CelRuntimeFlavor runtimeFlavor;
70+
@TestParameter private CelRuntimeFlavor runtimeFlavor;
7171

7272
@Test
7373
public void compileYamlPolicy_success(@TestParameter TestYamlPolicy yamlPolicy) throws Exception {

runtime/planner/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,9 @@ java_library(
99
name = "program_planner",
1010
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:program_planner"],
1111
)
12+
13+
java_library(
14+
name = "planned_program",
15+
visibility = ["//:internal"],
16+
exports = ["//runtime/src/main/java/dev/cel/runtime/planner:planned_program"],
17+
)

runtime/src/main/java/dev/cel/runtime/BUILD.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,11 @@ java_library(
853853
"//common/values:cel_value_provider",
854854
"//common/values:combined_cel_value_provider",
855855
"//common/values:proto_message_value_provider",
856+
"//runtime:activation",
857+
"//runtime:interpretable",
858+
"//runtime:proto_message_activation_factory",
859+
"//runtime:resolved_overload",
860+
"//runtime/planner:planned_program",
856861
"//runtime/planner:program_planner",
857862
"//runtime/standard:type",
858863
"@maven//:com_google_errorprone_error_prone_annotations",

runtime/src/main/java/dev/cel/runtime/CelRuntimeImpl.java

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@
4545
import dev.cel.common.values.CelValueProvider;
4646
import dev.cel.common.values.CombinedCelValueProvider;
4747
import dev.cel.common.values.ProtoMessageValueProvider;
48+
import dev.cel.runtime.planner.PlannedProgram;
4849
import dev.cel.runtime.planner.ProgramPlanner;
4950
import dev.cel.runtime.standard.TypeFunction;
5051
import java.util.Arrays;
5152
import java.util.Collection;
5253
import java.util.HashMap;
5354
import java.util.Map;
55+
import java.util.Optional;
5456
import java.util.function.Function;
5557
import org.jspecify.annotations.Nullable;
5658

@@ -98,6 +100,21 @@ public Program createProgram(CelAbstractSyntaxTree ast) throws CelEvaluationExce
98100
return toRuntimeProgram(planner().plan(ast));
99101
}
100102

103+
private static final CelFunctionResolver EMPTY_FUNCTION_RESOLVER =
104+
new CelFunctionResolver() {
105+
@Override
106+
public Optional<CelResolvedOverload> findOverloadMatchingArgs(
107+
String functionName, Collection<String> overloadIds, Object[] args) {
108+
return Optional.empty();
109+
}
110+
111+
@Override
112+
public Optional<CelResolvedOverload> findOverloadMatchingArgs(
113+
String functionName, Object[] args) {
114+
return Optional.empty();
115+
}
116+
};
117+
101118
public Program toRuntimeProgram(dev.cel.runtime.Program program) {
102119
return new Program() {
103120

@@ -119,7 +136,13 @@ public Object eval(Map<String, ?> mapValue, CelFunctionResolver lateBoundFunctio
119136

120137
@Override
121138
public Object eval(Message message) throws CelEvaluationException {
122-
throw new UnsupportedOperationException("Not yet supported.");
139+
PlannedProgram plannedProgram = (PlannedProgram) program;
140+
return plannedProgram.evalOrThrow(
141+
plannedProgram.interpretable(),
142+
ProtoMessageActivationFactory.fromProto(message, plannedProgram.options()),
143+
EMPTY_FUNCTION_RESOLVER,
144+
/* partialVars= */ null,
145+
/* listener= */ null);
123146
}
124147

125148
@Override
@@ -141,25 +164,38 @@ public Object eval(PartialVars partialVars) throws CelEvaluationException {
141164

142165
@Override
143166
public Object trace(CelEvaluationListener listener) throws CelEvaluationException {
144-
throw new UnsupportedOperationException("Trace is not yet supported.");
167+
return ((PlannedProgram) program)
168+
.trace(GlobalResolver.EMPTY, EMPTY_FUNCTION_RESOLVER, null, listener);
145169
}
146170

147171
@Override
148172
public Object trace(Map<String, ?> mapValue, CelEvaluationListener listener)
149173
throws CelEvaluationException {
150-
throw new UnsupportedOperationException("Trace is not yet supported.");
174+
return ((PlannedProgram) program)
175+
.trace(Activation.copyOf(mapValue), EMPTY_FUNCTION_RESOLVER, null, listener);
151176
}
152177

153178
@Override
154179
public Object trace(Message message, CelEvaluationListener listener)
155180
throws CelEvaluationException {
156-
throw new UnsupportedOperationException("Trace is not yet supported.");
181+
PlannedProgram plannedProgram = (PlannedProgram) program;
182+
return plannedProgram.evalOrThrow(
183+
plannedProgram.interpretable(),
184+
ProtoMessageActivationFactory.fromProto(message, plannedProgram.options()),
185+
EMPTY_FUNCTION_RESOLVER,
186+
/* partialVars= */ null,
187+
listener);
157188
}
158189

159190
@Override
160191
public Object trace(CelVariableResolver resolver, CelEvaluationListener listener)
161192
throws CelEvaluationException {
162-
throw new UnsupportedOperationException("Trace is not yet supported.");
193+
return ((PlannedProgram) program)
194+
.trace(
195+
(name) -> resolver.find(name).orElse(null),
196+
EMPTY_FUNCTION_RESOLVER,
197+
null,
198+
listener);
163199
}
164200

165201
@Override
@@ -168,7 +204,12 @@ public Object trace(
168204
CelFunctionResolver lateBoundFunctionResolver,
169205
CelEvaluationListener listener)
170206
throws CelEvaluationException {
171-
throw new UnsupportedOperationException("Trace is not yet supported.");
207+
return ((PlannedProgram) program)
208+
.trace(
209+
(name) -> resolver.find(name).orElse(null),
210+
lateBoundFunctionResolver,
211+
null,
212+
listener);
172213
}
173214

174215
@Override
@@ -177,7 +218,8 @@ public Object trace(
177218
CelFunctionResolver lateBoundFunctionResolver,
178219
CelEvaluationListener listener)
179220
throws CelEvaluationException {
180-
throw new UnsupportedOperationException("Trace is not yet supported.");
221+
return ((PlannedProgram) program)
222+
.trace(Activation.copyOf(mapValue), lateBoundFunctionResolver, null, listener);
181223
}
182224

183225
@Override

runtime/src/main/java/dev/cel/runtime/planner/BUILD.bazel

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,21 @@ java_library(
6666
java_library(
6767
name = "planned_program",
6868
srcs = ["PlannedProgram.java"],
69+
tags = [
70+
],
6971
deps = [
7072
":error_metadata",
7173
":localized_evaluation_exception",
7274
":planned_interpretable",
7375
"//:auto_value",
7476
"//common:options",
77+
"//common/annotations",
7578
"//common/exceptions:runtime_exception",
7679
"//common/values",
7780
"//runtime:activation",
7881
"//runtime:evaluation_exception",
7982
"//runtime:evaluation_exception_builder",
83+
"//runtime:evaluation_listener",
8084
"//runtime:function_resolver",
8185
"//runtime:interpretable",
8286
"//runtime:interpreter_util",
@@ -85,6 +89,7 @@ java_library(
8589
"//runtime:resolved_overload",
8690
"//runtime:variable_resolver",
8791
"@maven//:com_google_errorprone_error_prone_annotations",
92+
"@maven//:org_jspecify_jspecify",
8893
],
8994
)
9095

@@ -93,6 +98,7 @@ java_library(
9398
srcs = ["EvalConstant.java"],
9499
deps = [
95100
":planned_interpretable",
101+
"//common/ast",
96102
"//runtime:interpretable",
97103
"@maven//:com_google_errorprone_error_prone_annotations",
98104
],
@@ -104,6 +110,7 @@ java_library(
104110
deps = [
105111
":planned_interpretable",
106112
":qualifier",
113+
"//common/ast",
107114
"@maven//:com_google_errorprone_error_prone_annotations",
108115
],
109116
)
@@ -183,6 +190,7 @@ java_library(
183190
":interpretable_attribute",
184191
":planned_interpretable",
185192
":qualifier",
193+
"//common/ast",
186194
"//runtime:interpretable",
187195
"@maven//:com_google_errorprone_error_prone_annotations",
188196
],
@@ -196,6 +204,7 @@ java_library(
196204
":planned_interpretable",
197205
":presence_test_qualifier",
198206
":qualifier",
207+
"//common/ast",
199208
"//runtime:evaluation_exception",
200209
"//runtime:interpretable",
201210
"@maven//:com_google_errorprone_error_prone_annotations",
@@ -208,6 +217,7 @@ java_library(
208217
deps = [
209218
":eval_helpers",
210219
":planned_interpretable",
220+
"//common/ast",
211221
"//common/values",
212222
"//runtime:evaluation_exception",
213223
"//runtime:interpretable",
@@ -221,6 +231,7 @@ java_library(
221231
deps = [
222232
":eval_helpers",
223233
":planned_interpretable",
234+
"//common/ast",
224235
"//common/values",
225236
"//runtime:evaluation_exception",
226237
"//runtime:interpretable",
@@ -234,6 +245,7 @@ java_library(
234245
deps = [
235246
":eval_helpers",
236247
":planned_interpretable",
248+
"//common/ast",
237249
"//common/values",
238250
"//runtime:accumulated_unknowns",
239251
"//runtime:evaluation_exception",
@@ -248,6 +260,7 @@ java_library(
248260
deps = [
249261
":eval_helpers",
250262
":planned_interpretable",
263+
"//common/ast",
251264
"//common/values",
252265
"//runtime:accumulated_unknowns",
253266
"//runtime:evaluation_exception",
@@ -262,6 +275,7 @@ java_library(
262275
deps = [
263276
":eval_helpers",
264277
":planned_interpretable",
278+
"//common/ast",
265279
"//common/exceptions:overload_not_found",
266280
"//common/values",
267281
"//runtime:accumulated_unknowns",
@@ -278,6 +292,7 @@ java_library(
278292
deps = [
279293
":eval_helpers",
280294
":planned_interpretable",
295+
"//common/ast",
281296
"//common/values",
282297
"//runtime:accumulated_unknowns",
283298
"//runtime:interpretable",
@@ -291,6 +306,7 @@ java_library(
291306
deps = [
292307
":eval_helpers",
293308
":planned_interpretable",
309+
"//common/ast",
294310
"//common/values",
295311
"//runtime:accumulated_unknowns",
296312
"//runtime:interpretable",
@@ -303,6 +319,7 @@ java_library(
303319
srcs = ["EvalConditional.java"],
304320
deps = [
305321
":planned_interpretable",
322+
"//common/ast",
306323
"//runtime:accumulated_unknowns",
307324
"//runtime:evaluation_exception",
308325
"//runtime:interpretable",
@@ -316,11 +333,11 @@ java_library(
316333
deps = [
317334
":eval_helpers",
318335
":planned_interpretable",
336+
"//common/ast",
319337
"//common/types:type_providers",
320338
"//common/values",
321339
"//common/values:cel_value_provider",
322340
"//runtime:accumulated_unknowns",
323-
"//runtime:evaluation_exception",
324341
"//runtime:interpretable",
325342
"@maven//:com_google_errorprone_error_prone_annotations",
326343
"@maven//:com_google_guava_guava",
@@ -333,8 +350,8 @@ java_library(
333350
deps = [
334351
":eval_helpers",
335352
":planned_interpretable",
353+
"//common/ast",
336354
"//runtime:accumulated_unknowns",
337-
"//runtime:evaluation_exception",
338355
"//runtime:interpretable",
339356
"@maven//:com_google_errorprone_error_prone_annotations",
340357
"@maven//:com_google_guava_guava",
@@ -348,6 +365,7 @@ java_library(
348365
":eval_helpers",
349366
":localized_evaluation_exception",
350367
":planned_interpretable",
368+
"//common/ast",
351369
"//common/exceptions:duplicate_key",
352370
"//common/exceptions:invalid_argument",
353371
"//runtime:accumulated_unknowns",
@@ -364,6 +382,7 @@ java_library(
364382
deps = [
365383
":activation_wrapper",
366384
":planned_interpretable",
385+
"//common/ast",
367386
"//common/exceptions:runtime_exception",
368387
"//common/values:mutable_map_value",
369388
"//runtime:accumulated_unknowns",
@@ -421,13 +440,16 @@ java_library(
421440
deps = [
422441
":localized_evaluation_exception",
423442
"//common:options",
443+
"//common/ast",
424444
"//common/exceptions:iteration_budget_exceeded",
425445
"//runtime:evaluation_exception",
446+
"//runtime:evaluation_listener",
426447
"//runtime:function_resolver",
427448
"//runtime:interpretable",
428449
"//runtime:partial_vars",
429450
"//runtime:resolved_overload",
430451
"@maven//:com_google_errorprone_error_prone_annotations",
452+
"@maven//:org_jspecify_jspecify",
431453
],
432454
)
433455

@@ -437,6 +459,7 @@ java_library(
437459
deps = [
438460
":eval_helpers",
439461
":planned_interpretable",
462+
"//common/ast",
440463
"//common/exceptions:overload_not_found",
441464
"//runtime:accumulated_unknowns",
442465
"//runtime:interpretable",
@@ -451,6 +474,7 @@ java_library(
451474
deps = [
452475
":eval_helpers",
453476
":planned_interpretable",
477+
"//common/ast",
454478
"//common/exceptions:overload_not_found",
455479
"//runtime:accumulated_unknowns",
456480
"//runtime:interpretable",
@@ -465,6 +489,7 @@ java_library(
465489
deps = [
466490
":eval_helpers",
467491
":planned_interpretable",
492+
"//common/ast",
468493
"//common/values",
469494
"//runtime:accumulated_unknowns",
470495
"//runtime:interpretable",
@@ -478,6 +503,7 @@ java_library(
478503
srcs = ["EvalBlock.java"],
479504
deps = [
480505
":planned_interpretable",
506+
"//common/ast",
481507
"//runtime:evaluation_exception",
482508
"//runtime:interpretable",
483509
"@maven//:com_google_errorprone_error_prone_annotations",

0 commit comments

Comments
 (0)