Skip to content

Commit 928165c

Browse files
l46kokcopybara-github
authored andcommitted
Expose Late function bindings target for Android.
Includes miscellaneous fixes to make CEL-Java runnable on Android. PiperOrigin-RevId: 759185242
1 parent 66c6f46 commit 928165c

File tree

10 files changed

+86
-4
lines changed

10 files changed

+86
-4
lines changed

bundle/src/test/java/dev/cel/bundle/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ java_library(
4747
"//runtime:evaluation_exception_builder",
4848
"//runtime:evaluation_listener",
4949
"//runtime:function_binding",
50+
"//runtime:late_function_binding",
5051
"//runtime:unknown_attributes",
5152
"@cel_spec//proto/cel/expr:checked_java_proto",
5253
"@cel_spec//proto/cel/expr:syntax_java_proto",

java_lite_proto_cel_library.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def java_lite_proto_cel_library(
4747
java_lite_proto_cel_library_impl(
4848
name = name,
4949
deps = deps,
50+
# used_by_android
5051
java_descriptor_class_suffix = java_descriptor_class_suffix,
5152
java_proto_library_dep = java_proto_library_dep,
5253
debug = debug,

java_lite_proto_cel_library_impl.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def java_lite_proto_cel_library_impl(
2626
name,
2727
deps,
2828
java_proto_library_dep,
29+
constraints = [],
2930
java_descriptor_class_suffix = None,
3031
debug = False):
3132
"""Generates a CelLiteDescriptor
@@ -35,6 +36,7 @@ def java_lite_proto_cel_library_impl(
3536
deps: The list of proto_library rules to generate Java code for.
3637
java_descriptor_class_suffix (optional): Suffix for the Java class name of the generated CEL lite descriptor.
3738
Default is "CelLiteDescriptor".
39+
constraints: (optional) List of strings that denote which environment the produced java_library label is associated in.
3840
java_proto_library_dep: (optional) Uses the provided java_lite_proto_library or java_proto_library to generate the lite descriptors.
3941
If none is provided, java_lite_proto_library is used by default behind the scenes. Most use cases should not need to provide this.
4042
debug: (optional) If true, prints additional information during codegen for debugging purposes.
@@ -69,6 +71,7 @@ def java_lite_proto_cel_library_impl(
6971
name = name,
7072
srcs = [":" + generated],
7173
deps = descriptor_codegen_deps,
74+
javacopts = ["-Xep:PackageLocation:OFF"], # TODO: Add generated annotation
7275
)
7376

7477
def _generate_cel_lite_descriptor_class(ctx):

policy/src/test/java/dev/cel/policy/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ java_library(
3333
"//policy:validation_exception",
3434
"//runtime",
3535
"//runtime:function_binding",
36+
"//runtime:late_function_binding",
3637
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
3738
"@maven//:com_google_guava_guava",
3839
"@maven//:com_google_testparameterinjector_test_parameter_injector",

protobuf/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package(
88
java_library(
99
name = "cel_lite_descriptor",
1010
# used_by_android
11+
visibility = ["//:android_allow_list"],
1112
exports = ["//protobuf/src/main/java/dev/cel/protobuf:cel_lite_descriptor"],
1213
)
1314

runtime/BUILD.bazel

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ java_library(
1010
name = "runtime",
1111
exports = [
1212
":evaluation_exception",
13+
":late_function_binding",
1314
"//runtime/src/main/java/dev/cel/runtime",
1415
"//runtime/src/main/java/dev/cel/runtime:descriptor_message_provider",
1516
"//runtime/src/main/java/dev/cel/runtime:function_overload",
@@ -59,6 +60,16 @@ cel_android_library(
5960
exports = ["//runtime/src/main/java/dev/cel/runtime:function_binding_android"],
6061
)
6162

63+
java_library(
64+
name = "late_function_binding",
65+
exports = ["//runtime/src/main/java/dev/cel/runtime:late_function_binding"],
66+
)
67+
68+
cel_android_library(
69+
name = "late_function_binding_android",
70+
exports = ["//runtime/src/main/java/dev/cel/runtime:late_function_binding_android"],
71+
)
72+
6273
java_library(
6374
name = "function_overload_impl",
6475
# used_by_android
@@ -85,6 +96,7 @@ java_library(
8596

8697
java_library(
8798
name = "evaluation_exception",
99+
# used_by_android
88100
exports = ["//runtime/src/main/java/dev/cel/runtime:evaluation_exception"],
89101
)
90102

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

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -451,8 +451,6 @@ java_library(
451451

452452
# keep sorted
453453
RUNTIME_SOURCES = [
454-
"CelLateFunctionBindings.java",
455-
"CelResolvedOverload.java",
456454
"CelRuntime.java",
457455
"CelRuntimeBuilder.java",
458456
"CelRuntimeFactory.java",
@@ -463,6 +461,47 @@ RUNTIME_SOURCES = [
463461
"UnknownContext.java",
464462
]
465463

464+
LATE_FUNCTION_BINDING_SOURCES = [
465+
"CelLateFunctionBindings.java",
466+
"CelResolvedOverload.java",
467+
]
468+
469+
java_library(
470+
name = "late_function_binding",
471+
srcs = LATE_FUNCTION_BINDING_SOURCES,
472+
tags = [
473+
],
474+
deps = [
475+
":dispatcher",
476+
":evaluation_exception",
477+
":function_binding",
478+
":function_overload",
479+
":function_overload_impl",
480+
":function_resolver",
481+
"//:auto_value",
482+
"@maven//:com_google_errorprone_error_prone_annotations",
483+
"@maven//:com_google_guava_guava",
484+
],
485+
)
486+
487+
cel_android_library(
488+
name = "late_function_binding_android",
489+
srcs = LATE_FUNCTION_BINDING_SOURCES,
490+
tags = [
491+
],
492+
deps = [
493+
":dispatcher_android",
494+
":evaluation_exception",
495+
":function_binding_android",
496+
":function_overload",
497+
":function_overload_impl",
498+
":function_resolver",
499+
"//:auto_value",
500+
"@maven//:com_google_errorprone_error_prone_annotations",
501+
"@maven_android//:com_google_guava_guava",
502+
],
503+
)
504+
466505
java_library(
467506
name = "lite_runtime_library",
468507
srcs = ["CelLiteRuntimeLibrary.java"],
@@ -677,8 +716,6 @@ java_library(
677716
":evaluation_exception",
678717
":evaluation_listener",
679718
":function_binding",
680-
":function_overload",
681-
":function_overload_impl",
682719
":function_resolver",
683720
":interpretable",
684721
":interpreter",

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ java_library(
231231
"//runtime:interpretable",
232232
"//runtime:interpreter",
233233
"//runtime:interpreter_util",
234+
"//runtime:late_function_binding",
234235
"//runtime:lite_runtime",
235236
"//runtime:lite_runtime_factory",
236237
"//runtime:proto_message_activation_factory",
@@ -307,6 +308,7 @@ cel_android_local_test(
307308
"//extensions:sets_function",
308309
"//runtime:evaluation_exception",
309310
"//runtime:function_binding_android",
311+
"//runtime:late_function_binding_android",
310312
"//runtime:lite_runtime_android",
311313
"//runtime:lite_runtime_factory_android",
312314
"//runtime:lite_runtime_impl_android",

runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeAndroidTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,29 @@ public void eval_customFunctions() throws Exception {
274274
assertThat(result).isTrue();
275275
}
276276

277+
@Test
278+
@SuppressWarnings("rawtypes")
279+
public void eval_customFunctions_asLateBoundFunctions() throws Exception {
280+
CelLiteRuntime runtime =
281+
CelLiteRuntimeFactory.newLiteRuntimeBuilder()
282+
.addFunctionBindings(CelFunctionBinding.from("list_isEmpty", List.class, List::isEmpty))
283+
.setStandardFunctions(CelStandardFunctions.newBuilder().build())
284+
.build();
285+
// Expr: ''.isEmpty() && [].isEmpty()
286+
CelAbstractSyntaxTree ast = readCheckedExpr("compiled_custom_functions");
287+
Program program = runtime.createProgram(ast);
288+
289+
boolean result =
290+
(boolean)
291+
program.eval(
292+
ImmutableMap.of(),
293+
CelLateFunctionBindings.from(
294+
CelFunctionBinding.from("string_isEmpty", String.class, String::isEmpty),
295+
CelFunctionBinding.from("list_isEmpty", List.class, List::isEmpty)));
296+
297+
assertThat(result).isTrue();
298+
}
299+
277300
@Test
278301
@TestParameters("{checkedExpr: 'compiled_proto2_select_primitives'}")
279302
@TestParameters("{checkedExpr: 'compiled_proto3_select_primitives'}")

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ java_library(
109109
"//extensions:optional_library",
110110
"//runtime",
111111
"//runtime:function_binding",
112+
"//runtime:late_function_binding",
112113
"//runtime:unknown_attributes",
113114
"@cel_spec//proto/cel/expr:checked_java_proto",
114115
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",

0 commit comments

Comments
 (0)