Skip to content

Commit 7ee0497

Browse files
l46kokcopybara-github
authored andcommitted
Implement codegen for CelLiteDescriptor
PiperOrigin-RevId: 747571815
1 parent f7db0e1 commit 7ee0497

File tree

39 files changed

+1668
-22
lines changed

39 files changed

+1668
-22
lines changed

WORKSPACE

+2-2
Original file line numberDiff line numberDiff line change
@@ -242,11 +242,11 @@ http_archive(
242242
)
243243

244244
# cel-spec api/expr canonical protos
245-
CEL_SPEC_VERSION = "0.20.0"
245+
CEL_SPEC_VERSION = "0.23.1"
246246

247247
http_archive(
248248
name = "cel_spec",
249-
sha256 = "9f4acb83116f68af8a6b6acf700561a22a1bd8a9ad2f49bf642b7f9b8f285043",
249+
sha256 = "8bafa44e610eb281df8b1268a42b5e2d7b76d60d0b3c817835cfcfd14cc2bc9c",
250250
strip_prefix = "cel-spec-" + CEL_SPEC_VERSION,
251251
urls = [
252252
"https://github.com/google/cel-spec/archive/" +

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

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ java_library(
5959
"@maven//:com_google_truth_extensions_truth_proto_extension",
6060
"@maven//:junit_junit",
6161
"@maven//:org_jspecify_jspecify",
62+
"@maven_android//:com_google_protobuf_protobuf_javalite",
6263
],
6364
)
6465

codelab/src/main/codelab/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,6 @@ java_library(
3939
"@maven//:com_google_guava_guava", # unuseddeps: keep
4040
"@maven//:com_google_protobuf_protobuf_java", # unuseddeps: keep
4141
"@maven//:com_google_protobuf_protobuf_java_util", # unuseddeps: keep
42+
"@maven_android//:com_google_protobuf_protobuf_javalite", # unuseddeps: keep
4243
],
4344
)

codelab/src/main/codelab/solutions/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,6 @@ java_library(
4040
"@maven//:com_google_guava_guava",
4141
"@maven//:com_google_protobuf_protobuf_java",
4242
"@maven//:com_google_protobuf_protobuf_java_util",
43+
"@maven_android//:com_google_protobuf_protobuf_javalite",
4344
],
4445
)

common/internal/BUILD.bazel

+5
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,8 @@ cel_android_library(
9797
name = "internal_android",
9898
exports = ["//common/src/main/java/dev/cel/common/internal:internal_android"],
9999
)
100+
101+
java_library(
102+
name = "proto_java_qualified_names",
103+
exports = ["//common/src/main/java/dev/cel/common/internal:proto_java_qualified_names"],
104+
)

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

+1
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ java_library(
208208
"@maven//:com_google_guava_guava",
209209
"@maven//:com_google_protobuf_protobuf_java",
210210
"@maven//:com_google_protobuf_protobuf_java_util",
211+
"@maven_android//:com_google_protobuf_protobuf_javalite",
211212
],
212213
)
213214

common/src/main/java/dev/cel/common/ast/BUILD.bazel

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ java_library(
5353
"@maven//:com_google_guava_guava",
5454
"@maven//:com_google_protobuf_protobuf_java",
5555
"@maven//:org_jspecify_jspecify",
56+
"@maven_android//:com_google_protobuf_protobuf_javalite",
5657
],
5758
)
5859

@@ -114,7 +115,7 @@ java_library(
114115
":ast",
115116
"//common/annotations",
116117
"@maven//:com_google_guava_guava",
117-
"@maven//:com_google_protobuf_protobuf_java",
118+
"@maven_android//:com_google_protobuf_protobuf_javalite",
118119
],
119120
)
120121

