Skip to content

Commit 1d7e559

Browse files
l46kokcopybara-github
authored andcommitted
Internal Changes
PiperOrigin-RevId: 711534576
1 parent 4a47e75 commit 1d7e559

Some content is hidden

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

46 files changed

+3672
-805
lines changed

WORKSPACE

+11-7
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,34 @@ load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
6363
rules_jvm_external_setup()
6464

6565
load("@rules_jvm_external//:defs.bzl", "maven_install")
66+
load("//:maven_utils.bzl", "maven_artifact_compile_only", "maven_artifact_test_only")
6667

6768
ANTLR4_VERSION = "4.13.2"
6869

69-
# Important: there can only be one maven_install rule. Add new maven deps here.
7070
maven_install(
7171
# keep sorted
7272
artifacts = [
7373
"com.google.auto.value:auto-value:1.11.0",
7474
"com.google.auto.value:auto-value-annotations:1.11.0",
75-
"com.google.code.findbugs:annotations:3.0.1",
76-
"com.google.errorprone:error_prone_annotations:2.36.0",
7775
"com.google.guava:guava:33.3.1-jre",
7876
"com.google.guava:guava-testlib:33.3.1-jre",
7977
"com.google.protobuf:protobuf-java:4.28.3",
8078
"com.google.protobuf:protobuf-java-util:4.28.3",
8179
"com.google.re2j:re2j:1.8",
82-
"com.google.testparameterinjector:test-parameter-injector:1.18",
83-
"com.google.truth.extensions:truth-java8-extension:1.4.4",
84-
"com.google.truth.extensions:truth-proto-extension:1.4.4",
85-
"com.google.truth:truth:1.4.4",
8680
"org.antlr:antlr4-runtime:" + ANTLR4_VERSION,
81+
"info.picocli:picocli:4.7.6",
82+
"javax.annotation:javax.annotation-api:1.3.2",
83+
"org.freemarker:freemarker:2.3.33",
8784
"org.jspecify:jspecify:1.0.0",
8885
"org.threeten:threeten-extra:1.8.0",
8986
"org.yaml:snakeyaml:2.3",
87+
maven_artifact_test_only("com.google.testparameterinjector", "test-parameter-injector", "1.18"),
88+
maven_artifact_test_only("com.google.truth", "truth", "1.4.4"),
89+
maven_artifact_test_only("com.google.truth.extensions", "truth-java8-extension", "1.4.4"),
90+
maven_artifact_test_only("com.google.truth.extensions", "truth-proto-extension", "1.4.4"),
91+
maven_artifact_test_only("com.google.truth.extensions", "truth-liteproto-extension", "1.4.4"),
92+
maven_artifact_compile_only("com.google.code.findbugs", "annotations", "3.0.1"),
93+
maven_artifact_compile_only("com.google.errorprone", "error_prone_annotations", "2.36.0"),
9094
],
9195
repositories = [
9296
"https://maven.google.com",

common/internal/BUILD.bazel

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

28+
java_library(
29+
name = "proto_lite_adapter",
30+
exports = ["//common/src/main/java/dev/cel/common/internal:proto_lite_adapter"],
31+
)
32+
2833
java_library(
2934
name = "proto_equality",
3035
exports = ["//common/src/main/java/dev/cel/common/internal:proto_equality"],
@@ -50,6 +55,11 @@ java_library(
5055
exports = ["//common/src/main/java/dev/cel/common/internal:default_instance_message_factory"],
5156
)
5257

58+
java_library(
59+
name = "default_instance_message_lite_factory",
60+
exports = ["//common/src/main/java/dev/cel/common/internal:default_instance_message_lite_factory"],
61+
)
62+
5363
java_library(
5464
name = "well_known_proto",
5565
exports = ["//common/src/main/java/dev/cel/common/internal:well_known_proto"],
@@ -70,7 +80,22 @@ java_library(
7080
exports = ["//common/src/main/java/dev/cel/common/internal:cel_descriptor_pools"],
7181
)
7282

83+
java_library(
84+
name = "cel_lite_descriptor_pool",
85+
exports = ["//common/src/main/java/dev/cel/common/internal:cel_lite_descriptor_pool"],
86+
)
87+
7388
java_library(
7489
name = "safe_string_formatter",
7590
exports = ["//common/src/main/java/dev/cel/common/internal:safe_string_formatter"],
7691
)
92+
93+
java_library(
94+
name = "proto_java_qualified_names",
95+
exports = ["//common/src/main/java/dev/cel/common/internal:proto_java_qualified_names"],
96+
)
97+
98+
java_library(
99+
name = "reflection_util",
100+
exports = ["//common/src/main/java/dev/cel/common/internal:reflection_util"],
101+
)

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

+66-2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,20 @@ java_library(
104104
tags = [
105105
],
106106
deps = [
107+
"//common/annotations",
108+
"//common/internal:default_instance_message_lite_factory",
109+
"//common/internal:proto_java_qualified_names",
110+
"@maven//:com_google_protobuf_protobuf_java",
111+
],
112+
)
113+
114+
java_library(
115+
name = "default_instance_message_lite_factory",
116+
srcs = ["DefaultInstanceMessageLiteFactory.java"],
117+
tags = [
118+
],
119+
deps = [
120+
":reflection_util",
107121
"//common/annotations",
108122
"@maven//:com_google_guava_guava",
109123
"@maven//:com_google_protobuf_protobuf_java",
@@ -119,18 +133,34 @@ java_library(
119133
],
120134
deps = [
121135
":converter",
136+
":proto_lite_adapter",
122137
":proto_message_factory",
123138
":well_known_proto",
124139
"//:auto_value",
125140
"//common:error_codes",
126-
"//common:proto_json_adapter",
127141
"//common:runtime_exception",
128142
"//common/annotations",
129143
"@maven//:com_google_code_findbugs_annotations",
130144
"@maven//:com_google_errorprone_error_prone_annotations",
131145
"@maven//:com_google_guava_guava",
132146
"@maven//:com_google_protobuf_protobuf_java",
133-
"@maven//:org_jspecify_jspecify",
147+
],
148+
)
149+
150+
java_library(
151+
name = "proto_lite_adapter",
152+
srcs = ["ProtoLiteAdapter.java"],
153+
tags = [
154+
],
155+
deps = [
156+
":well_known_proto",
157+
"//common:error_codes",
158+
"//common:proto_json_adapter",
159+
"//common:runtime_exception",
160+
"//common/annotations",
161+
"@maven//:com_google_errorprone_error_prone_annotations",
162+
"@maven//:com_google_guava_guava",
163+
"@maven//:com_google_protobuf_protobuf_java",
134164
],
135165
)
136166

@@ -185,6 +215,7 @@ java_library(
185215
"//common/annotations",
186216
"@maven//:com_google_guava_guava",
187217
"@maven//:com_google_protobuf_protobuf_java",
218+
"@maven//:org_jspecify_jspecify",
188219
],
189220
)
190221

@@ -230,6 +261,19 @@ java_library(
230261
],
231262
)
232263

264+
java_library(
265+
name = "cel_lite_descriptor_pool",
266+
srcs = ["CelLiteDescriptorPool.java"],
267+
deps = [
268+
"//common/annotations",
269+
"//common/internal:well_known_proto",
270+
"//protobuf:cel_lite_descriptor",
271+
"@maven//:com_google_errorprone_error_prone_annotations",
272+
"@maven//:com_google_guava_guava",
273+
"@maven//:com_google_protobuf_protobuf_java",
274+
],
275+
)
276+
233277
java_library(
234278
name = "safe_string_formatter",
235279
srcs = ["SafeStringFormatter.java"],
@@ -240,3 +284,23 @@ java_library(
240284
"@maven//:com_google_re2j_re2j",
241285
],
242286
)
287+
288+
java_library(
289+
name = "proto_java_qualified_names",
290+
srcs = ["ProtoJavaQualifiedNames.java"],
291+
tags = [
292+
],
293+
deps = [
294+
"//common/annotations",
295+
"@maven//:com_google_guava_guava",
296+
"@maven//:com_google_protobuf_protobuf_java",
297+
],
298+
)
299+
300+
java_library(
301+
name = "reflection_util",
302+
srcs = ["ReflectionUtil.java"],
303+
deps = [
304+
"//common/annotations",
305+
],
306+
)
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)