Skip to content

Commit 49af455

Browse files
internal changes
PiperOrigin-RevId: 891900837
1 parent 5cf07b9 commit 49af455

File tree

5 files changed

+140
-314
lines changed

5 files changed

+140
-314
lines changed

java/core/src/main/java/com/google/protobuf/ExtensionSchemaFull.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,8 @@ void parseLengthPrefixedMessageSetItem(
494494
} else {
495495
extensions.setField(
496496
extensionInfo.descriptor,
497-
new LazyField(extensionInfo.defaultInstance, extensionRegistry, reader.readBytes()));
497+
new LazyField(
498+
extensionInfo.defaultInstance, extensionRegistry, reader.readBytes()));
498499
}
499500
}
500501

java/core/src/main/java/com/google/protobuf/FieldSet.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -273,12 +273,6 @@ public Object getField(final T descriptor) {
273273
return o;
274274
}
275275

276-
/** Returns true if the field is a lazy field and it is corrupted. */
277-
boolean lazyFieldCorrupted(final T descriptor) {
278-
Object o = fields.get(descriptor);
279-
return o instanceof LazyField && ((LazyField) o).isCorrupted();
280-
}
281-
282276
/**
283277
* Useful for implementing {@link Message.Builder#setField(Descriptors.FieldDescriptor,Object)}.
284278
*/
@@ -838,7 +832,8 @@ private int getMessageSetSerializedSize(final Map.Entry<T, Object> entry) {
838832
&& !descriptor.isRepeated()
839833
&& !descriptor.isPacked()) {
840834
if (value instanceof LazyField) {
841-
return ((LazyField) value).computeMessageSetExtensionSize(entry.getKey().getNumber());
835+
return ((LazyField) value)
836+
.computeMessageSetExtensionSize(entry.getKey().getNumber());
842837
} else {
843838
return CodedOutputStream.computeMessageSetExtensionSize(
844839
entry.getKey().getNumber(), (MessageLite) value);

java/core/src/main/java/com/google/protobuf/MessageReflection.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,8 @@ private static void mergeMessageSetExtensionFromBytes(
13771377
target.setField(field, value);
13781378
} else {
13791379
// Use LazyField to load MessageSet lazily.
1380-
LazyField lazyField = new LazyField(extension.defaultInstance, extensionRegistry, rawBytes);
1380+
LazyField lazyField =
1381+
new LazyField(extension.defaultInstance, extensionRegistry, rawBytes);
13811382
target.setField(field, lazyField);
13821383
}
13831384
}
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package com.google.protobuf;
2+
3+
import static com.google.common.truth.Truth.assertThat;
4+
5+
import proto2_unittest.UnittestProto.TestAllExtensions;
6+
import proto2_unittest.UnittestProto.TestAllTypes;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.junit.runners.JUnit4;
10+
11+
@RunWith(JUnit4.class)
12+
public final class LazyFieldTest {
13+
14+
private static final ExtensionRegistryLite EXTENSION_REGISTRY = TestUtil.getExtensionRegistry();
15+
16+
@Test
17+
public void testGetValue() {
18+
MessageLite message = TestUtil.getAllSet();
19+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
20+
21+
assertThat(lazyField.getValue()).isEqualTo(message);
22+
}
23+
24+
@Test
25+
public void testGetValueContainingExtensions() {
26+
TestAllExtensions message = TestUtil.getAllExtensionsSet();
27+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
28+
29+
assertThat(lazyField.getValue()).isEqualTo(message);
30+
}
31+
32+
@Test
33+
public void testGetValueMemoized() {
34+
MessageLite message = TestUtil.getAllSet();
35+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
36+
MessageLite lazyFieldMessage1 = lazyField.getValue();
37+
MessageLite lazyFieldMessage2 = lazyField.getValue();
38+
39+
assertThat(lazyFieldMessage1).isEqualTo(message);
40+
assertThat(lazyFieldMessage1).isSameInstanceAs(lazyFieldMessage2);
41+
}
42+
43+
@Test
44+
public void testGetValueOnInvalidData_defaultInstance() {
45+
LazyField lazyField =
46+
new LazyField(
47+
TestAllTypes.getDefaultInstance(),
48+
EXTENSION_REGISTRY,
49+
ByteString.copyFromUtf8("invalid"));
50+
51+
assertThat(lazyField.getValue()).isEqualTo(TestAllTypes.getDefaultInstance());
52+
}
53+
54+
@Test
55+
public void testGetSerializedSize() {
56+
TestAllExtensions message = TestUtil.getAllExtensionsSet();
57+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
58+
59+
assertThat(message.getSerializedSize()).isEqualTo(lazyField.getSerializedSize());
60+
}
61+
62+
@Test
63+
public void testGetSerializedSizeContainingExtensions() {
64+
TestAllExtensions message = TestUtil.getAllExtensionsSet();
65+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
66+
67+
assertThat(lazyField.getSerializedSize()).isEqualTo(message.getSerializedSize());
68+
}
69+
70+
@Test
71+
public void testGetByteString() {
72+
MessageLite message = TestUtil.getAllSet();
73+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
74+
75+
assertThat(lazyField.toByteString()).isEqualTo(message.toByteString());
76+
}
77+
78+
@Test
79+
public void testGetByteStringContainingExtensions() {
80+
TestAllExtensions message = TestUtil.getAllExtensionsSet();
81+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
82+
83+
assertThat(lazyField.toByteString()).isEqualTo(message.toByteString());
84+
}
85+
86+
@Test
87+
public void testGetByteStringMemoized() {
88+
MessageLite message = TestUtil.getAllSet();
89+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
90+
ByteString lazyFieldByteString1 = lazyField.toByteString();
91+
ByteString lazyFieldByteString2 = lazyField.toByteString();
92+
93+
assertThat(lazyFieldByteString1).isEqualTo(message.toByteString());
94+
assertThat(lazyFieldByteString1).isSameInstanceAs(lazyFieldByteString2);
95+
}
96+
97+
@Test
98+
public void testHashCode() {
99+
MessageLite message = TestUtil.getAllSet();
100+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
101+
assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
102+
var unused = lazyField.getValue();
103+
assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
104+
}
105+
106+
@Test
107+
public void testHashCodeContainingExtensions() throws Exception {
108+
TestAllExtensions message = TestUtil.getAllExtensionsSet();
109+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
110+
assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
111+
var unused = lazyField.getValue();
112+
assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
113+
}
114+
115+
@Test
116+
public void testEqualsObject() {
117+
MessageLite message = TestUtil.getAllSet();
118+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
119+
assertThat(lazyField).isEqualTo(message);
120+
}
121+
122+
@Test
123+
@SuppressWarnings("TruthIncompatibleType")
124+
public void testEqualsObjectContainingExtensions() throws Exception {
125+
TestAllExtensions message = TestUtil.getAllExtensionsSet();
126+
LazyField lazyField = createLazyFieldWithBytesFromMessage(message);
127+
assertThat(lazyField).isEqualTo(message);
128+
}
129+
130+
private LazyField createLazyFieldWithBytesFromMessage(MessageLite message) {
131+
return new LazyField(
132+
message.getDefaultInstanceForType(), EXTENSION_REGISTRY, message.toByteString());
133+
}
134+
}

0 commit comments

Comments
 (0)