@@ -138,7 +139,6 @@ cel_android_library(
138139
"//:auto_value",
139140
"//common/annotations",
140141
"@maven//:com_google_errorprone_error_prone_annotations",
141-
"@maven//:com_google_protobuf_protobuf_java",
142142
"@maven//:org_jspecify_jspecify",
143143
"@maven_android//:com_google_guava_guava",
144144
"@maven_android//:com_google_protobuf_protobuf_javalite",

common/src/main/java/dev/cel/common/internal/BUILD.bazel

+7-3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ java_library(
4747
"@maven//:com_google_guava_guava",
4848
"@maven//:com_google_protobuf_protobuf_java",
4949
"@maven//:org_antlr_antlr4_runtime",
50+
"@maven_android//:com_google_protobuf_protobuf_javalite",
5051
],
5152
)
5253

@@ -61,7 +62,6 @@ cel_android_library(
6162
"//common/ast:ast_android",
6263
"@maven//:com_google_errorprone_error_prone_annotations",
6364
"@maven//:com_google_guava_guava",
64-
"@maven//:com_google_protobuf_protobuf_java",
6565
"@maven//:org_antlr_antlr4_runtime",
6666
"@maven_android//:com_google_guava_guava",
6767
"@maven_android//:com_google_protobuf_protobuf_javalite",
@@ -140,6 +140,7 @@ java_library(
140140
":proto_java_qualified_names",
141141
"//common/annotations",
142142
"@maven//:com_google_protobuf_protobuf_java",
143+
"@maven_android//:com_google_protobuf_protobuf_javalite",
143144
],
144145
)
145146

@@ -152,7 +153,7 @@ java_library(
152153
":reflection_util",
153154
"//common/annotations",
154155
"@maven//:com_google_guava_guava",
155-
"@maven//:com_google_protobuf_protobuf_java",
156+
"@maven_android//:com_google_protobuf_protobuf_javalite",
156157
],
157158
)
158159

@@ -174,6 +175,7 @@ java_library(
174175
"@maven//:com_google_errorprone_error_prone_annotations",
175176
"@maven//:com_google_guava_guava",
176177
"@maven//:com_google_protobuf_protobuf_java",
178+
"@maven_android//:com_google_protobuf_protobuf_javalite",
177179
],
178180
)
179181

@@ -191,6 +193,7 @@ java_library(
191193
"@maven//:com_google_errorprone_error_prone_annotations",
192194
"@maven//:com_google_guava_guava",
193195
"@maven//:com_google_protobuf_protobuf_java",
196+
"@maven_android//:com_google_protobuf_protobuf_javalite",
194197
],
195198
)
196199

@@ -207,6 +210,7 @@ java_library(
207210
"@maven//:com_google_guava_guava",
208211
"@maven//:com_google_protobuf_protobuf_java",
209212
"@maven//:org_jspecify_jspecify",
213+
"@maven_android//:com_google_protobuf_protobuf_javalite",
210214
],
211215
)
212216

@@ -245,7 +249,6 @@ java_library(
245249
"//common/annotations",
246250
"@maven//:com_google_guava_guava",
247251
"@maven//:com_google_protobuf_protobuf_java",
248-
"@maven//:org_jspecify_jspecify",
249252
],
250253
)
251254

