Skip to content

Commit b9e7639

Browse files
committed
Revert "Wrap FieldMask via shared message-to-struct hook on the base converter"
This reverts commit 984193b.
1 parent 984193b commit b9e7639

4 files changed

Lines changed: 18 additions & 38 deletions

File tree

common/src/main/java/dev/cel/common/values/BaseProtoCelValueConverter.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import static com.google.common.collect.ImmutableList.toImmutableList;
1818
import static com.google.common.collect.ImmutableMap.toImmutableMap;
1919

20+
import com.google.common.base.CaseFormat;
21+
import com.google.common.base.Joiner;
2022
import com.google.common.base.Preconditions;
2123
import com.google.common.collect.ImmutableList;
2224
import com.google.common.collect.ImmutableMap;
@@ -27,6 +29,7 @@
2729
import com.google.protobuf.BytesValue;
2830
import com.google.protobuf.DoubleValue;
2931
import com.google.protobuf.Duration;
32+
import com.google.protobuf.FieldMask;
3033
import com.google.protobuf.FloatValue;
3134
import com.google.protobuf.Int32Value;
3235
import com.google.protobuf.Int64Value;
@@ -41,6 +44,8 @@
4144
import dev.cel.common.annotations.Internal;
4245
import dev.cel.common.internal.ProtoTimeUtils;
4346
import dev.cel.common.internal.WellKnownProto;
47+
import java.util.ArrayList;
48+
import java.util.List;
4449

4550
/**
4651
* {@code BaseProtoCelValueConverter} contains the common logic for converting between native Java
@@ -68,12 +73,6 @@ public Object toRuntimeValue(Object value) {
6873
return super.toRuntimeValue(value);
6974
}
7075

71-
/** Wraps a protobuf message as a navigable struct value. */
72-
protected StructValue<String, ?> fromProtoMessageToStructValue(MessageLiteOrBuilder message) {
73-
throw new UnsupportedOperationException(
74-
"This converter does not support wrapping protobuf messages as struct values.");
75-
}
76-
7776
protected Object fromWellKnownProto(MessageLiteOrBuilder message, WellKnownProto wellKnownProto) {
7877
switch (wellKnownProto) {
7978
case JSON_VALUE:
@@ -105,7 +104,14 @@ protected Object fromWellKnownProto(MessageLiteOrBuilder message, WellKnownProto
105104
case UINT64_VALUE:
106105
return UnsignedLong.fromLongBits(((UInt64Value) message).getValue());
107106
case FIELD_MASK:
108-
return fromProtoMessageToStructValue(message);
107+
FieldMask fieldMask = (FieldMask) message;
108+
List<String> paths = new ArrayList<>(fieldMask.getPathsCount());
109+
for (String path : fieldMask.getPathsList()) {
110+
if (!path.isEmpty()) {
111+
paths.add(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, path));
112+
}
113+
}
114+
return normalizePrimitive(Joiner.on(",").join(paths));
109115
case EMPTY:
110116
return ImmutableMap.of();
111117
default:

common/src/main/java/dev/cel/common/values/ProtoCelValueConverter.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,14 @@ protected Object fromWellKnownProto(MessageLiteOrBuilder msg, WellKnownProto wel
7171
"Unpacking failed for message: " + message.getDescriptorForType().getFullName(), e);
7272
}
7373
return toRuntimeValue(unpackedMessage);
74+
case FIELD_MASK:
75+
return ProtoMessageValue.create(
76+
(Message) message, celDescriptorPool, this, celOptions.enableJsonFieldNames());
7477
default:
7578
return super.fromWellKnownProto(message, wellKnownProto);
7679
}
7780
}
7881

79-
@Override
80-
protected ProtoMessageValue fromProtoMessageToStructValue(MessageLiteOrBuilder message) {
81-
return ProtoMessageValue.create(
82-
(Message) message, celDescriptorPool, this, celOptions.enableJsonFieldNames());
83-
}
84-
8582
@Override
8683
public Object toRuntimeValue(Object value) {
8784
if (value instanceof EnumValueDescriptor) {
@@ -105,7 +102,8 @@ public Object toRuntimeValue(Object value) {
105102
WellKnownProto wellKnownProto =
106103
WellKnownProto.getByTypeName(message.getDescriptorForType().getFullName()).orElse(null);
107104
if (wellKnownProto == null) {
108-
return fromProtoMessageToStructValue(message);
105+
return ProtoMessageValue.create(
106+
message, celDescriptorPool, this, celOptions.enableJsonFieldNames());
109107
}
110108

111109
return fromWellKnownProto(message, wellKnownProto);

common/src/main/java/dev/cel/common/values/ProtoLiteCelValueConverter.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import com.google.protobuf.CodedInputStream;
2929
import com.google.protobuf.ExtensionRegistryLite;
3030
import com.google.protobuf.MessageLite;
31-
import com.google.protobuf.MessageLiteOrBuilder;
3231
import com.google.protobuf.WireFormat;
3332
import dev.cel.common.annotations.Internal;
3433
import dev.cel.common.internal.CelLiteDescriptorPool;
@@ -185,17 +184,6 @@ public Object toRuntimeValue(Object value) {
185184
return super.toRuntimeValue(value);
186185
}
187186

188-
@Override
189-
protected ProtoMessageLiteValue fromProtoMessageToStructValue(MessageLiteOrBuilder message) {
190-
MessageLite msg = (MessageLite) message;
191-
MessageLiteDescriptor descriptor =
192-
descriptorPool
193-
.findDescriptor(msg)
194-
.orElseThrow(
195-
() -> new NoSuchElementException("Could not find a descriptor for: " + msg));
196-
return ProtoMessageLiteValue.create(msg, descriptor.getProtoTypeName(), this);
197-
}
198-
199187
private Object getDefaultValue(FieldLiteDescriptor fieldDescriptor) {
200188
EncodingType encodingType = fieldDescriptor.getEncodingType();
201189
switch (encodingType) {

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.google.protobuf.DoubleValue;
2828
import com.google.protobuf.Duration;
2929
import com.google.protobuf.ExtensionRegistryLite;
30-
import com.google.protobuf.FieldMask;
3130
import com.google.protobuf.FloatValue;
3231
import com.google.protobuf.Int32Value;
3332
import com.google.protobuf.Int64Value;
@@ -105,17 +104,6 @@ public void fromProtoMessageToCelValue_withWellKnownProto_convertsToPrimitivesFr
105104
assertThat(adaptedValue).isEqualTo(testCase.value);
106105
}
107106

108-
@Test
109-
public void fromProtoMessageToCelValue_fieldMask_returnsProtoMessageLiteValue() {
110-
FieldMask fieldMask = FieldMask.newBuilder().addPaths("foo").addPaths("bar").build();
111-
112-
Object adaptedValue = PROTO_LITE_CEL_VALUE_CONVERTER.toRuntimeValue(fieldMask);
113-
114-
assertThat(adaptedValue).isInstanceOf(ProtoMessageLiteValue.class);
115-
assertThat(((ProtoMessageLiteValue) adaptedValue).select("paths"))
116-
.isEqualTo(ImmutableList.of("foo", "bar"));
117-
}
118-
119107
/** Test cases for repeated_int64: 1L,2L,3L */
120108
@SuppressWarnings("ImmutableEnumChecker") // Test only
121109
private enum RepeatedFieldBytesTestCase {

0 commit comments

Comments
 (0)