Skip to content

Commit f1873d6

Browse files
l46kokcopybara-github
authored andcommitted
Internal Changes
PiperOrigin-RevId: 711534576
1 parent f1efc00 commit f1873d6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+3421
-261
lines changed

WORKSPACE

Lines changed: 2 additions & 2 deletions
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.22.1"
246246

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

common/internal/BUILD.bazel

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ java_library(
7272
exports = ["//common/src/main/java/dev/cel/common/internal:well_known_proto"],
7373
)
7474

75+
cel_android_library(
76+
name = "well_known_proto_android",
77+
exports = ["//common/src/main/java/dev/cel/common/internal:well_known_proto_android"],
78+
)
79+
7580
java_library(
7681
name = "proto_message_factory",
7782
exports = ["//common/src/main/java/dev/cel/common/internal:proto_message_factory"],
@@ -87,6 +92,26 @@ java_library(
8792
exports = ["//common/src/main/java/dev/cel/common/internal:cel_descriptor_pools"],
8893
)
8994

95+
java_library(
96+
name = "cel_lite_descriptor_pool",
97+
exports = ["//common/src/main/java/dev/cel/common/internal:cel_lite_descriptor_pool"],
98+
)
99+
100+
cel_android_library(
101+
name = "cel_lite_descriptor_pool_android",
102+
exports = ["//common/src/main/java/dev/cel/common/internal:cel_lite_descriptor_pool_android"],
103+
)
104+
105+
java_library(
106+
name = "default_lite_descriptor_pool",
107+
exports = ["//common/src/main/java/dev/cel/common/internal:default_lite_descriptor_pool"],
108+
)
109+
110+
cel_android_library(
111+
name = "default_lite_descriptor_pool_android",
112+
exports = ["//common/src/main/java/dev/cel/common/internal:default_lite_descriptor_pool_android"],
113+
)
114+
90115
java_library(
91116
name = "safe_string_formatter",
92117
# used_by_android
@@ -95,6 +120,16 @@ java_library(
95120

96121
cel_android_library(
97122
name = "internal_android",
98-
visibility = ["//:android_allow_list"],
99123
exports = ["//common/src/main/java/dev/cel/common/internal:internal_android"],
100124
)
125+
126+
java_library(
127+
name = "proto_java_qualified_names",
128+
exports = ["//common/src/main/java/dev/cel/common/internal:proto_java_qualified_names"],
129+
)
130+
131+
java_library(
132+
name = "reflection_util",
133+
# used_by_android
134+
exports = ["//common/src/main/java/dev/cel/common/internal:reflection_util"],
135+
)

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

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,19 @@ java_library(
249249
],
250250
)
251251

252+
cel_android_library(
253+
name = "well_known_proto_android",
254+
srcs = ["WellKnownProto.java"],
255+
tags = [
256+
],
257+
deps = [
258+
"//common/annotations",
259+
"@maven//:org_jspecify_jspecify",
260+
"@maven_android//:com_google_guava_guava",
261+
"@maven_android//:com_google_protobuf_protobuf_javalite",
262+
],
263+
)
264+
252265
java_library(
253266
name = "default_message_factory",
254267
srcs = ["DefaultMessageFactory.java"],
@@ -291,6 +304,62 @@ java_library(
291304
],
292305
)
293306

307+
java_library(
308+
name = "cel_lite_descriptor_pool",
309+
srcs = ["CelLiteDescriptorPool.java"],
310+
tags = [
311+
],
312+
deps = [
313+
"//protobuf:cel_lite_descriptor",
314+
"@maven//:com_google_errorprone_error_prone_annotations",
315+
"@maven//:com_google_protobuf_protobuf_java",
316+
],
317+
)
318+
319+
cel_android_library(
320+
name = "cel_lite_descriptor_pool_android",
321+
srcs = ["CelLiteDescriptorPool.java"],
322+
tags = [
323+
],
324+
deps = [
325+
"//protobuf:cel_lite_descriptor",
326+
"@maven//:com_google_errorprone_error_prone_annotations",
327+
"@maven//:com_google_protobuf_protobuf_java",
328+
],
329+
)
330+
331+
java_library(
332+
name = "default_lite_descriptor_pool",
333+
srcs = ["DefaultLiteDescriptorPool.java"],
334+
tags = [
335+
],
336+
deps = [
337+
":cel_lite_descriptor_pool",
338+
"//common/annotations",
339+
"//common/internal:well_known_proto",
340+
"//protobuf:cel_lite_descriptor",
341+
"@maven//:com_google_errorprone_error_prone_annotations",
342+
"@maven//:com_google_guava_guava",
343+
"@maven//:com_google_protobuf_protobuf_java",
344+
],
345+
)
346+
347+
cel_android_library(
348+
name = "default_lite_descriptor_pool_android",
349+
srcs = ["DefaultLiteDescriptorPool.java"],
350+
tags = [
351+
],
352+
deps = [
353+
":cel_lite_descriptor_pool_android",
354+
"//common/annotations",
355+
"//common/internal:well_known_proto_android",
356+
"//protobuf:cel_lite_descriptor",
357+
"@maven//:com_google_errorprone_error_prone_annotations",
358+
"@maven//:com_google_protobuf_protobuf_java",
359+
"@maven_android//:com_google_guava_guava",
360+
],
361+
)
362+
294363
java_library(
295364
name = "safe_string_formatter",
296365
srcs = ["SafeStringFormatter.java"],
@@ -309,6 +378,7 @@ java_library(
309378
tags = [
310379
],
311380
deps = [
381+
"//common/annotations",
312382
"@maven//:com_google_guava_guava",
313383
"@maven//:com_google_protobuf_protobuf_java",
314384
],
@@ -317,6 +387,7 @@ java_library(
317387
java_library(
318388
name = "reflection_util",
319389
srcs = ["ReflectionUtil.java"],
390+
# used_by_android
320391
deps = [
321392
"//common/annotations",
322393
],
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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+
package dev.cel.common.internal;
16+
17+
import com.google.errorprone.annotations.Immutable;
18+
import com.google.protobuf.MessageLite;
19+
import dev.cel.protobuf.CelLiteDescriptor.MessageLiteDescriptor;
20+
import java.util.Optional;
21+
22+
/** TODO: Replace with CelLiteDescriptor */
23+
@Immutable
24+
public interface CelLiteDescriptorPool {
25+
Optional<MessageLiteDescriptor> findDescriptorByTypeName(String protoTypeName);
26+
27+
Optional<MessageLiteDescriptor> findDescriptor(MessageLite msg);
28+
}
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
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+
package dev.cel.common.internal;
16+
17+
import com.google.common.collect.ImmutableMap;
18+
import com.google.common.collect.ImmutableSet;
19+
import com.google.errorprone.annotations.Immutable;
20+
import com.google.protobuf.MessageLite;
21+
import dev.cel.common.annotations.Internal;
22+
import dev.cel.protobuf.CelLiteDescriptor;
23+
import dev.cel.protobuf.CelLiteDescriptor.FieldDescriptor;
24+
import dev.cel.protobuf.CelLiteDescriptor.MessageLiteDescriptor;
25+
import java.util.Optional;
26+
27+
/** Descriptor pool for {@link CelLiteDescriptor}s. */
28+
@Immutable
29+
@Internal
30+
public final class DefaultLiteDescriptorPool implements CelLiteDescriptorPool {
31+
private final ImmutableMap<String, MessageLiteDescriptor> protoFqnToMessageInfo;
32+
private final ImmutableMap<String, MessageLiteDescriptor> protoJavaClassNameToMessageInfo;
33+
34+
public static DefaultLiteDescriptorPool newInstance(ImmutableSet<CelLiteDescriptor> descriptors) {
35+
return new DefaultLiteDescriptorPool(descriptors);
36+
}
37+
38+
@Override
39+
public Optional<MessageLiteDescriptor> findDescriptorByTypeName(String protoTypeName) {
40+
return Optional.ofNullable(protoFqnToMessageInfo.get(protoTypeName));
41+
}
42+
43+
@Override
44+
public Optional<MessageLiteDescriptor> findDescriptor(MessageLite msg) {
45+
String className = msg.getClass().getName();
46+
return Optional.ofNullable(protoJavaClassNameToMessageInfo.get(className));
47+
}
48+
49+
private static MessageLiteDescriptor newMessageInfo(WellKnownProto wellKnownProto) {
50+
ImmutableMap.Builder<String, FieldDescriptor> fieldInfoMap = ImmutableMap.builder();
51+
switch (wellKnownProto) {
52+
case JSON_STRUCT_VALUE:
53+
fieldInfoMap.put(
54+
"fields",
55+
new FieldDescriptor(
56+
"google.protobuf.Struct.fields",
57+
"MESSAGE",
58+
"Fields",
59+
FieldDescriptor.CelFieldValueType.MAP.toString(),
60+
FieldDescriptor.Type.MESSAGE.toString(),
61+
String.valueOf(false),
62+
"com.google.protobuf.Struct$FieldsEntry",
63+
"google.protobuf.Struct.FieldsEntry"));
64+
break;
65+
case BOOL_VALUE:
66+
fieldInfoMap.put(
67+
"value",
68+
newPrimitiveFieldInfo(
69+
"google.protobuf.BoolValue",
70+
"BOOLEAN",
71+
FieldDescriptor.CelFieldValueType.SCALAR,
72+
FieldDescriptor.Type.BOOL));
73+
break;
74+
case BYTES_VALUE:
75+
fieldInfoMap.put(
76+
"value",
77+
newPrimitiveFieldInfo(
78+
"google.protobuf.BytesValue",
79+
"BYTE_STRING",
80+
FieldDescriptor.CelFieldValueType.SCALAR,
81+
FieldDescriptor.Type.BYTES));
82+
break;
83+
case DOUBLE_VALUE:
84+
fieldInfoMap.put(
85+
"value",
86+
newPrimitiveFieldInfo(
87+
"google.protobuf.DoubleValue",
88+
"DOUBLE",
89+
FieldDescriptor.CelFieldValueType.SCALAR,
90+
FieldDescriptor.Type.DOUBLE));
91+
break;
92+
case FLOAT_VALUE:
93+
fieldInfoMap.put(
94+
"value",
95+
newPrimitiveFieldInfo(
96+
"google.protobuf.FloatValue",
97+
"FLOAT",
98+
FieldDescriptor.CelFieldValueType.SCALAR,
99+
FieldDescriptor.Type.FLOAT));
100+
break;
101+
case INT32_VALUE:
102+
fieldInfoMap.put(
103+
"value",
104+
newPrimitiveFieldInfo(
105+
"google.protobuf.Int32Value",
106+
"INT",
107+
FieldDescriptor.CelFieldValueType.SCALAR,
108+
FieldDescriptor.Type.INT32));
109+
break;
110+
case INT64_VALUE:
111+
fieldInfoMap.put(
112+
"value",
113+
newPrimitiveFieldInfo(
114+
"google.protobuf.Int64Value",
115+
"LONG",
116+
FieldDescriptor.CelFieldValueType.SCALAR,
117+
FieldDescriptor.Type.INT64));
118+
break;
119+
case STRING_VALUE:
120+
fieldInfoMap.put(
121+
"value",
122+
newPrimitiveFieldInfo(
123+
"google.protobuf.StringValue",
124+
"STRING",
125+
FieldDescriptor.CelFieldValueType.SCALAR,
126+
FieldDescriptor.Type.STRING));
127+
break;
128+
case UINT32_VALUE:
129+
fieldInfoMap.put(
130+
"value",
131+
newPrimitiveFieldInfo(
132+
"google.protobuf.UInt32Value",
133+
"INT",
134+
FieldDescriptor.CelFieldValueType.SCALAR,
135+
FieldDescriptor.Type.UINT32));
136+
break;
137+
case UINT64_VALUE:
138+
fieldInfoMap.put(
139+
"value",
140+
newPrimitiveFieldInfo(
141+
"google.protobuf.UInt64Value",
142+
"LONG",
143+
FieldDescriptor.CelFieldValueType.SCALAR,
144+
FieldDescriptor.Type.UINT64));
145+
break;
146+
case JSON_VALUE:
147+
case JSON_LIST_VALUE:
148+
case DURATION:
149+
case TIMESTAMP:
150+
// TODO: Complete these
151+
break;
152+
default:
153+
break;
154+
}
155+
156+
return new MessageLiteDescriptor(
157+
wellKnownProto.typeName(), wellKnownProto.javaClassName(), fieldInfoMap.buildOrThrow());
158+
}
159+
160+
private static FieldDescriptor newPrimitiveFieldInfo(
161+
String fullyQualifiedProtoName,
162+
String javaTypeName,
163+
FieldDescriptor.CelFieldValueType valueType,
164+
FieldDescriptor.Type protoFieldType) {
165+
return new FieldDescriptor(
166+
fullyQualifiedProtoName + ".value",
167+
javaTypeName,
168+
"Value",
169+
valueType.toString(),
170+
protoFieldType.toString(),
171+
String.valueOf(false),
172+
"",
173+
fullyQualifiedProtoName);
174+
}
175+
176+
private DefaultLiteDescriptorPool(ImmutableSet<CelLiteDescriptor> descriptors) {
177+
ImmutableMap.Builder<String, MessageLiteDescriptor> protoFqnMapBuilder = ImmutableMap.builder();
178+
ImmutableMap.Builder<String, MessageLiteDescriptor> protoJavaClassNameMapBuilder =
179+
ImmutableMap.builder();
180+
for (WellKnownProto wellKnownProto : WellKnownProto.values()) {
181+
MessageLiteDescriptor wktMessageInfo = newMessageInfo(wellKnownProto);
182+
protoFqnMapBuilder.put(wellKnownProto.typeName(), wktMessageInfo);
183+
protoJavaClassNameMapBuilder.put(wellKnownProto.javaClassName(), wktMessageInfo);
184+
}
185+
186+
for (CelLiteDescriptor descriptor : descriptors) {
187+
protoFqnMapBuilder.putAll(descriptor.getProtoTypeNamesToDescriptors());
188+
protoJavaClassNameMapBuilder.putAll(descriptor.getProtoJavaClassNameToDescriptors());
189+
}
190+
191+
this.protoFqnToMessageInfo = protoFqnMapBuilder.buildOrThrow();
192+
this.protoJavaClassNameToMessageInfo = protoJavaClassNameMapBuilder.buildOrThrow();
193+
}
194+
}

0 commit comments

Comments
 (0)