@@ -309,6 +312,7 @@ java_library(
309312
tags = [
310313
],
311314
deps = [
315+
"//common/annotations",
312316
"@maven//:com_google_guava_guava",
313317
"@maven//:com_google_protobuf_protobuf_java",
314318
],

common/src/main/java/dev/cel/common/internal/ProtoJavaQualifiedNames.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,16 @@
2424
import com.google.protobuf.Descriptors.FileDescriptor;
2525
import com.google.protobuf.Descriptors.GenericDescriptor;
2626
import com.google.protobuf.Descriptors.ServiceDescriptor;
27+
import dev.cel.common.annotations.Internal;
2728
import java.util.ArrayDeque;
2829

29-
/** Helper class for constructing a fully qualified Java class name from a protobuf descriptor. */
30-
final class ProtoJavaQualifiedNames {
30+
/**
31+
* Helper class for constructing a fully qualified Java class name from a protobuf descriptor. * *
32+
*
33+
* <p>CEL Library Internals. Do Not Use.
34+
*/
35+
@Internal
36+
public final class ProtoJavaQualifiedNames {
3137
// Controls how many times we should recursively inspect a nested message for building fully
3238
// qualified java class name before aborting.
3339
private static final int SAFE_RECURSE_LIMIT = 50;

common/src/main/java/dev/cel/common/values/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ java_library(
121121
"@maven//:com_google_protobuf_protobuf_java",
122122
"@maven//:com_google_protobuf_protobuf_java_util",
123123
"@maven//:org_jspecify_jspecify",
124+
"@maven_android//:com_google_protobuf_protobuf_javalite",
124125
],
125126
)
126127

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

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ java_library(
3939
"@maven//:com_google_truth_extensions_truth_proto_extension",
4040
"@maven//:junit_junit",
4141
"@maven//:org_antlr_antlr4_runtime",
42+
"@maven_android//:com_google_protobuf_protobuf_javalite",
4243
],
4344
)
4445

common/src/test/java/dev/cel/common/ast/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ java_library(
3838
"@maven//:com_google_protobuf_protobuf_java",
3939
"@maven//:com_google_testparameterinjector_test_parameter_injector",
4040
"@maven//:junit_junit",
41+
"@maven_android//:com_google_protobuf_protobuf_javalite",
4142
],
4243
)
4344

common/src/test/java/dev/cel/common/internal/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ java_library(
4040
"@maven//:com_google_protobuf_protobuf_java",
4141
"@maven//:com_google_testparameterinjector_test_parameter_injector",
4242
"@maven//:junit_junit",
43+
"@maven_android//:com_google_protobuf_protobuf_javalite",
4344
],
4445
)
4546

common/src/test/java/dev/cel/common/values/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ java_library(
3333
"@maven//:com_google_protobuf_protobuf_java_util",
3434
"@maven//:com_google_testparameterinjector_test_parameter_injector",
3535
"@maven//:junit_junit",
36+
"@maven_android//:com_google_protobuf_protobuf_javalite",
3637
],
3738
)
3839

compiler/src/test/java/dev/cel/compiler/tools/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ java_library(
6767
"@maven//:com_google_guava_guava",
6868
"@maven//:com_google_protobuf_protobuf_java",
6969
"@maven//:junit_junit",
70+
"@maven_android//:com_google_protobuf_protobuf_javalite",
7071
],
7172
)
7273

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ java_library(
110110
"//runtime:function_binding",
111111
"@maven//:com_google_errorprone_error_prone_annotations",
112112
"@maven//:com_google_guava_guava",
113-
"@maven//:com_google_protobuf_protobuf_java",
113+
"@maven_android//:com_google_protobuf_protobuf_javalite",
114114
],
115115
)
116116

@@ -132,6 +132,7 @@ java_library(
132132
"//runtime:function_binding",
133133
"@maven//:com_google_guava_guava",
134134
"@maven//:com_google_protobuf_protobuf_java",
135+
"@maven_android//:com_google_protobuf_protobuf_javalite",
135136
],
136137
)
137138

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

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ java_library(
3333
"@maven//:com_google_protobuf_protobuf_java_util",
3434
"@maven//:com_google_testparameterinjector_test_parameter_injector",
3535
"@maven//:junit_junit",
36+
"@maven_android//:com_google_protobuf_protobuf_javalite",
3637
],
3738
)
3839

