Skip to content

Commit

Permalink
Merge pull request protocolbuffers#9734 from mkruskal-google/sync-stage
Browse files Browse the repository at this point in the history
Integrate from Piper for C++, Java, and Python
  • Loading branch information
mkruskal-google committed Apr 4, 2022
2 parents 3be07ab + 701650b commit 1ac0539
Show file tree
Hide file tree
Showing 99 changed files with 1,344 additions and 669 deletions.
1 change: 1 addition & 0 deletions cmake/tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ set(tests_files
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/annotation_test_util.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/command_line_interface_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/cpp/bootstrap_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/cpp/message_size_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/cpp/metadata_test.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/cpp/move_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/cpp/plugin_unittest.cc
Expand Down
4 changes: 2 additions & 2 deletions conformance/binary_json_conformance_suite.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2226,11 +2226,11 @@ void BinaryAndJsonConformanceSuite::RunJsonTestsForNonRepeatedTypes() {
"optional_aliased_enum: ALIAS_BAZ");
RunValidJsonTest(
"EnumFieldWithAliasUseAlias", REQUIRED,
R"({"optionalAliasedEnum": "QUX"})",
R"({"optionalAliasedEnum": "MOO"})",
"optional_aliased_enum: ALIAS_BAZ");
RunValidJsonTest(
"EnumFieldWithAliasLowerCase", REQUIRED,
R"({"optionalAliasedEnum": "qux"})",
R"({"optionalAliasedEnum": "moo"})",
"optional_aliased_enum: ALIAS_BAZ");
RunValidJsonTest(
"EnumFieldWithAliasDifferentCase", REQUIRED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ public static partial class TestMessagesProto3Reflection {
"dG8zLkZvcmVpZ25FbnVtOgI4ASI5CgpOZXN0ZWRFbnVtEgcKA0ZPTxAAEgcK",
"A0JBUhABEgcKA0JBWhACEhAKA05FRxD///////////8BIlkKC0FsaWFzZWRF",
"bnVtEg0KCUFMSUFTX0ZPTxAAEg0KCUFMSUFTX0JBUhABEg0KCUFMSUFTX0JB",
"WhACEgcKA1FVWBACEgcKA3F1eBACEgcKA2JBehACGgIQAUINCgtvbmVvZl9m",
"WhACEgcKA01PTxACEgcKA21vbxACEgcKA2JBehACGgIQAUINCgtvbmVvZl9m",
"aWVsZEoGCPUDEP8DIhsKDkZvcmVpZ25NZXNzYWdlEgkKAWMYASABKAUiFgoU",
"TnVsbEh5cG90aGVzaXNQcm90bzMiLwoORW51bU9ubHlQcm90bzMiHQoEQm9v",
"bBIKCgZrRmFsc2UQABIJCgVrVHJ1ZRABKkAKC0ZvcmVpZ25FbnVtEg8KC0ZP",
Expand Down Expand Up @@ -5432,8 +5432,8 @@ public enum AliasedEnum {
[pbr::OriginalName("ALIAS_FOO")] AliasFoo = 0,
[pbr::OriginalName("ALIAS_BAR")] AliasBar = 1,
[pbr::OriginalName("ALIAS_BAZ")] AliasBaz = 2,
[pbr::OriginalName("QUX", PreferredAlias = false)] Qux = 2,
[pbr::OriginalName("qux", PreferredAlias = false)] Qux_ = 2,
[pbr::OriginalName("MOO", PreferredAlias = false)] Moo = 2,
[pbr::OriginalName("moo", PreferredAlias = false)] Moo_ = 2,
[pbr::OriginalName("bAz", PreferredAlias = false)] BAz = 2,
}

Expand Down
12 changes: 6 additions & 6 deletions csharp/src/Google.Protobuf/Reflection/Descriptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9611,8 +9611,8 @@ public static partial class Types {
/// The name of the uninterpreted option. Each string represents a segment in
/// a dot-separated name. is_extension is true iff a segment represents an
/// extension (denoted with parentheses in options specs in .proto files).
/// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
/// "foo.(bar.baz).qux".
/// E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents
/// "foo.(bar.baz).moo".
/// </summary>
public sealed partial class NamePart : pb::IMessage<NamePart>
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
Expand Down Expand Up @@ -10241,13 +10241,13 @@ public sealed partial class Location : pb::IMessage<Location>
/// // Comment attached to baz.
/// // Another line attached to baz.
///
/// // Comment attached to qux.
/// // Comment attached to moo.
/// //
/// // Another line attached to qux.
/// optional double qux = 4;
/// // Another line attached to moo.
/// optional double moo = 4;
///
/// // Detached comment for corge. This is not leading or trailing comments
/// // to qux or corge because there are blank lines separating it from
/// // to moo or corge because there are blank lines separating it from
/// // both.
///
/// // Detached comment for corge paragraph 2.
Expand Down
6 changes: 3 additions & 3 deletions java/core/src/main/java/com/google/protobuf/Descriptors.java
Original file line number Diff line number Diff line change
Expand Up @@ -1295,13 +1295,13 @@ public boolean hasPresence() {
* }
* message Bar {
* extend Foo {
* optional int32 qux = 4321;
* optional int32 moo = 4321;
* }
* }
* </pre>
*
* Both {@code baz}'s and {@code qux}'s containing type is {@code Foo}. However, {@code baz}'s
* extension scope is {@code null} while {@code qux}'s extension scope is {@code Bar}.
* Both {@code baz}'s and {@code moo}'s containing type is {@code Foo}. However, {@code baz}'s
* extension scope is {@code null} while {@code moo}'s extension scope is {@code Bar}.
*/
public Descriptor getExtensionScope() {
if (!isExtension()) {
Expand Down
12 changes: 6 additions & 6 deletions java/core/src/main/java/com/google/protobuf/TextFormat.java
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ private static class MapEntryAdapter implements Comparable<MapEntryAdapter> {

private final FieldDescriptor.JavaType fieldType;

public MapEntryAdapter(Object entry, FieldDescriptor fieldDescriptor) {
MapEntryAdapter(Object entry, FieldDescriptor fieldDescriptor) {
if (entry instanceof MapEntry) {
this.mapEntry = (MapEntry) entry;
} else {
Expand All @@ -485,14 +485,14 @@ private static FieldDescriptor.JavaType extractFieldType(FieldDescriptor fieldDe
return fieldDescriptor.getMessageType().getFields().get(0).getJavaType();
}

public Object getKey() {
Object getKey() {
if (mapEntry != null) {
return mapEntry.getKey();
}
return null;
}

public Object getEntry() {
Object getEntry() {
if (mapEntry != null) {
return mapEntry;
}
Expand Down Expand Up @@ -1557,13 +1557,13 @@ private void detectSilentMarker(Tokenizer tokenizer) {

/**
* Determines if repeated values for non-repeated fields and oneofs are permitted. For example,
* given required/optional field "foo" and a oneof containing "baz" and "qux":
* given required/optional field "foo" and a oneof containing "baz" and "moo":
*
* <ul>
* <li>"foo: 1 foo: 2"
* <li>"baz: 1 qux: 2"
* <li>"baz: 1 moo: 2"
* <li>merging "foo: 2" into a proto in which foo is already set, or
* <li>merging "qux: 2" into a proto in which baz is already set.
* <li>merging "moo: 2" into a proto in which baz is already set.
* </ul>
*/
public enum SingularOverwritePolicy {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1498,7 +1498,7 @@ public void testSetOneofClearsOthers() throws Exception {
assertThat(message.hasFooStringPiece()).isTrue();
TestUtil.assertAtMostOneFieldSetOneof(message);

message = builder.setFooBytes(TestUtil.toBytes("qux")).buildPartial();
message = builder.setFooBytes(TestUtil.toBytes("moo")).buildPartial();
assertThat(message.hasFooBytes()).isTrue();
TestUtil.assertAtMostOneFieldSetOneof(message);

Expand All @@ -1508,7 +1508,7 @@ public void testSetOneofClearsOthers() throws Exception {

message =
builder
.setFooMessage(TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build())
.setFooMessage(TestOneof2.NestedMessage.newBuilder().setMooInt(234).build())
.buildPartial();
assertThat(message.hasFooMessage()).isTrue();
TestUtil.assertAtMostOneFieldSetOneof(message);
Expand Down Expand Up @@ -1625,31 +1625,31 @@ public void testOneofTypes() throws Exception {
{
// set
TestOneof2.Builder builder = TestOneof2.newBuilder();
assertThat(builder.getFooMessage().getQuxInt()).isEqualTo(0);
builder.setFooMessage(TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build());
assertThat(builder.getFooMessage().getMooInt()).isEqualTo(0);
builder.setFooMessage(TestOneof2.NestedMessage.newBuilder().setMooInt(234).build());
assertThat(builder.hasFooMessage()).isTrue();
assertThat(builder.getFooMessage().getQuxInt()).isEqualTo(234);
assertThat(builder.getFooMessage().getMooInt()).isEqualTo(234);
TestOneof2 message = builder.buildPartial();
assertThat(message.hasFooMessage()).isTrue();
assertThat(message.getFooMessage().getQuxInt()).isEqualTo(234);
assertThat(message.getFooMessage().getMooInt()).isEqualTo(234);

// clear
assertThat(builder.clearFooMessage().hasFooString()).isFalse();
message = builder.build();
assertThat(message.hasFooMessage()).isFalse();
assertThat(message.getFooMessage().getQuxInt()).isEqualTo(0);
assertThat(message.getFooMessage().getMooInt()).isEqualTo(0);

// nested builder
builder = TestOneof2.newBuilder();
assertThat(builder.getFooMessageOrBuilder())
.isSameInstanceAs(TestOneof2.NestedMessage.getDefaultInstance());
assertThat(builder.hasFooMessage()).isFalse();
builder.getFooMessageBuilder().setQuxInt(123);
builder.getFooMessageBuilder().setMooInt(123);
assertThat(builder.hasFooMessage()).isTrue();
assertThat(builder.getFooMessage().getQuxInt()).isEqualTo(123);
assertThat(builder.getFooMessage().getMooInt()).isEqualTo(123);
message = builder.build();
assertThat(message.hasFooMessage()).isTrue();
assertThat(message.getFooMessage().getQuxInt()).isEqualTo(123);
assertThat(message.getFooMessage().getMooInt()).isEqualTo(123);
}

// LazyMessage is tested in LazyMessageLiteTest.java
Expand Down Expand Up @@ -1689,10 +1689,10 @@ public void testOneofMergeNonMessage() throws Exception {
public void testOneofMergeMessage_mergeIntoNewBuilder() {
TestOneof2.Builder builder = TestOneof2.newBuilder();
TestOneof2 message =
builder.setFooMessage(TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()).build();
builder.setFooMessage(TestOneof2.NestedMessage.newBuilder().setMooInt(234).build()).build();
TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build();
assertThat(message2.hasFooMessage()).isTrue();
assertThat(message2.getFooMessage().getQuxInt()).isEqualTo(234);
assertThat(message2.getFooMessage().getMooInt()).isEqualTo(234);
}

@Test
Expand Down Expand Up @@ -1755,12 +1755,12 @@ public void testOneofSerialization() throws Exception {
TestOneof2.Builder builder = TestOneof2.newBuilder();
TestOneof2 message =
builder
.setFooMessage(TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build())
.setFooMessage(TestOneof2.NestedMessage.newBuilder().setMooInt(234).build())
.build();
ByteString serialized = message.toByteString();
TestOneof2 message2 = TestOneof2.parseFrom(serialized);
assertThat(message2.hasFooMessage()).isTrue();
assertThat(message2.getFooMessage().getQuxInt()).isEqualTo(234);
assertThat(message2.getFooMessage().getMooInt()).isEqualTo(234);
}
}

Expand Down
6 changes: 3 additions & 3 deletions java/core/src/test/java/com/google/protobuf/TestUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -2537,21 +2537,21 @@ public static void assertPackedExtensionsSet(TestPackedExtensionsLite message) {
// ===================================================================
// oneof
public static void setOneof(TestOneof2.Builder message) {
message.setFooLazyMessage(TestOneof2.NestedMessage.newBuilder().setQuxInt(100).build());
message.setFooLazyMessage(TestOneof2.NestedMessage.newBuilder().setMooInt(100).build());
message.setBarString("101");
message.setBazInt(102);
message.setBazString("103");
}

public static void assertOneofSet(TestOneof2 message) {
Assert.assertTrue(message.hasFooLazyMessage());
Assert.assertTrue(message.getFooLazyMessage().hasQuxInt());
Assert.assertTrue(message.getFooLazyMessage().hasMooInt());

Assert.assertTrue(message.hasBarString());
Assert.assertTrue(message.hasBazInt());
Assert.assertTrue(message.hasBazString());

Assert.assertEquals(100, message.getFooLazyMessage().getQuxInt());
Assert.assertEquals(100, message.getFooLazyMessage().getMooInt());
Assert.assertEquals("101", message.getBarString());
Assert.assertEquals(102, message.getBazInt());
Assert.assertEquals("103", message.getBazString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ FieldMaskTree mergeFromFieldMask(FieldMask mask) {
* <li>If all children of a node have been removed, the node itself will be removed as well.
* That is, if "foo" only has one child "bar" and "foo.bar" only has one child "baz",
* removing "foo.bar.barz" would remove both "foo" and "foo.bar". If "foo" has both "bar"
* and "qux" as children, removing "foo.bar" would leave the path "foo.qux" intact.
* and "moo" as children, removing "foo.bar" would leave the path "foo.moo" intact.
* <li>If the field path to remove is a non-exist sub-path, nothing will be changed.
* </ul>
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1718,7 +1718,8 @@ private void mergeRepeatedField(
FieldDescriptor field, JsonElement json, Message.Builder builder)
throws InvalidProtocolBufferException {
if (!(json instanceof JsonArray)) {
throw new InvalidProtocolBufferException("Expect an array but found: " + json);
throw new InvalidProtocolBufferException(
"Expected an array for " + field.getName() + " but found " + json);
}
JsonArray array = (JsonArray) json;
for (int i = 0; i < array.size(); ++i) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -820,6 +820,23 @@ public void testMapEnumNullValueIsIgnored() throws Exception {
assertThat(map.getInt32ToEnumMapMap()).isEmpty();
}

@Test
// https://github.com/protocolbuffers/protobuf/issues/7456
public void testArrayTypeMismatch() throws IOException {
TestAllTypes.Builder builder = TestAllTypes.newBuilder();
try {
mergeFromJson(
"{\n"
+ " \"repeated_int32\": 5\n"
+ "}",
builder);
assertWithMessage("should have thrown exception for incorrect type").fail();
} catch (InvalidProtocolBufferException expected) {
assertThat(expected).hasMessageThat()
.isEqualTo("Expected an array for repeated_int32 but found 5");
}
}

@Test
public void testParserAcceptNonQuotedObjectKey() throws Exception {
TestMap.Builder builder = TestMap.newBuilder();
Expand Down
8 changes: 4 additions & 4 deletions js/binary/reader_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ describe('binaryReaderTest', function() {
it('testInstanceCaches', /** @suppress {visibility} */ function() {
var writer = new jspb.BinaryWriter();
var dummyMessage = /** @type {!jspb.BinaryMessage} */ ({});
writer.writeMessage(1, dummyMessage, goog.nullFunction);
writer.writeMessage(2, dummyMessage, goog.nullFunction);
writer.writeMessage(1, dummyMessage, () => {});
writer.writeMessage(2, dummyMessage, () => {});

var buffer = writer.getResultBuffer();

Expand Down Expand Up @@ -139,7 +139,7 @@ describe('binaryReaderTest', function() {
var dummyMessage = /** @type {!jspb.BinaryMessage} */ ({});
reader.nextField();
assertThrows(function() {
reader.readMessage(dummyMessage, goog.nullFunction);
reader.readMessage(dummyMessage, () => {});
});

// Reading past the end of the stream should trigger an assertion.
Expand Down Expand Up @@ -651,7 +651,7 @@ describe('binaryReaderTest', function() {
});

// Add one empty message.
writer.writeMessage(6, dummyMessage, goog.nullFunction);
writer.writeMessage(6, dummyMessage, () => {});

writer.writeInt32(7, 700);

Expand Down
2 changes: 1 addition & 1 deletion js/binary/writer_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ describe('binaryWriterTest', function() {
var dummyMessage = /** @type {!jspb.BinaryMessage} */ ({});

assertFails(function() {
writer.writeMessage(-1, dummyMessage, goog.nullFunction);
writer.writeMessage(-1, dummyMessage, () => {});
});

// Writing invalid field indices should assert.
Expand Down
8 changes: 4 additions & 4 deletions js/compatibility_tests/v3.0.0/binary/reader_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ describe('binaryReaderTest', function() {
it('testInstanceCaches', /** @suppress {visibility} */ function() {
var writer = new jspb.BinaryWriter();
var dummyMessage = /** @type {!jspb.BinaryMessage} */({});
writer.writeMessage(1, dummyMessage, goog.nullFunction);
writer.writeMessage(2, dummyMessage, goog.nullFunction);
writer.writeMessage(1, dummyMessage, () => {});
writer.writeMessage(2, dummyMessage, () => {});

var buffer = writer.getResultBuffer();

Expand Down Expand Up @@ -138,7 +138,7 @@ describe('binaryReaderTest', function() {
var dummyMessage = /** @type {!jspb.BinaryMessage} */({});
reader.nextField();
assertThrows(function() {
reader.readMessage(dummyMessage, goog.nullFunction);
reader.readMessage(dummyMessage, () => {});
});

// Reading past the end of the stream should trigger an assertion.
Expand Down Expand Up @@ -596,7 +596,7 @@ describe('binaryReaderTest', function() {
});

// Add one empty message.
writer.writeMessage(6, dummyMessage, goog.nullFunction);
writer.writeMessage(6, dummyMessage, () => {});

writer.writeInt32(7, 700);

Expand Down
2 changes: 1 addition & 1 deletion js/compatibility_tests/v3.0.0/binary/writer_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe('binaryWriterTest', function() {
var dummyMessage = /** @type {!jspb.BinaryMessage} */({});

assertFails(function() {
writer.writeMessage(-1, dummyMessage, goog.nullFunction);
writer.writeMessage(-1, dummyMessage, () => {});
});

// Writing invalid field indices should assert.
Expand Down
8 changes: 4 additions & 4 deletions js/compatibility_tests/v3.1.0/binary/reader_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ describe('binaryReaderTest', function() {
it('testInstanceCaches', /** @suppress {visibility} */ function() {
var writer = new jspb.BinaryWriter();
var dummyMessage = /** @type {!jspb.BinaryMessage} */ ({});
writer.writeMessage(1, dummyMessage, goog.nullFunction);
writer.writeMessage(2, dummyMessage, goog.nullFunction);
writer.writeMessage(1, dummyMessage, () => {});
writer.writeMessage(2, dummyMessage, () => {});

var buffer = writer.getResultBuffer();

Expand Down Expand Up @@ -138,7 +138,7 @@ describe('binaryReaderTest', function() {
var dummyMessage = /** @type {!jspb.BinaryMessage} */ ({});
reader.nextField();
assertThrows(function() {
reader.readMessage(dummyMessage, goog.nullFunction);
reader.readMessage(dummyMessage, () => {});
});

// Reading past the end of the stream should trigger an assertion.
Expand Down Expand Up @@ -620,7 +620,7 @@ describe('binaryReaderTest', function() {
});

// Add one empty message.
writer.writeMessage(6, dummyMessage, goog.nullFunction);
writer.writeMessage(6, dummyMessage, () => {});

writer.writeInt32(7, 700);

Expand Down
2 changes: 1 addition & 1 deletion js/compatibility_tests/v3.1.0/binary/writer_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe('binaryWriterTest', function() {
var dummyMessage = /** @type {!jspb.BinaryMessage} */ ({});

assertFails(function() {
writer.writeMessage(-1, dummyMessage, goog.nullFunction);
writer.writeMessage(-1, dummyMessage, () => {});
});

// Writing invalid field indices should assert.
Expand Down
Loading

0 comments on commit 1ac0539

Please sign in to comment.