Skip to content

Commit

Permalink
Internal Changes
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 711534576
  • Loading branch information
l46kok authored and copybara-github committed Jan 15, 2025
1 parent 4a47e75 commit 1d7e559
Show file tree
Hide file tree
Showing 46 changed files with 3,672 additions and 805 deletions.
18 changes: 11 additions & 7 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -63,30 +63,34 @@ load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()

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

ANTLR4_VERSION = "4.13.2"

# Important: there can only be one maven_install rule. Add new maven deps here.
maven_install(
# keep sorted
artifacts = [
"com.google.auto.value:auto-value:1.11.0",
"com.google.auto.value:auto-value-annotations:1.11.0",
"com.google.code.findbugs:annotations:3.0.1",
"com.google.errorprone:error_prone_annotations:2.36.0",
"com.google.guava:guava:33.3.1-jre",
"com.google.guava:guava-testlib:33.3.1-jre",
"com.google.protobuf:protobuf-java:4.28.3",
"com.google.protobuf:protobuf-java-util:4.28.3",
"com.google.re2j:re2j:1.8",
"com.google.testparameterinjector:test-parameter-injector:1.18",
"com.google.truth.extensions:truth-java8-extension:1.4.4",
"com.google.truth.extensions:truth-proto-extension:1.4.4",
"com.google.truth:truth:1.4.4",
"org.antlr:antlr4-runtime:" + ANTLR4_VERSION,
"info.picocli:picocli:4.7.6",
"javax.annotation:javax.annotation-api:1.3.2",
"org.freemarker:freemarker:2.3.33",
"org.jspecify:jspecify:1.0.0",
"org.threeten:threeten-extra:1.8.0",
"org.yaml:snakeyaml:2.3",
maven_artifact_test_only("com.google.testparameterinjector", "test-parameter-injector", "1.18"),
maven_artifact_test_only("com.google.truth", "truth", "1.4.4"),
maven_artifact_test_only("com.google.truth.extensions", "truth-java8-extension", "1.4.4"),
maven_artifact_test_only("com.google.truth.extensions", "truth-proto-extension", "1.4.4"),
maven_artifact_test_only("com.google.truth.extensions", "truth-liteproto-extension", "1.4.4"),
maven_artifact_compile_only("com.google.code.findbugs", "annotations", "3.0.1"),
maven_artifact_compile_only("com.google.errorprone", "error_prone_annotations", "2.36.0"),
],
repositories = [
"https://maven.google.com",
Expand Down
25 changes: 25 additions & 0 deletions common/internal/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ java_library(
exports = ["//common/src/main/java/dev/cel/common/internal:dynamic_proto"],
)

java_library(
name = "proto_lite_adapter",
exports = ["//common/src/main/java/dev/cel/common/internal:proto_lite_adapter"],
)

java_library(
name = "proto_equality",
exports = ["//common/src/main/java/dev/cel/common/internal:proto_equality"],
Expand All @@ -50,6 +55,11 @@ java_library(
exports = ["//common/src/main/java/dev/cel/common/internal:default_instance_message_factory"],
)

java_library(
name = "default_instance_message_lite_factory",
exports = ["//common/src/main/java/dev/cel/common/internal:default_instance_message_lite_factory"],
)

java_library(
name = "well_known_proto",
exports = ["//common/src/main/java/dev/cel/common/internal:well_known_proto"],
Expand All @@ -70,7 +80,22 @@ java_library(
exports = ["//common/src/main/java/dev/cel/common/internal:cel_descriptor_pools"],
)

java_library(
name = "cel_lite_descriptor_pool",
exports = ["//common/src/main/java/dev/cel/common/internal:cel_lite_descriptor_pool"],
)

java_library(
name = "safe_string_formatter",
exports = ["//common/src/main/java/dev/cel/common/internal:safe_string_formatter"],
)

java_library(
name = "proto_java_qualified_names",
exports = ["//common/src/main/java/dev/cel/common/internal:proto_java_qualified_names"],
)

java_library(
name = "reflection_util",
exports = ["//common/src/main/java/dev/cel/common/internal:reflection_util"],
)
68 changes: 66 additions & 2 deletions common/src/main/java/dev/cel/common/internal/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,20 @@ java_library(
tags = [
],
deps = [
"//common/annotations",
"//common/internal:default_instance_message_lite_factory",
"//common/internal:proto_java_qualified_names",
"@maven//:com_google_protobuf_protobuf_java",
],
)

java_library(
name = "default_instance_message_lite_factory",
srcs = ["DefaultInstanceMessageLiteFactory.java"],
tags = [
],
deps = [
":reflection_util",
"//common/annotations",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
Expand All @@ -119,18 +133,34 @@ java_library(
],
deps = [
":converter",
":proto_lite_adapter",
":proto_message_factory",
":well_known_proto",
"//:auto_value",
"//common:error_codes",
"//common:proto_json_adapter",
"//common:runtime_exception",
"//common/annotations",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:org_jspecify_jspecify",
],
)

java_library(
name = "proto_lite_adapter",
srcs = ["ProtoLiteAdapter.java"],
tags = [
],
deps = [
":well_known_proto",
"//common:error_codes",
"//common:proto_json_adapter",
"//common:runtime_exception",
"//common/annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
],
)

Expand Down Expand Up @@ -185,6 +215,7 @@ java_library(
"//common/annotations",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:org_jspecify_jspecify",
],
)

Expand Down Expand Up @@ -230,6 +261,19 @@ java_library(
],
)

java_library(
name = "cel_lite_descriptor_pool",
srcs = ["CelLiteDescriptorPool.java"],
deps = [
"//common/annotations",
"//common/internal:well_known_proto",
"//protobuf:cel_lite_descriptor",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
],
)

java_library(
name = "safe_string_formatter",
srcs = ["SafeStringFormatter.java"],
Expand All @@ -240,3 +284,23 @@ java_library(
"@maven//:com_google_re2j_re2j",
],
)

java_library(
name = "proto_java_qualified_names",
srcs = ["ProtoJavaQualifiedNames.java"],
tags = [
],
deps = [
"//common/annotations",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
],
)

java_library(
name = "reflection_util",
srcs = ["ReflectionUtil.java"],
deps = [
"//common/annotations",
],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package dev.cel.common.internal;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.errorprone.annotations.Immutable;
import com.google.protobuf.MessageLite;
import dev.cel.common.annotations.Internal;
import dev.cel.protobuf.CelLiteDescriptor;
import dev.cel.protobuf.CelLiteDescriptor.FieldDescriptor;
import dev.cel.protobuf.CelLiteDescriptor.MessageDescriptor;
import java.util.Optional;

/** Descriptor pool for {@link CelLiteDescriptor}s. */
@Immutable
@Internal
public final class CelLiteDescriptorPool {
private final ImmutableMap<String, MessageDescriptor> protoFqnToMessageInfo;
private final ImmutableMap<String, MessageDescriptor> protoJavaClassNameToMessageInfo;

public static CelLiteDescriptorPool newInstance(ImmutableSet<CelLiteDescriptor> descriptors) {
return new CelLiteDescriptorPool(descriptors);
}

public Optional<MessageDescriptor> findDescriptorByTypeName(String protoFqn) {
return Optional.ofNullable(protoFqnToMessageInfo.get(protoFqn));
}

public Optional<MessageDescriptor> findDescriptor(MessageLite msg) {
String className = msg.getClass().getName();
return Optional.ofNullable(protoJavaClassNameToMessageInfo.get(className));
}

private static MessageDescriptor newMessageInfo(WellKnownProto wellKnownProto) {
ImmutableMap.Builder<String, FieldDescriptor> fieldInfoMap = ImmutableMap.builder();
switch (wellKnownProto) {
case JSON_STRUCT_VALUE:
fieldInfoMap.put(
"fields",
new FieldDescriptor(
"google.protobuf.Struct.fields",
"MESSAGE",
"Fields",
FieldDescriptor.ValueType.MAP.toString(),
FieldDescriptor.Type.MESSAGE.toString(),
String.valueOf(false),
"com.google.protobuf.Struct$FieldsEntry",
"google.protobuf.Struct.FieldsEntry"));
break;
case BOOL_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.BoolValue",
"BOOLEAN",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.BOOL));
break;
case BYTES_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.BytesValue",
"BYTE_STRING",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.BYTES));
break;
case DOUBLE_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.DoubleValue",
"DOUBLE",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.DOUBLE));
break;
case FLOAT_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.FloatValue",
"FLOAT",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.FLOAT));
break;
case INT32_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.Int32Value",
"INT",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.INT32));
break;
case INT64_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.Int64Value",
"LONG",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.INT64));
break;
case STRING_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.StringValue",
"STRING",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.STRING));
break;
case UINT32_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.UInt32Value",
"INT",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.UINT32));
break;
case UINT64_VALUE:
fieldInfoMap.put(
"value",
newPrimitiveFieldInfo(
"google.protobuf.UInt64Value",
"LONG",
FieldDescriptor.ValueType.SCALAR,
FieldDescriptor.Type.UINT64));
break;
case JSON_VALUE:
case JSON_LIST_VALUE:
case DURATION_VALUE:
case TIMESTAMP_VALUE:
// TODO: Complete these
break;
default:
break;
}

