Skip to content

Commit 5ab74df

Browse files
l46kokcopybara-github
authored andcommitted
Internal Changes
PiperOrigin-RevId: 711534576
1 parent 0386196 commit 5ab74df

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

+3638
-783
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.7",
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

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

0 commit comments

Comments
 (0)