diff --git a/common/src/main/java/dev/cel/common/types/BUILD.bazel b/common/src/main/java/dev/cel/common/types/BUILD.bazel index 752c6df9..f6ac05e4 100644 --- a/common/src/main/java/dev/cel/common/types/BUILD.bazel +++ b/common/src/main/java/dev/cel/common/types/BUILD.bazel @@ -94,6 +94,18 @@ java_library( ], ) +java_library( + name = "cel_proto_message_types", + srcs = ["CelProtoMessageTypes.java"], + tags = [ + ], + deps = [ + "//common/types:cel_proto_types", + "@cel_spec//proto/cel/expr:expr_java_proto", + "@maven//:com_google_protobuf_protobuf_java", + ], +) + java_library( name = "cel_v1alpha1_types", srcs = ["CelV1AlphaTypes.java"], diff --git a/common/src/main/java/dev/cel/common/types/CelProtoMessageTypes.java b/common/src/main/java/dev/cel/common/types/CelProtoMessageTypes.java new file mode 100644 index 00000000..108305e1 --- /dev/null +++ b/common/src/main/java/dev/cel/common/types/CelProtoMessageTypes.java @@ -0,0 +1,32 @@ +// 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.types; + +import dev.cel.expr.Type; +import com.google.protobuf.Descriptors.Descriptor; + +/** + * Utility class for working with {@link Type} that require a full protobuf dependency (i.e: + * descriptors). + */ +public final class CelProtoMessageTypes { + + /** Create a message {@code Type} for {@code Descriptor}. */ + public static Type createMessage(Descriptor descriptor) { + return CelProtoTypes.createMessage(descriptor.getFullName()); + } + + private CelProtoMessageTypes() {} +} diff --git a/common/src/main/java/dev/cel/common/types/CelProtoTypes.java b/common/src/main/java/dev/cel/common/types/CelProtoTypes.java index 1c240ca1..a794a9d0 100644 --- a/common/src/main/java/dev/cel/common/types/CelProtoTypes.java +++ b/common/src/main/java/dev/cel/common/types/CelProtoTypes.java @@ -112,7 +112,10 @@ public static Type createMessage(String messageName) { return Type.newBuilder().setMessageType(messageName).build(); } - /** Create a message {@code Type} for {@code Descriptor}. */ + /** + * @deprecated Use {@link CelProtoMessageTypes#createMessage} instead. + */ + @Deprecated public static Type createMessage(Descriptor descriptor) { return createMessage(descriptor.getFullName()); } diff --git a/common/src/test/java/dev/cel/common/types/BUILD.bazel b/common/src/test/java/dev/cel/common/types/BUILD.bazel index 541a77ec..dcad1703 100644 --- a/common/src/test/java/dev/cel/common/types/BUILD.bazel +++ b/common/src/test/java/dev/cel/common/types/BUILD.bazel @@ -11,6 +11,7 @@ java_library( "//:java_truth", "//common/types", "//common/types:cel_internal_types", + "//common/types:cel_proto_message_types", "//common/types:cel_proto_types", "//common/types:cel_types", "//common/types:message_type_provider", diff --git a/common/src/test/java/dev/cel/common/types/CelProtoMessageTypesTest.java b/common/src/test/java/dev/cel/common/types/CelProtoMessageTypesTest.java new file mode 100644 index 00000000..593dcc17 --- /dev/null +++ b/common/src/test/java/dev/cel/common/types/CelProtoMessageTypesTest.java @@ -0,0 +1,36 @@ +// 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.types; + +import static com.google.common.truth.Truth.assertThat; + +import dev.cel.expr.Type; +import com.google.testing.junit.testparameterinjector.TestParameterInjector; +import dev.cel.expr.conformance.proto3.TestAllTypes; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(TestParameterInjector.class) +public final class CelProtoMessageTypesTest { + + @Test + public void createMessage_fromDescriptor() { + Type type = CelProtoMessageTypes.createMessage(TestAllTypes.getDescriptor()); + + assertThat(type) + .isEqualTo( + Type.newBuilder().setMessageType(TestAllTypes.getDescriptor().getFullName()).build()); + } +} diff --git a/common/types/BUILD.bazel b/common/types/BUILD.bazel index 1802b054..e726b0c5 100644 --- a/common/types/BUILD.bazel +++ b/common/types/BUILD.bazel @@ -44,6 +44,11 @@ java_library( exports = ["//common/src/main/java/dev/cel/common/types:cel_proto_types"], ) +java_library( + name = "cel_proto_message_types", + exports = ["//common/src/main/java/dev/cel/common/types:cel_proto_message_types"], +) + java_library( name = "cel_v1alpha1_types", visibility = ["//visibility:public"],