return new MessageDescriptor(
wellKnownProto.typeName(), wellKnownProto.javaClassName(), fieldInfoMap.buildOrThrow());
}

private static FieldDescriptor newPrimitiveFieldInfo(
String fullyQualifiedProtoName,
String javaTypeName,
FieldDescriptor.ValueType valueType,
FieldDescriptor.Type protoFieldType) {
return new FieldDescriptor(
fullyQualifiedProtoName + ".value",
javaTypeName,
"Value",
valueType.toString(),
protoFieldType.toString(),
String.valueOf(false),
"",
fullyQualifiedProtoName);
}

private CelLiteDescriptorPool(ImmutableSet<CelLiteDescriptor> descriptors) {
ImmutableMap.Builder<String, MessageDescriptor> protoFqnMapBuilder = ImmutableMap.builder();
ImmutableMap.Builder<String, MessageDescriptor> protoJavaClassNameMapBuilder =
ImmutableMap.builder();
for (WellKnownProto wellKnownProto : WellKnownProto.values()) {
MessageDescriptor wktMessageInfo = newMessageInfo(wellKnownProto);
protoFqnMapBuilder.put(wellKnownProto.typeName(), wktMessageInfo);
protoJavaClassNameMapBuilder.put(wellKnownProto.javaClassName(), wktMessageInfo);
}

for (CelLiteDescriptor descriptor : descriptors) {
protoFqnMapBuilder.putAll(descriptor.getProtoTypeNamesToDescriptors());
protoJavaClassNameMapBuilder.putAll(descriptor.getProtoJavaClassNameToDescriptors());
}

this.protoFqnToMessageInfo = protoFqnMapBuilder.buildOrThrow();
this.protoJavaClassNameToMessageInfo = protoJavaClassNameMapBuilder.buildOrThrow();
}
}
Loading

0 comments on commit 1d7e559

Please sign in to comment.