Skip to content

Commit 380c83c

Browse files
l46kokcopybara-github
authored andcommitted
Handle dependent protos when generating CelLiteDescriptor
PiperOrigin-RevId: 756500427
1 parent a9cd4f3 commit 380c83c

23 files changed

Lines changed: 391 additions & 174 deletions

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ java_library(
3030
"//common/internal:proto_message_factory",
3131
"//common/internal:well_known_proto",
3232
"//common/src/test/resources:default_instance_message_test_protos_java_proto",
33-
"//common/src/test/resources:multi_file_java_proto",
3433
"//common/src/test/resources:service_conflicting_name_java_proto",
35-
"//common/src/test/resources:single_file_java_proto",
3634
"//common/testing",
3735
"//protobuf:cel_lite_descriptor",
38-
"//testing:test_all_types_cel_java_proto3",
36+
"//testing/protos:multi_file_java_proto",
37+
"//testing/protos:single_file_java_proto",
38+
"//testing/protos:test_all_types_cel_java_proto3",
3939
"@cel_spec//proto/cel/expr/conformance/proto2:test_all_types_java_proto",
4040
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
4141
"@com_google_googleapis//google/type:type_java_proto",

common/src/test/java/dev/cel/common/internal/DefaultLiteDescriptorPoolTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.google.protobuf.Descriptors.Descriptor;
2323
import com.google.protobuf.Descriptors.FieldDescriptor;
2424
import com.google.testing.junit.testparameterinjector.TestParameterInjector;
25-
import dev.cel.expr.conformance.proto3.TestAllTypesProto3CelDescriptor;
25+
import dev.cel.expr.conformance.proto3.TestAllTypesCelDescriptor;
2626
import dev.cel.protobuf.CelLiteDescriptor.FieldLiteDescriptor;
2727
import dev.cel.protobuf.CelLiteDescriptor.FieldLiteDescriptor.EncodingType;
2828
import dev.cel.protobuf.CelLiteDescriptor.MessageLiteDescriptor;
@@ -102,7 +102,7 @@ public void wellKnownProto_compareAgainstFullDescriptors_allFieldPropertiesAreEq
102102
public void findDescriptor_success() {
103103
DefaultLiteDescriptorPool descriptorPool =
104104
DefaultLiteDescriptorPool.newInstance(
105-
ImmutableSet.of(TestAllTypesProto3CelDescriptor.getDescriptor()));
105+
ImmutableSet.of(TestAllTypesCelDescriptor.getDescriptor()));
106106

107107
MessageLiteDescriptor liteDescriptor =
108108
descriptorPool.getDescriptorOrThrow("cel.expr.conformance.proto3.TestAllTypes");

common/src/test/java/dev/cel/common/values/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ java_library(
3333
"//common/values:proto_message_lite_value_provider",
3434
"//common/values:proto_message_value",
3535
"//common/values:proto_message_value_provider",
36-
"//testing:test_all_types_cel_java_proto3",
36+
"//testing/protos:test_all_types_cel_java_proto3",
3737
"@cel_spec//proto/cel/expr/conformance/proto2:test_all_types_java_proto",
3838
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
3939
"@maven//:com_google_guava_guava",

common/src/test/java/dev/cel/common/values/ProtoLiteCelValueConverterTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import dev.cel.common.internal.WellKnownProto;
3939
import dev.cel.common.values.ProtoLiteCelValueConverter.MessageFields;
4040
import dev.cel.expr.conformance.proto3.TestAllTypes;
41-
import dev.cel.expr.conformance.proto3.TestAllTypesProto3CelDescriptor;
41+
import dev.cel.expr.conformance.proto3.TestAllTypesCelDescriptor;
4242
import java.time.Instant;
4343
import java.util.LinkedHashMap;
4444
import org.junit.Test;
@@ -48,7 +48,7 @@
4848
public class ProtoLiteCelValueConverterTest {
4949
private static final CelLiteDescriptorPool DESCRIPTOR_POOL =
5050
DefaultLiteDescriptorPool.newInstance(
51-
ImmutableSet.of(TestAllTypesProto3CelDescriptor.getDescriptor()));
51+
ImmutableSet.of(TestAllTypesCelDescriptor.getDescriptor()));
5252

5353
private static final ProtoLiteCelValueConverter PROTO_LITE_CEL_VALUE_CONVERTER =
5454
ProtoLiteCelValueConverter.newInstance(DESCRIPTOR_POOL);

common/src/test/java/dev/cel/common/values/ProtoMessageLiteValueProviderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
import com.google.testing.junit.testparameterinjector.TestParameterInjector;
2121
import dev.cel.common.types.StructTypeReference;
2222
import dev.cel.expr.conformance.proto3.TestAllTypes;
23-
import dev.cel.expr.conformance.proto3.TestAllTypesProto3CelDescriptor;
23+
import dev.cel.expr.conformance.proto3.TestAllTypesCelDescriptor;
2424
import java.util.Optional;
2525
import org.junit.Test;
2626
import org.junit.runner.RunWith;
2727

2828
@RunWith(TestParameterInjector.class)
2929
public class ProtoMessageLiteValueProviderTest {
3030
private static final ProtoMessageLiteValueProvider VALUE_PROVIDER =
31-
ProtoMessageLiteValueProvider.newInstance(TestAllTypesProto3CelDescriptor.getDescriptor());
31+
ProtoMessageLiteValueProvider.newInstance(TestAllTypesCelDescriptor.getDescriptor());
3232

3333
@Test
3434
public void newValue_unknownType_returnsEmpty() {

common/src/test/java/dev/cel/common/values/ProtoMessageLiteValueTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import dev.cel.expr.conformance.proto3.TestAllTypes;
3737
import dev.cel.expr.conformance.proto3.TestAllTypes.NestedEnum;
3838
import dev.cel.expr.conformance.proto3.TestAllTypes.NestedMessage;
39-
import dev.cel.expr.conformance.proto3.TestAllTypesProto3CelDescriptor;
39+
import dev.cel.expr.conformance.proto3.TestAllTypesCelDescriptor;
4040
import java.time.Duration;
4141
import java.time.Instant;
4242
import org.junit.Test;
@@ -46,7 +46,7 @@
4646
public class ProtoMessageLiteValueTest {
4747
private static final CelLiteDescriptorPool DESCRIPTOR_POOL =
4848
DefaultLiteDescriptorPool.newInstance(
49-
ImmutableSet.of(TestAllTypesProto3CelDescriptor.getDescriptor()));
49+
ImmutableSet.of(TestAllTypesCelDescriptor.getDescriptor()));
5050

5151
private static final ProtoLiteCelValueConverter PROTO_LITE_CEL_VALUE_CONVERTER =
5252
ProtoLiteCelValueConverter.newInstance(DESCRIPTOR_POOL);

common/src/test/resources/BUILD.bazel

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,6 @@ filegroup(
1818
],
1919
)
2020

21-
proto_library(
22-
name = "multi_file_proto",
23-
srcs = ["multi_file.proto"],
24-
)
25-
26-
java_proto_library(
27-
name = "multi_file_java_proto",
28-
deps = [":multi_file_proto"],
29-
)
30-
31-
proto_library(
32-
name = "single_file_proto",
33-
srcs = ["single_file.proto"],
34-
)
35-
36-
java_proto_library(
37-
name = "single_file_java_proto",
38-
deps = [":single_file_proto"],
39-
)
40-
4121
proto_library(
4222
name = "default_instance_message_test_protos",
4323
srcs = [

java_lite_proto_cel_library.bzl

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,35 @@ load("@com_google_protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto
1919

2020
def java_lite_proto_cel_library(
2121
name,
22-
proto_src,
23-
java_descriptor_class_name = None,
22+
deps,
23+
java_descriptor_class_suffix = None,
2424
debug = False):
2525
"""Generates a CelLiteDescriptor
2626
2727
Args:
2828
name: name of this target.
29+
deps: The list of proto_library rules to generate Java code for.
2930
proto_src: Name of the proto_library target.
30-
java_descriptor_class_name (optional): Java class name for the generated CEL lite descriptor.
31-
By default, CEL will use the first encountered message name in proto_src with "CelLiteDescriptor"
32-
suffixed as the class name. Use this field to override this name.
31+
java_descriptor_class_suffix (optional): Suffix for the Java class name of the generated CEL lite descriptor.
32+
Default is "CelLiteDescriptor".
3333
debug: (optional) If true, prints additional information during codegen for debugging purposes.
3434
"""
35+
if not name:
36+
fail("You must provide a name.")
37+
38+
if not deps or len(deps) < 1:
39+
fail("You must provide at least one proto_library dependency.")
40+
3541
java_proto_library_dep = name + "_java_lite_proto_dep"
3642
java_lite_proto_library(
3743
name = java_proto_library_dep,
38-
deps = [proto_src],
44+
deps = deps,
3945
)
4046

4147
java_lite_proto_cel_library_impl(
4248
name = name,
43-
proto_src = proto_src,
44-
java_descriptor_class_name = java_descriptor_class_name,
49+
deps = deps,
50+
java_descriptor_class_suffix = java_descriptor_class_suffix,
4551
java_proto_library_dep = java_proto_library_dep,
4652
debug = debug,
4753
)

java_lite_proto_cel_library_impl.bzl

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,40 @@ load("@rules_proto//proto:defs.bzl", "ProtoInfo")
2424

2525
def java_lite_proto_cel_library_impl(
2626
name,
27-
proto_src,
27+
deps,
2828
java_proto_library_dep,
29-
java_descriptor_class_name = None,
29+
java_descriptor_class_suffix = None,
3030
debug = False):
3131
"""Generates a CelLiteDescriptor
3232
3333
Args:
34-
name: name of this target.
35-
proto_src: Name of the proto_library target.
36-
java_descriptor_class_name (optional): Java class name for the generated CEL lite descriptor.
37-
By default, CEL will use the first encountered message name in proto_src with "CelLiteDescriptor"
38-
suffixed as the class name. Use this field to override this name.
34+
name: Name of this target.
35+
deps: The list of proto_library rules to generate Java code for.
36+
java_descriptor_class_suffix (optional): Suffix for the Java class name of the generated CEL lite descriptor.
37+
Default is "CelLiteDescriptor".
3938
java_proto_library_dep: (optional) Uses the provided java_lite_proto_library or java_proto_library to generate the lite descriptors.
4039
If none is provided, java_lite_proto_library is used by default behind the scenes. Most use cases should not need to provide this.
4140
debug: (optional) If true, prints additional information during codegen for debugging purposes.
4241
"""
4342
if not name:
4443
fail("You must provide a name.")
4544

46-
if not proto_src:
47-
fail("You must provide a proto_library dependency.")
45+
if not deps or len(deps) < 1:
46+
fail("You must provide at least one proto_library dependency.")
4847

4948
generated = name + "_cel_lite_descriptor"
5049
java_lite_proto_cel_library_rule(
5150
name = generated,
52-
descriptor = proto_src,
53-
java_descriptor_class_name = java_descriptor_class_name,
51+
debug = debug,
52+
descriptors = deps,
53+
java_descriptor_class_suffix = java_descriptor_class_suffix,
5454
)
5555

5656
if not java_proto_library_dep:
5757
java_proto_library_dep = name + "_java_lite_proto_dep"
5858
java_lite_proto_library(
5959
name = java_proto_library_dep,
60-
deps = [proto_src],
60+
deps = deps,
6161
)
6262

6363
descriptor_codegen_deps = [
@@ -75,24 +75,35 @@ def _generate_cel_lite_descriptor_class(ctx):
7575
srcjar_output = ctx.actions.declare_file(ctx.attr.name + ".srcjar")
7676
java_file_path = srcjar_output.path
7777

78-
proto_info = ctx.attr.descriptor[ProtoInfo]
79-
transitive_descriptors = proto_info.transitive_descriptor_sets
78+
direct_descriptor_set = depset(
79+
direct = [
80+
descriptor[ProtoInfo].direct_descriptor_set
81+
for descriptor in ctx.attr.descriptors
82+
],
83+
)
84+
transitive_descriptor_set = depset(
85+
transitive = [
86+
descriptor[ProtoInfo].transitive_descriptor_sets
87+
for descriptor in ctx.attr.descriptors
88+
],
89+
)
8090

8191
args = ctx.actions.args()
8292
args.add("--version", CEL_VERSION)
83-
args.add("--descriptor", proto_info.direct_descriptor_set)
84-
args.add_joined("--transitive_descriptor_set", transitive_descriptors, join_with = ",")
93+
args.add_joined("--descriptor_set", direct_descriptor_set, join_with = ",")
94+
args.add_joined("--transitive_descriptor_set", transitive_descriptor_set, join_with = ",")
8595
args.add("--out", java_file_path)
8696

87-
if ctx.attr.java_descriptor_class_name:
88-
args.add("--overridden_descriptor_class_name", ctx.attr.java_descriptor_class_name)
97+
if ctx.attr.java_descriptor_class_suffix:
98+
args.add("--overridden_descriptor_class_suffix", ctx.attr.java_descriptor_class_suffix)
99+
89100
if ctx.attr.debug:
90101
args.add("--debug")
91102

92103
ctx.actions.run(
93104
mnemonic = "CelLiteDescriptorGenerator",
94105
arguments = [args],
95-
inputs = transitive_descriptors,
106+
inputs = transitive_descriptor_set,
96107
outputs = [srcjar_output],
97108
progress_message = "Generating CelLiteDescriptor for: " + ctx.attr.name,
98109
executable = ctx.executable._tool,
@@ -103,8 +114,8 @@ def _generate_cel_lite_descriptor_class(ctx):
103114
java_lite_proto_cel_library_rule = rule(
104115
implementation = _generate_cel_lite_descriptor_class,
105116
attrs = {
106-
"java_descriptor_class_name": attr.string(),
107-
"descriptor": attr.label(
117+
"java_descriptor_class_suffix": attr.string(),
118+
"descriptors": attr.label_list(
108119
providers = [ProtoInfo],
109120
),
110121
"debug": attr.bool(),

protobuf/src/main/java/dev/cel/protobuf/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ java_library(
4747
":cel_lite_descriptor",
4848
":debug_printer",
4949
":lite_descriptor_codegen_metadata",
50-
"//common:cel_descriptors",
5150
"//common/internal:proto_java_qualified_names",
5251
"//common/internal:well_known_proto",
5352
"@maven//:com_google_guava_guava",

0 commit comments

Comments
 (0)