Skip to content

Commit cd05924

Browse files
l46kokcopybara-github
authored andcommitted
Consolidate function overload and resolver interfaces
PiperOrigin-RevId: 826632322
1 parent 0fb05e5 commit cd05924

23 files changed

+187
-245
lines changed

runtime/BUILD.bazel

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,6 @@ cel_android_library(
7676
exports = ["//runtime/src/main/java/dev/cel/runtime:late_function_binding_android"],
7777
)
7878

79-
java_library(
80-
name = "function_overload_impl",
81-
visibility = ["//:internal"],
82-
exports = ["//runtime/src/main/java/dev/cel/runtime:function_overload_impl"],
83-
)
84-
8579
java_library(
8680
name = "evaluation_exception_builder",
8781
exports = ["//runtime/src/main/java/dev/cel/runtime:evaluation_exception_builder"],
@@ -220,3 +214,21 @@ cel_android_library(
220214
visibility = ["//:internal"],
221215
exports = ["//runtime/src/main/java/dev/cel/runtime:lite_runtime_impl_android"],
222216
)
217+
218+
java_library(
219+
name = "resolved_overload",
220+
visibility = ["//:internal"],
221+
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload"],
222+
)
223+
224+
cel_android_library(
225+
name = "resolved_overload_android",
226+
visibility = ["//:internal"],
227+
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload_android"],
228+
)
229+
230+
java_library(
231+
name = "resolved_overload_internal",
232+
visibility = ["//:internal"],
233+
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload_internal"],
234+
)

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

Lines changed: 61 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,6 @@ FUNCTION_BINDING_SOURCES = [
5151
"FunctionBindingImpl.java",
5252
]
5353

54-
# keep sorted
55-
FUNCTION_OVERLOAD_IMPL_SOURCES = [
56-
"FunctionOverload.java",
57-
"FunctionResolver.java",
58-
"ResolvedOverload.java",
59-
]
60-
6154
# keep sorted
6255
INTERPRABLE_SOURCES = [
6356
"GlobalResolver.java",
@@ -128,10 +121,12 @@ java_library(
128121
":base",
129122
":evaluation_exception",
130123
":evaluation_exception_builder",
131-
":function_overload_impl",
124+
":resolved_overload",
125+
":resolved_overload_internal",
132126
"//:auto_value",
133127
"//common:error_codes",
134128
"//common/annotations",
129+
"//runtime:function_resolver",
135130
"@maven//:com_google_code_findbugs_annotations",
136131
"@maven//:com_google_errorprone_error_prone_annotations",
137132
"@maven//:com_google_guava_guava",
@@ -146,7 +141,9 @@ cel_android_library(
146141
":base_android",
147142
":evaluation_exception",
148143
":evaluation_exception_builder",
149-
":function_overload_impl_android",
144+
":function_resolver_android",
145+
":resolved_overload_android",
146+
":resolved_overload_internal_android",
150147
"//:auto_value",
151148
"//common:error_codes",
152149
"//common/annotations",
@@ -250,7 +247,7 @@ java_library(
250247
tags = [
251248
],
252249
deps = [
253-
":function_overload_impl",
250+
":function_overload",
254251
":metadata",
255252
"//common:cel_ast",
256253
"//common/annotations",
@@ -264,11 +261,10 @@ cel_android_library(
264261
srcs = BASE_SOURCES,
265262
visibility = ["//visibility:private"],
266263
deps = [
267-
":function_overload_impl_android",
264+
":function_overload_android",
268265
":metadata",
269266
"//common:cel_ast_android",
270267
"//common/annotations",
271-
"@maven//:com_google_code_findbugs_annotations",
272268
"@maven//:com_google_errorprone_error_prone_annotations",
273269
"@maven_android//:com_google_guava_guava",
274270
],
@@ -288,10 +284,10 @@ java_library(
288284
":evaluation_exception",
289285
":evaluation_exception_builder",
290286
":evaluation_listener",
291-
":function_overload_impl",
292287
":interpretable",
293288
":interpreter_util",
294289
":metadata",
290+
":resolved_overload_internal",
295291
":runtime_helpers",
296292
":runtime_type_provider",
297293
":type_resolver",
@@ -306,6 +302,7 @@ java_library(
306302
"//common/types",
307303
"//common/types:type_providers",
308304
"//common/values:cel_byte_string",
305+
"//runtime:function_resolver",
309306
"@maven//:com_google_code_findbugs_annotations",
310307
"@maven//:com_google_errorprone_error_prone_annotations",
311308
"@maven//:com_google_guava_guava",
@@ -326,10 +323,11 @@ cel_android_library(
326323
":evaluation_exception",
327324
":evaluation_exception_builder",
328325
":evaluation_listener_android",
329-
":function_overload_impl_android",
326+
":function_resolver_android",
330327
":interpretable_android",
331328
":interpreter_util_android",
332329
":metadata",
330+
":resolved_overload_internal_android",
333331
":runtime_helpers_android",
334332
":runtime_type_provider_android",
335333
":type_resolver_android",
@@ -486,7 +484,6 @@ RUNTIME_SOURCES = [
486484

487485
LATE_FUNCTION_BINDING_SOURCES = [
488486
"CelLateFunctionBindings.java",
489-
"CelResolvedOverload.java",
490487
]
491488

492489
java_library(
@@ -498,9 +495,9 @@ java_library(
498495
":dispatcher",
499496
":evaluation_exception",
500497
":function_binding",
501-
":function_overload",
502-
":function_overload_impl",
503498
":function_resolver",
499+
":resolved_overload",
500+
":resolved_overload_internal",
504501
"//:auto_value",
505502
"@maven//:com_google_errorprone_error_prone_annotations",
506503
"@maven//:com_google_guava_guava",
@@ -516,9 +513,9 @@ cel_android_library(
516513
":dispatcher_android",
517514
":evaluation_exception",
518515
":function_binding_android",
519-
":function_overload_android",
520-
":function_overload_impl_android",
521516
":function_resolver_android",
517+
":resolved_overload_android",
518+
":resolved_overload_internal_android",
522519
"//:auto_value",
523520
"@maven//:com_google_errorprone_error_prone_annotations",
524521
"@maven_android//:com_google_guava_guava",
@@ -586,8 +583,8 @@ java_library(
586583
deps = [
587584
":evaluation_exception",
588585
":evaluation_listener",
589-
":function_overload_impl",
590586
"//common/annotations",
587+
"//runtime:function_resolver",
591588
"@maven//:com_google_errorprone_error_prone_annotations",
592589
"@maven//:org_jspecify_jspecify",
593590
],
@@ -600,7 +597,7 @@ cel_android_library(
600597
deps = [
601598
":evaluation_exception",
602599
":evaluation_listener_android",
603-
":function_overload_impl_android",
600+
":function_resolver_android",
604601
"//common/annotations",
605602
"@maven//:com_google_errorprone_error_prone_annotations",
606603
"@maven//:org_jspecify_jspecify",
@@ -652,6 +649,7 @@ java_library(
652649
"//runtime/standard:not_equals",
653650
"//runtime/standard:size",
654651
"//runtime/standard:standard_function",
652+
"//runtime/standard:standard_overload",
655653
"//runtime/standard:starts_with",
656654
"//runtime/standard:string",
657655
"//runtime/standard:subtract",
@@ -707,6 +705,7 @@ cel_android_library(
707705
"//runtime/standard:not_equals_android",
708706
"//runtime/standard:size_android",
709707
"//runtime/standard:standard_function_android",
708+
"//runtime/standard:standard_overload_android",
710709
"//runtime/standard:starts_with_android",
711710
"//runtime/standard:string_android",
712711
"//runtime/standard:subtract_android",
@@ -751,7 +750,8 @@ java_library(
751750
tags = [
752751
],
753752
deps = [
754-
":function_overload_impl",
753+
":evaluation_exception",
754+
":resolved_overload_internal",
755755
"@maven//:com_google_code_findbugs_annotations",
756756
"@maven//:com_google_errorprone_error_prone_annotations",
757757
],
@@ -761,7 +761,8 @@ cel_android_library(
761761
name = "function_resolver_android",
762762
srcs = ["CelFunctionResolver.java"],
763763
deps = [
764-
":function_overload_impl_android",
764+
":evaluation_exception",
765+
":resolved_overload_internal_android",
765766
"@maven//:com_google_code_findbugs_annotations",
766767
"@maven//:com_google_errorprone_error_prone_annotations",
767768
],
@@ -775,7 +776,7 @@ java_library(
775776
tags = [
776777
],
777778
deps = [
778-
":function_overload_impl",
779+
":evaluation_exception",
779780
"@maven//:com_google_errorprone_error_prone_annotations",
780781
],
781782
)
@@ -786,31 +787,30 @@ cel_android_library(
786787
"CelFunctionOverload.java",
787788
],
788789
deps = [
789-
":function_overload_impl_android",
790+
":evaluation_exception",
790791
"@maven//:com_google_errorprone_error_prone_annotations",
791792
],
792793
)
793794

794795
java_library(
795-
name = "function_overload_impl",
796-
srcs = FUNCTION_OVERLOAD_IMPL_SOURCES,
796+
name = "resolved_overload_internal",
797+
srcs = ["ResolvedOverload.java"],
797798
tags = [
798799
],
799800
deps = [
800-
":evaluation_exception",
801-
"//common/annotations",
801+
":function_overload",
802802
"@maven//:com_google_code_findbugs_annotations",
803803
"@maven//:com_google_errorprone_error_prone_annotations",
804804
"@maven//:com_google_protobuf_protobuf_java",
805805
],
806806
)
807807

808808
cel_android_library(
809-
name = "function_overload_impl_android",
810-
srcs = FUNCTION_OVERLOAD_IMPL_SOURCES,
809+
name = "resolved_overload_internal_android",
810+
srcs = ["ResolvedOverload.java"],
811+
visibility = ["//visibility:private"],
811812
deps = [
812-
":evaluation_exception",
813-
"//common/annotations",
813+
":function_overload_android",
814814
"@maven//:com_google_code_findbugs_annotations",
815815
"@maven//:com_google_errorprone_error_prone_annotations",
816816
"@maven_android//:com_google_protobuf_protobuf_javalite",
@@ -1167,3 +1167,31 @@ cel_android_library(
11671167
"@maven//:com_google_errorprone_error_prone_annotations",
11681168
],
11691169
)
1170+
1171+
java_library(
1172+
name = "resolved_overload",
1173+
srcs = ["CelResolvedOverload.java"],
1174+
tags = [
1175+
],
1176+
deps = [
1177+
":function_overload",
1178+
":resolved_overload_internal",
1179+
"//:auto_value",
1180+
"@maven//:com_google_errorprone_error_prone_annotations",
1181+
"@maven//:com_google_guava_guava",
1182+
],
1183+
)
1184+
1185+
cel_android_library(
1186+
name = "resolved_overload_android",
1187+
srcs = ["CelResolvedOverload.java"],
1188+
tags = [
1189+
],
1190+
deps = [
1191+
":function_overload_android",
1192+
":resolved_overload_internal_android",
1193+
"//:auto_value",
1194+
"@maven//:com_google_errorprone_error_prone_annotations",
1195+
"@maven_android//:com_google_guava_guava",
1196+
],
1197+
)

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,28 @@
1919
/** Interface describing the general signature of all CEL custom function implementations. */
2020
@Immutable
2121
@FunctionalInterface
22-
public interface CelFunctionOverload extends FunctionOverload {
22+
public interface CelFunctionOverload {
23+
24+
/** Evaluate a set of arguments throwing a {@code CelException} on error. */
25+
Object apply(Object[] args) throws CelEvaluationException;
2326

2427
/**
2528
* Helper interface for describing unary functions where the type-parameter is used to improve
2629
* compile-time correctness of function bindings.
2730
*/
2831
@Immutable
2932
@FunctionalInterface
30-
interface Unary<T> extends FunctionOverload.Unary<T> {}
33+
interface Unary<T> {
34+
Object apply(T arg) throws CelEvaluationException;
35+
}
3136

3237
/**
3338
* Helper interface for describing binary functions where the type parameters are used to improve
3439
* compile-time correctness of function bindings.
3540
*/
3641
@Immutable
3742
@FunctionalInterface
38-
interface Binary<T1, T2> extends FunctionOverload.Binary<T1, T2> {}
43+
interface Binary<T1, T2> {
44+
Object apply(T1 arg1, T2 arg2) throws CelEvaluationException;
45+
}
3946
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,26 @@
1515
package dev.cel.runtime;
1616

1717
import javax.annotation.concurrent.ThreadSafe;
18+
import java.util.List;
19+
import java.util.Optional;
1820

1921
/**
2022
* Interface to a resolver for CEL functions based on the function name, overload ids, and
2123
* arguments.
2224
*/
2325
@ThreadSafe
24-
public interface CelFunctionResolver extends FunctionResolver {}
26+
public interface CelFunctionResolver {
27+
28+
/**
29+
* Finds a specific function overload to invoke based on given parameters.
30+
*
31+
* @param functionName the logical name of the function being invoked.
32+
* @param overloadIds A list of function overload ids. The dispatcher selects the unique overload
33+
* from this list with matching arguments.
34+
* @param args The arguments to pass to the function.
35+
* @return an optional value of the resolved overload.
36+
* @throws CelEvaluationException if the overload resolution is ambiguous,
37+
*/
38+
Optional<ResolvedOverload> findOverload(
39+
String functionName, List<String> overloadIds, Object[] args) throws CelEvaluationException;
40+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static CelLateFunctionBindings from(List<CelFunctionBinding> functions) {
5757
private static ResolvedOverload createResolvedOverload(CelFunctionBinding binding) {
5858
return CelResolvedOverload.of(
5959
binding.getOverloadId(),
60-
binding.getArgTypes(),
61-
(args) -> binding.getDefinition().apply(args));
60+
(args) -> binding.getDefinition().apply(args),
61+
binding.getArgTypes());
6262
}
6363
}

0 commit comments

Comments
 (0)