Skip to content

Commit 9b1d429

Browse files
l46kokcopybara-github
authored andcommitted
Internal Changes
PiperOrigin-RevId: 711534576
1 parent a1a77dc commit 9b1d429

Some content is hidden

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

44 files changed

+3678
-780
lines changed

WORKSPACE

+11-6
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
119119
rules_jvm_external_setup()
120120

121121
load("@rules_jvm_external//:defs.bzl", "maven_install")
122+
load("//:maven_utils.bzl", "maven_artifact_compile_only", "maven_artifact_test_only")
122123

123124
### end of rules_jvm_external setup
124125

@@ -129,22 +130,26 @@ maven_install(
129130
artifacts = [
130131
"com.google.auto.value:auto-value:1.11.0",
131132
"com.google.auto.value:auto-value-annotations:1.11.0",
132-
"com.google.code.findbugs:annotations:3.0.1",
133-
"com.google.errorprone:error_prone_annotations:2.36.0",
134133
"com.google.guava:guava:33.4.0-jre",
135134
"com.google.guava:guava-testlib:33.4.0-jre",
136135
"com.google.protobuf:protobuf-java:4.29.3",
137136
"com.google.protobuf:protobuf-java-util:4.29.3",
138137
"com.google.re2j:re2j:1.8",
139-
"com.google.testparameterinjector:test-parameter-injector:1.18",
140-
"com.google.truth.extensions:truth-java8-extension:1.4.4",
141-
"com.google.truth.extensions:truth-proto-extension:1.4.4",
142-
"com.google.truth:truth:1.4.4",
143138
"info.picocli:picocli:4.7.6",
144139
"org.antlr:antlr4-runtime:" + ANTLR4_VERSION,
140+
"info.picocli:picocli:4.7.6",
141+
"javax.annotation:javax.annotation-api:1.3.2",
142+
"org.freemarker:freemarker:2.3.33",
145143
"org.jspecify:jspecify:1.0.0",
146144
"org.threeten:threeten-extra:1.8.0",
147145
"org.yaml:snakeyaml:2.3",
146+
maven_artifact_test_only("com.google.testparameterinjector", "test-parameter-injector", "1.18"),
147+
maven_artifact_test_only("com.google.truth", "truth", "1.4.4"),
148+
maven_artifact_test_only("com.google.truth.extensions", "truth-java8-extension", "1.4.4"),
149+
maven_artifact_test_only("com.google.truth.extensions", "truth-proto-extension", "1.4.4"),
150+
maven_artifact_test_only("com.google.truth.extensions", "truth-liteproto-extension", "1.4.4"),
151+
maven_artifact_compile_only("com.google.code.findbugs", "annotations", "3.0.1"),
152+
maven_artifact_compile_only("com.google.errorprone", "error_prone_annotations", "2.36.0"),
148153
],
149154
repositories = [
150155
"https://maven.google.com",

common/internal/BUILD.bazel

+25
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ java_library(
3232
exports = ["//common/src/main/java/dev/cel/common/internal:dynamic_proto"],
3333
)
3434

35+
java_library(
36+
name = "proto_lite_adapter",
37+
exports = ["//common/src/main/java/dev/cel/common/internal:proto_lite_adapter"],
38+
)
39+
3540
java_library(
3641
name = "proto_equality",
3742
exports = ["//common/src/main/java/dev/cel/common/internal:proto_equality"],
@@ -57,6 +62,11 @@ java_library(
5762
exports = ["//common/src/main/java/dev/cel/common/internal:default_instance_message_factory"],
5863
)
5964

65+
java_library(
66+
name = "default_instance_message_lite_factory",
67+
exports = ["//common/src/main/java/dev/cel/common/internal:default_instance_message_lite_factory"],
68+
)
69+
6070
java_library(
6171
name = "well_known_proto",
6272
exports = ["//common/src/main/java/dev/cel/common/internal:well_known_proto"],
@@ -77,6 +87,11 @@ java_library(
7787
exports = ["//common/src/main/java/dev/cel/common/internal:cel_descriptor_pools"],
7888
)
7989

90+
java_library(
91+
name = "cel_lite_descriptor_pool",
92+
exports = ["//common/src/main/java/dev/cel/common/internal:cel_lite_descriptor_pool"],
93+
)
94+
8095
java_library(
8196
name = "safe_string_formatter",
8297
# used_by_android
@@ -88,3 +103,13 @@ cel_android_library(
88103
visibility = ["//:android_allow_list"],
89104
exports = ["//common/src/main/java/dev/cel/common/internal:internal_android"],
90105
)
106+
107+
java_library(
108+
name = "proto_java_qualified_names",
109+
exports = ["//common/src/main/java/dev/cel/common/internal:proto_java_qualified_names"],
110+
)
111+
112+
java_library(
113+
name = "reflection_util",
114+
exports = ["//common/src/main/java/dev/cel/common/internal:reflection_util"],
115+
)

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

+68-2
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,20 @@ java_library(
136136
tags = [
137137
],
138138
deps = [
139+
"//common/annotations",
140+
"//common/internal:default_instance_message_lite_factory",
141+
"//common/internal:proto_java_qualified_names",
142+
"@maven//:com_google_protobuf_protobuf_java",
143+
],
144+
)
145+
146+
java_library(
147+
name = "default_instance_message_lite_factory",
148+
srcs = ["DefaultInstanceMessageLiteFactory.java"],
149+
tags = [
150+
],
151+
deps = [
152+
":reflection_util",
139153
"//common/annotations",
140154
"@maven//:com_google_guava_guava",
141155
"@maven//:com_google_protobuf_protobuf_java",
@@ -151,18 +165,34 @@ java_library(
151165
],
152166
deps = [
153167
":converter",
168+
":proto_lite_adapter",
154169
":proto_message_factory",
155170
":well_known_proto",
156171
"//:auto_value",
157172
"//common:error_codes",
158-
"//common:proto_json_adapter",
159173
"//common:runtime_exception",
160174
"//common/annotations",
161175
"@maven//:com_google_code_findbugs_annotations",
162176
"@maven//:com_google_errorprone_error_prone_annotations",
163177
"@maven//:com_google_guava_guava",
164178
"@maven//:com_google_protobuf_protobuf_java",
165-
"@maven//:org_jspecify_jspecify",
179+
],
180+
)
181+
182+
java_library(
183+
name = "proto_lite_adapter",
184+
srcs = ["ProtoLiteAdapter.java"],
185+
tags = [
186+
],
187+
deps = [
188+
":well_known_proto",
189+
"//common:error_codes",
190+
"//common:proto_json_adapter",
191+
"//common:runtime_exception",
192+
"//common/annotations",
193+
"@maven//:com_google_errorprone_error_prone_annotations",
194+
"@maven//:com_google_guava_guava",
195+
"@maven//:com_google_protobuf_protobuf_java",
166196
],
167197
)
168198

@@ -217,6 +247,7 @@ java_library(
217247
"//common/annotations",
218248
"@maven//:com_google_guava_guava",
219249
"@maven//:com_google_protobuf_protobuf_java",
250+
"@maven//:org_jspecify_jspecify",
220251
],
221252
)
222253

@@ -262,6 +293,21 @@ java_library(
262293
],
263294
)
264295

296+
java_library(
297+
name = "cel_lite_descriptor_pool",
298+
srcs = ["CelLiteDescriptorPool.java"],
299+
tags = [
300+
],
301+
deps = [
302+
"//common/annotations",
303+
"//common/internal:well_known_proto",
304+
"//protobuf:cel_lite_descriptor",
305+
"@maven//:com_google_errorprone_error_prone_annotations",
306+
"@maven//:com_google_guava_guava",
307+
"@maven//:com_google_protobuf_protobuf_java",
308+
],
309+
)
310+
265311
java_library(
266312
name = "safe_string_formatter",
267313
srcs = ["SafeStringFormatter.java"],
@@ -273,3 +319,23 @@ java_library(
273319
"@maven//:com_google_re2j_re2j",
274320
],
275321
)
322+
323+
java_library(
324+
name = "proto_java_qualified_names",
325+
srcs = ["ProtoJavaQualifiedNames.java"],
326+
tags = [
327+
],
328+
deps = [
329+
"//common/annotations",
330+
"@maven//:com_google_guava_guava",
331+
"@maven//:com_google_protobuf_protobuf_java",
332+
],
333+
)
334+
335+
java_library(
336+
name = "reflection_util",
337+
srcs = ["ReflectionUtil.java"],
338+
deps = [
339+
"//common/annotations",
340+
],
341+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
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.MessageDescriptor;
25+
import java.util.Optional;
26+
27+
/** Descriptor pool for {@link CelLiteDescriptor}s. */
28+
@Immutable
29+
@Internal
30+
public final class CelLiteDescriptorPool {
31+
private final ImmutableMap<String, MessageDescriptor> protoFqnToMessageInfo;
32+
private final ImmutableMap<String, MessageDescriptor> protoJavaClassNameToMessageInfo;
33+
34+
public static CelLiteDescriptorPool newInstance(ImmutableSet<CelLiteDescriptor> descriptors) {
35+
return new CelLiteDescriptorPool(descriptors);
36+
}
37+
38+
public Optional<MessageDescriptor> findDescriptorByTypeName(String protoFqn) {
39+
return Optional.ofNullable(protoFqnToMessageInfo.get(protoFqn));
40+
}
41+
42+
public Optional<MessageDescriptor> findDescriptor(MessageLite msg) {
43+
String className = msg.getClass().getName();
44+
return Optional.ofNullable(protoJavaClassNameToMessageInfo.get(className));
45+
}
46+
47+
private static MessageDescriptor newMessageInfo(WellKnownProto wellKnownProto) {
48+
ImmutableMap.Builder<String, FieldDescriptor> fieldInfoMap = ImmutableMap.builder();
49+
switch (wellKnownProto) {
50+
case JSON_STRUCT_VALUE:
51+
fieldInfoMap.put(
52+
"fields",
53+
new FieldDescriptor(
54+
"google.protobuf.Struct.fields",
55+
"MESSAGE",
56+
"Fields",
57+
FieldDescriptor.ValueType.MAP.toString(),
58+
FieldDescriptor.Type.MESSAGE.toString(),
59+
String.valueOf(false),
60+
"com.google.protobuf.Struct$FieldsEntry",
61+
"google.protobuf.Struct.FieldsEntry"));
62+
break;
63+
case BOOL_VALUE:
64+
fieldInfoMap.put(
65+
"value",
66+
newPrimitiveFieldInfo(
67+
"google.protobuf.BoolValue",
68+
"BOOLEAN",
69+
FieldDescriptor.ValueType.SCALAR,
70+
FieldDescriptor.Type.BOOL));
71+
break;
72+
case BYTES_VALUE:
73+
fieldInfoMap.put(
74+
"value",
75+
newPrimitiveFieldInfo(
76+
"google.protobuf.BytesValue",
77+
"BYTE_STRING",
78+
FieldDescriptor.ValueType.SCALAR,
79+
FieldDescriptor.Type.BYTES));
80+
break;
81+
case DOUBLE_VALUE:
82+
fieldInfoMap.put(
83+
"value",
84+
newPrimitiveFieldInfo(
85+
"google.protobuf.DoubleValue",
86+
"DOUBLE",
87+
FieldDescriptor.ValueType.SCALAR,
88+
FieldDescriptor.Type.DOUBLE));
89+
break;
90+
case FLOAT_VALUE:
91+
fieldInfoMap.put(
92+
"value",
93+
newPrimitiveFieldInfo(
94+
"google.protobuf.FloatValue",
95+
"FLOAT",
96+
FieldDescriptor.ValueType.SCALAR,
97+
FieldDescriptor.Type.FLOAT));
98+
break;
99+
case INT32_VALUE:
100+
fieldInfoMap.put(
101+
"value",
102+
newPrimitiveFieldInfo(
103+
"google.protobuf.Int32Value",
104+
"INT",
105+
FieldDescriptor.ValueType.SCALAR,
106+
FieldDescriptor.Type.INT32));
107+
break;
108+
case INT64_VALUE:
109+
fieldInfoMap.put(
110+
"value",
111+
newPrimitiveFieldInfo(
112+
"google.protobuf.Int64Value",
113+
"LONG",
114+
FieldDescriptor.ValueType.SCALAR,
115+
FieldDescriptor.Type.INT64));
116+
break;
117+
case STRING_VALUE:
118+
fieldInfoMap.put(
119+
"value",
120+
newPrimitiveFieldInfo(
121+
"google.protobuf.StringValue",
122+
"STRING",
123+
FieldDescriptor.ValueType.SCALAR,
124+
FieldDescriptor.Type.STRING));
125+
break;
126+
case UINT32_VALUE:
127+
fieldInfoMap.put(
128+
"value",
129+
newPrimitiveFieldInfo(
130+
"google.protobuf.UInt32Value",
131+
"INT",
132+
FieldDescriptor.ValueType.SCALAR,
133+
FieldDescriptor.Type.UINT32));
134+
break;
135+
case UINT64_VALUE:
136+
fieldInfoMap.put(
137+
"value",
138+
newPrimitiveFieldInfo(
139+
"google.protobuf.UInt64Value",
140+
"LONG",
141+
FieldDescriptor.ValueType.SCALAR,
142+
FieldDescriptor.Type.UINT64));
143+
break;
144+
case JSON_VALUE:
145+
case JSON_LIST_VALUE:
146+
case DURATION_VALUE:
147+
case TIMESTAMP_VALUE:
148+
// TODO: Complete these
149+
break;
150+
default:
151+
break;
152+
}
153+
154+
return new MessageDescriptor(
155+
wellKnownProto.typeName(), wellKnownProto.javaClassName(), fieldInfoMap.buildOrThrow());
156+
}
157+
158+
private static FieldDescriptor newPrimitiveFieldInfo(
159+
String fullyQualifiedProtoName,
160+
String javaTypeName,
161+
FieldDescriptor.ValueType valueType,
162+
FieldDescriptor.Type protoFieldType) {
163+
return new FieldDescriptor(
164+
fullyQualifiedProtoName + ".value",
165+
javaTypeName,
166+
"Value",
167+
valueType.toString(),
168+
protoFieldType.toString(),
169+
String.valueOf(false),
170+
"",
171+
fullyQualifiedProtoName);
172+
}
173+
174+
private CelLiteDescriptorPool(ImmutableSet<CelLiteDescriptor> descriptors) {
175+
ImmutableMap.Builder<String, MessageDescriptor> protoFqnMapBuilder = ImmutableMap.builder();
176+
ImmutableMap.Builder<String, MessageDescriptor> protoJavaClassNameMapBuilder =
177+
ImmutableMap.builder();
178+
for (WellKnownProto wellKnownProto : WellKnownProto.values()) {
179+
MessageDescriptor wktMessageInfo = newMessageInfo(wellKnownProto);
180+
protoFqnMapBuilder.put(wellKnownProto.typeName(), wktMessageInfo);
181+
protoJavaClassNameMapBuilder.put(wellKnownProto.javaClassName(), wktMessageInfo);
182+
}
183+
184+
for (CelLiteDescriptor descriptor : descriptors) {
185+
protoFqnMapBuilder.putAll(descriptor.getProtoTypeNamesToDescriptors());
186+
protoJavaClassNameMapBuilder.putAll(descriptor.getProtoJavaClassNameToDescriptors());
187+
}
188+
189+
this.protoFqnToMessageInfo = protoFqnMapBuilder.buildOrThrow();
190+
this.protoJavaClassNameToMessageInfo = protoJavaClassNameMapBuilder.buildOrThrow();
191+
}
192+
}

0 commit comments

Comments
 (0)