java_lite_proto_cel_library.bzl

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
"""Starlark rule for generating descriptors that is compatible with Protolite Messages."""
16+
17+
load("//:java_lite_proto_cel_library_impl.bzl", "java_lite_proto_cel_library_impl")
18+
load("@com_google_protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
19+
20+
def java_lite_proto_cel_library(
21+
name,
22+
java_descriptor_class_name,
23+
proto_src,
24+
debug = False):
25+
"""Generates a CelLiteDescriptor
26+
27+
Args:
28+
name: name of this target.
29+
java_descriptor_class_name: Name of the generated descriptor java class.
30+
proto_src: Name of the proto_library target.
31+
debug: (optional) If true, prints additional information during codegen for debugging purposes.
32+
"""
33+
java_proto_library_dep = name + "_java_lite_proto_dep"
34+
java_lite_proto_library(
35+
name = java_proto_library_dep,
36+
deps = [proto_src],
37+
)
38+
39+
java_lite_proto_cel_library_impl(
40+
name,
41+
java_descriptor_class_name,
42+
proto_src,
43+
java_proto_library_dep,
44+
debug,
45+
)

java_lite_proto_cel_library_impl.bzl

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
"""
16+
Starlark rule for generating descriptors that is compatible with Protolite Messages.
17+
This is an implementation detail. Clients should use 'java_lite_proto_cel_library' instead.
18+
"""
19+
20+
load("@rules_java//java:defs.bzl", "java_library")
21+
load("@rules_proto//proto:defs.bzl", "proto_descriptor_set")
22+
load("//publish:cel_version.bzl", "CEL_VERSION")
23+
load("@com_google_protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
24+
25+
def java_lite_proto_cel_library_impl(
26+
name,
27+
java_descriptor_class_name,
28+
proto_src,
29+
java_proto_library_dep,
30+
debug = False):
31+
"""Generates a CelLiteDescriptor
32+
33+
Args:
34+
name: name of this target.
35+
java_descriptor_class_name: Name of the generated descriptor java class.
36+
proto_src: Name of the proto_library target.
37+
java_proto_library_dep: (optional) Uses the provided java_lite_proto_library or java_proto_library to generate the lite descriptors. If none is provided, java_lite_proto_library is used by default behind the scenes. Most use cases should not need to provide this.
38+
debug: (optional) If true, prints additional information during codegen for debugging purposes.
39+
"""
40+
if not name:
41+
fail("You must provide a name.")
42+
43+
if not java_descriptor_class_name:
44+
fail("You must provide a descriptor_class_prefix.")
45+
46+
if not proto_src:
47+
fail("You must provide a proto_library dependency.")
48+
49+
_generate_cel_lite_descriptor_class(
50+
name,
51+
java_descriptor_class_name,
52+
proto_src,
53+
debug,
54+
)
55+
56+
if not java_proto_library_dep:
57+
java_proto_library_dep = name + "_java_lite_proto_dep"
58+
java_lite_proto_library(
59+
name = java_proto_library_dep,
60+
deps = [proto_src],
61+
)
62+
63+
descriptor_codegen_deps = [
64+
"//protobuf:cel_lite_descriptor",
65+
java_proto_library_dep,
66+
]
67+
68+
java_library(
69+
name = name,
70+
srcs = [":" + name + "_cel_lite_descriptor"],
71+
deps = descriptor_codegen_deps,
72+
)
73+
74+
def _generate_cel_lite_descriptor_class(
75+
name,
76+
descriptor_class_name,
77+
proto_src,
78+
debug):
79+
outfile = "%s.java" % descriptor_class_name
80+
81+
transitive_descriptor_set_name = "%s_transitive_descriptor_set" % name
82+
proto_descriptor_set(
83+
name = transitive_descriptor_set_name,
84+
deps = [proto_src],
85+
)
86+
87+
direct_descriptor_set_name = proto_src
88+
89+
debug_flag = "--debug" if debug else ""
90+
91+
cmd = (
92+
"$(location //protobuf:cel_lite_descriptor_generator) " +
93+
"--descriptor $(location %s) " % direct_descriptor_set_name +
94+
"--transitive_descriptor_set $(location %s) " % transitive_descriptor_set_name +
95+
"--descriptor_class_name %s " % descriptor_class_name +
96+
"--out $(location %s) " % outfile +
97+
"--version %s " % CEL_VERSION +
98+
debug_flag
99+
)
100+
101+
native.genrule(
102+
name = name + "_cel_lite_descriptor",
103+
srcs = [
104+
transitive_descriptor_set_name,
105+
direct_descriptor_set_name,
106+
],
107+
cmd = cmd,
108+
outs = [outfile],
109+
tools = ["//protobuf:cel_lite_descriptor_generator"],
110+
)

0 commit comments

Comments
 (0)