Merge pull request #1810 from xfxyjwf/versioning
Versioning Java GeneratedMessage class
This commit is contained in:
commit
af8732ec11
13 changed files with 2879 additions and 768 deletions
128
Makefile.am
128
Makefile.am
|
@ -51,11 +51,13 @@ pkgconfig_DATA = protobuf.pc protobuf-lite.pc
|
|||
csharp_EXTRA_DIST= \
|
||||
csharp/.gitignore \
|
||||
csharp/CHANGES.txt \
|
||||
csharp/Google.Protobuf.Tools.nuspec \
|
||||
csharp/README.md \
|
||||
csharp/build_packages.bat \
|
||||
csharp/buildall.sh \
|
||||
csharp/generate_protos.sh \
|
||||
csharp/keys/Google.Protobuf.public.snk \
|
||||
csharp/keys/Google.Protobuf.snk \
|
||||
csharp/keys/README.md \
|
||||
csharp/protos/unittest_issues.proto \
|
||||
csharp/src/AddressBook/AddPerson.cs \
|
||||
|
@ -95,6 +97,7 @@ csharp_EXTRA_DIST= \
|
|||
csharp/src/Google.Protobuf.Test/SampleEnum.cs \
|
||||
csharp/src/Google.Protobuf.Test/SampleMessages.cs \
|
||||
csharp/src/Google.Protobuf.Test/TestCornerCases.cs \
|
||||
csharp/src/Google.Protobuf.Test/TestProtos/ForeignMessagePartial.cs \
|
||||
csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs \
|
||||
csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs \
|
||||
csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs \
|
||||
|
@ -103,6 +106,7 @@ csharp_EXTRA_DIST= \
|
|||
csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs \
|
||||
csharp/src/Google.Protobuf.Test/WellKnownTypes/AnyTest.cs \
|
||||
csharp/src/Google.Protobuf.Test/WellKnownTypes/DurationTest.cs \
|
||||
csharp/src/Google.Protobuf.Test/WellKnownTypes/FieldMaskTest.cs \
|
||||
csharp/src/Google.Protobuf.Test/WellKnownTypes/TimestampTest.cs \
|
||||
csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs \
|
||||
csharp/src/Google.Protobuf.Test/project.json \
|
||||
|
@ -120,6 +124,7 @@ csharp_EXTRA_DIST= \
|
|||
csharp/src/Google.Protobuf/FieldCodec.cs \
|
||||
csharp/src/Google.Protobuf/FrameworkPortability.cs \
|
||||
csharp/src/Google.Protobuf/Google.Protobuf.xproj \
|
||||
csharp/src/Google.Protobuf/ICustomDiagnosticMessage.cs \
|
||||
csharp/src/Google.Protobuf/IDeepCloneable.cs \
|
||||
csharp/src/Google.Protobuf/IMessage.cs \
|
||||
csharp/src/Google.Protobuf/InvalidJsonException.cs \
|
||||
|
@ -167,6 +172,7 @@ csharp_EXTRA_DIST= \
|
|||
csharp/src/Google.Protobuf/WellKnownTypes/DurationPartial.cs \
|
||||
csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs \
|
||||
csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs \
|
||||
csharp/src/Google.Protobuf/WellKnownTypes/FieldMaskPartial.cs \
|
||||
csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs \
|
||||
csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs \
|
||||
csharp/src/Google.Protobuf/WellKnownTypes/TimeExtensions.cs \
|
||||
|
@ -200,6 +206,7 @@ java_EXTRA_DIST=
|
|||
java/core/src/main/java/com/google/protobuf/Descriptors.java \
|
||||
java/core/src/main/java/com/google/protobuf/DoubleArrayList.java \
|
||||
java/core/src/main/java/com/google/protobuf/DynamicMessage.java \
|
||||
java/core/src/main/java/com/google/protobuf/ExperimentalApi.java \
|
||||
java/core/src/main/java/com/google/protobuf/Extension.java \
|
||||
java/core/src/main/java/com/google/protobuf/ExtensionLite.java \
|
||||
java/core/src/main/java/com/google/protobuf/ExtensionRegistry.java \
|
||||
|
@ -209,6 +216,7 @@ java_EXTRA_DIST=
|
|||
java/core/src/main/java/com/google/protobuf/FloatArrayList.java \
|
||||
java/core/src/main/java/com/google/protobuf/GeneratedMessage.java \
|
||||
java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java \
|
||||
java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java \
|
||||
java/core/src/main/java/com/google/protobuf/IntArrayList.java \
|
||||
java/core/src/main/java/com/google/protobuf/Internal.java \
|
||||
java/core/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java \
|
||||
|
@ -234,6 +242,7 @@ java_EXTRA_DIST=
|
|||
java/core/src/main/java/com/google/protobuf/ProtocolMessageEnum.java \
|
||||
java/core/src/main/java/com/google/protobuf/ProtocolStringList.java \
|
||||
java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java \
|
||||
java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java \
|
||||
java/core/src/main/java/com/google/protobuf/RopeByteString.java \
|
||||
java/core/src/main/java/com/google/protobuf/RpcCallback.java \
|
||||
java/core/src/main/java/com/google/protobuf/RpcChannel.java \
|
||||
|
@ -242,6 +251,7 @@ java_EXTRA_DIST=
|
|||
java/core/src/main/java/com/google/protobuf/Service.java \
|
||||
java/core/src/main/java/com/google/protobuf/ServiceException.java \
|
||||
java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java \
|
||||
java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java \
|
||||
java/core/src/main/java/com/google/protobuf/SmallSortedMap.java \
|
||||
java/core/src/main/java/com/google/protobuf/TextFormat.java \
|
||||
java/core/src/main/java/com/google/protobuf/TextFormatEscaper.java \
|
||||
|
@ -252,6 +262,7 @@ java_EXTRA_DIST=
|
|||
java/core/src/main/java/com/google/protobuf/UnknownFieldSetLite.java \
|
||||
java/core/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java \
|
||||
java/core/src/main/java/com/google/protobuf/UnsafeByteOperations.java \
|
||||
java/core/src/main/java/com/google/protobuf/UnsafeUtil.java \
|
||||
java/core/src/main/java/com/google/protobuf/Utf8.java \
|
||||
java/core/src/main/java/com/google/protobuf/WireFormat.java \
|
||||
java/core/src/test/java/com/google/protobuf/AbstractMessageTest.java \
|
||||
|
@ -291,16 +302,18 @@ java_EXTRA_DIST=
|
|||
java/core/src/test/java/com/google/protobuf/MessageTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/NestedBuildersTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/NioByteStringTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/ParserTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/ProtobufArrayListTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/RepeatedFieldBuilderV3Test.java \
|
||||
java/core/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/RopeByteStringTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/ServiceTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/SingleFieldBuilderV3Test.java \
|
||||
java/core/src/test/java/com/google/protobuf/SmallSortedMapTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/TestBadIdentifiers.java \
|
||||
java/core/src/test/java/com/google/protobuf/TestUtil.java \
|
||||
java/core/src/test/java/com/google/protobuf/TestUtilLite.java \
|
||||
java/core/src/test/java/com/google/protobuf/TextFormatParseInfoTreeTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/TextFormatParseLocationTest.java \
|
||||
java/core/src/test/java/com/google/protobuf/TextFormatTest.java \
|
||||
|
@ -332,13 +345,17 @@ java_EXTRA_DIST=
|
|||
java/core/src/test/proto/com/google/protobuf/test_check_utf8_size.proto \
|
||||
java/core/src/test/proto/com/google/protobuf/test_custom_options.proto \
|
||||
java/core/src/test/proto/com/google/protobuf/test_extra_interfaces.proto \
|
||||
java/lite/generate-sources-build.xml \
|
||||
java/lite/generate-test-sources-build.xml \
|
||||
java/lite/pom.xml \
|
||||
java/pom.xml \
|
||||
java/util/pom.xml \
|
||||
java/util/src/main/java/com/google/protobuf/util/Durations.java \
|
||||
java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java \
|
||||
java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java \
|
||||
java/util/src/main/java/com/google/protobuf/util/JsonFormat.java \
|
||||
java/util/src/main/java/com/google/protobuf/util/TimeUtil.java \
|
||||
java/util/src/main/java/com/google/protobuf/util/Timestamps.java \
|
||||
java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java \
|
||||
java/util/src/test/java/com/google/protobuf/util/FieldMaskUtilTest.java \
|
||||
java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java \
|
||||
|
@ -465,6 +482,33 @@ objectivec_EXTRA_DIST= \
|
|||
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \
|
||||
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \
|
||||
objectivec/README.md \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.pbxproj \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/OSXCocoaPodsTester.xcscheme \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.h \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.m \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Base.lproj/MainMenu.xib \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Info.plist \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/main.m \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-framework \
|
||||
objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-static \
|
||||
objectivec/Tests/CocoaPods/README.md \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-framework \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-static \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.pbxproj \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/iOSCocoaPodsTester.xcscheme \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.h \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.m \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/LaunchScreen.storyboard \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/Main.storyboard \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Info.plist \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.h \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.m \
|
||||
objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/main.m \
|
||||
objectivec/Tests/CocoaPods/run_tests.sh \
|
||||
objectivec/Tests/golden_message \
|
||||
objectivec/Tests/golden_packed_fields_message \
|
||||
objectivec/Tests/GPBARCUnittestProtos.m \
|
||||
|
@ -543,6 +587,7 @@ python_EXTRA_DIST= \
|
|||
python/google/protobuf/internal/enum_type_wrapper.py \
|
||||
python/google/protobuf/internal/factory_test1.proto \
|
||||
python/google/protobuf/internal/factory_test2.proto \
|
||||
python/google/protobuf/internal/file_options_test.proto \
|
||||
python/google/protobuf/internal/generator_test.py \
|
||||
python/google/protobuf/internal/import_test_package/__init__.py \
|
||||
python/google/protobuf/internal/import_test_package/inner.proto \
|
||||
|
@ -595,6 +640,7 @@ python_EXTRA_DIST= \
|
|||
python/google/protobuf/pyext/map_container.h \
|
||||
python/google/protobuf/pyext/message.cc \
|
||||
python/google/protobuf/pyext/message.h \
|
||||
python/google/protobuf/pyext/message_module.cc \
|
||||
python/google/protobuf/pyext/proto2_api_test.proto \
|
||||
python/google/protobuf/pyext/python.proto \
|
||||
python/google/protobuf/pyext/python_protobuf.h \
|
||||
|
@ -662,39 +708,48 @@ ruby_EXTRA_DIST= \
|
|||
ruby/tests/generated_code_test.rb \
|
||||
ruby/travis-test.sh
|
||||
|
||||
js_EXTRA_DIST= \
|
||||
js/README.md \
|
||||
js/binary/arith.js \
|
||||
js/binary/arith_test.js \
|
||||
js/binary/constants.js \
|
||||
js/binary/decoder.js \
|
||||
js/binary/decoder_test.js \
|
||||
js/binary/encoder.js \
|
||||
js/binary/proto_test.js \
|
||||
js/binary/reader.js \
|
||||
js/binary/reader_test.js \
|
||||
js/binary/utils.js \
|
||||
js/binary/utils_test.js \
|
||||
js/binary/writer.js \
|
||||
js/binary/writer_test.js \
|
||||
js/data.proto \
|
||||
js/debug.js \
|
||||
js/debug_test.js \
|
||||
js/gulpfile.js \
|
||||
js/jasmine.json \
|
||||
js/message.js \
|
||||
js/message_test.js \
|
||||
js/node_loader.js \
|
||||
js/package.json \
|
||||
js/proto3_test.js \
|
||||
js/proto3_test.proto \
|
||||
js/test.proto \
|
||||
js/test2.proto \
|
||||
js/test3.proto \
|
||||
js/test4.proto \
|
||||
js/test5.proto \
|
||||
js/test_bootstrap.js \
|
||||
js/testbinary.proto \
|
||||
js_EXTRA_DIST= \
|
||||
js/README.md \
|
||||
js/binary/arith.js \
|
||||
js/binary/arith_test.js \
|
||||
js/binary/constants.js \
|
||||
js/binary/decoder.js \
|
||||
js/binary/decoder_test.js \
|
||||
js/binary/encoder.js \
|
||||
js/binary/proto_test.js \
|
||||
js/binary/reader.js \
|
||||
js/binary/reader_test.js \
|
||||
js/binary/utils.js \
|
||||
js/binary/utils_test.js \
|
||||
js/binary/writer.js \
|
||||
js/binary/writer_test.js \
|
||||
js/commonjs/export.js \
|
||||
js/commonjs/export_asserts.js \
|
||||
js/commonjs/export_testdeps.js \
|
||||
js/commonjs/import_test.js \
|
||||
js/commonjs/jasmine.json \
|
||||
js/commonjs/rewrite_tests_for_commonjs.js \
|
||||
js/commonjs/test6/test6.proto \
|
||||
js/commonjs/test7/test7.proto \
|
||||
js/data.proto \
|
||||
js/debug.js \
|
||||
js/debug_test.js \
|
||||
js/gulpfile.js \
|
||||
js/jasmine.json \
|
||||
js/map.js \
|
||||
js/message.js \
|
||||
js/message_test.js \
|
||||
js/node_loader.js \
|
||||
js/package.json \
|
||||
js/proto3_test.js \
|
||||
js/proto3_test.proto \
|
||||
js/test.proto \
|
||||
js/test2.proto \
|
||||
js/test3.proto \
|
||||
js/test4.proto \
|
||||
js/test5.proto \
|
||||
js/test_bootstrap.js \
|
||||
js/testbinary.proto \
|
||||
js/testempty.proto
|
||||
|
||||
all_EXTRA_DIST=$(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST) $(js_EXTRA_DIST)
|
||||
|
@ -712,6 +767,7 @@ EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \
|
|||
WORKSPACE \
|
||||
cmake/CMakeLists.txt \
|
||||
cmake/README.md \
|
||||
cmake/examples.cmake \
|
||||
cmake/extract_includes.bat.in \
|
||||
cmake/install.cmake \
|
||||
cmake/libprotobuf.cmake \
|
||||
|
@ -720,6 +776,7 @@ EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \
|
|||
cmake/protobuf-config-version.cmake.in \
|
||||
cmake/protobuf-config.cmake.in \
|
||||
cmake/protobuf-module.cmake.in \
|
||||
cmake/protobuf-options.cmake \
|
||||
cmake/protoc.cmake \
|
||||
cmake/tests.cmake \
|
||||
editors/README.txt \
|
||||
|
@ -734,6 +791,7 @@ EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \
|
|||
examples/list_people.cc \
|
||||
examples/list_people.go \
|
||||
examples/AddPerson.java \
|
||||
examples/CMakeLists.txt \
|
||||
examples/ListPeople.java \
|
||||
examples/add_person.py \
|
||||
examples/list_people.py \
|
||||
|
|
|
@ -31,6 +31,14 @@ case "$1" in
|
|||
OLD_VERSION=3.0.0-beta-2
|
||||
OLD_VERSION_PROTOC=http://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.0-beta-2/protoc-3.0.0-beta-2-linux-x86_32.exe
|
||||
;;
|
||||
3.0.0-beta-3)
|
||||
OLD_VERSION=3.0.0-beta-3
|
||||
OLD_VERSION_PROTOC=http://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.0-beta-3/protoc-3.0.0-beta-3-linux-x86_32.exe
|
||||
;;
|
||||
3.0.0-beta-4)
|
||||
OLD_VERSION=3.0.0-beta-4
|
||||
OLD_VERSION_PROTOC=http://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.0-beta-4/protoc-3.0.0-beta-4-linux-x86_32.exe
|
||||
;;
|
||||
*)
|
||||
echo "[ERROR]: Unknown version number: $1"
|
||||
exit 1
|
||||
|
|
|
@ -1,191 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package com.google.protobuf.test;
|
||||
import com.google.protobuf.*;
|
||||
|
||||
import protobuf_unittest.UnittestProto.TestAllTypes;
|
||||
import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Tests for {@link RepeatedFieldBuilder}. This tests basic functionality.
|
||||
* More extensive testing is provided via other tests that exercise the
|
||||
* builder.
|
||||
*
|
||||
* @author jonp@google.com (Jon Perlow)
|
||||
*/
|
||||
public class RepeatedFieldBuilderTest extends TestCase {
|
||||
|
||||
public void testBasicUse() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
List<TestAllTypes> list = builder.build();
|
||||
assertEquals(2, list.size());
|
||||
assertEquals(0, list.get(0).getOptionalInt32());
|
||||
assertEquals(1, list.get(1).getOptionalInt32());
|
||||
assertIsUnmodifiable(list);
|
||||
|
||||
// Make sure it doesn't change.
|
||||
List<TestAllTypes> list2 = builder.build();
|
||||
assertSame(list, list2);
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
}
|
||||
|
||||
public void testGoingBackAndForth() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
// Convert to list
|
||||
List<TestAllTypes> list = builder.build();
|
||||
assertEquals(2, list.size());
|
||||
assertEquals(0, list.get(0).getOptionalInt32());
|
||||
assertEquals(1, list.get(1).getOptionalInt32());
|
||||
assertIsUnmodifiable(list);
|
||||
|
||||
// Update 0th item
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
builder.getBuilder(0).setOptionalString("foo");
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
list = builder.build();
|
||||
assertEquals(2, list.size());
|
||||
assertEquals(0, list.get(0).getOptionalInt32());
|
||||
assertEquals("foo", list.get(0).getOptionalString());
|
||||
assertEquals(1, list.get(1).getOptionalInt32());
|
||||
assertIsUnmodifiable(list);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
}
|
||||
|
||||
public void testVariousMethods() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(2).build());
|
||||
builder.addBuilder(0, TestAllTypes.getDefaultInstance())
|
||||
.setOptionalInt32(0);
|
||||
builder.addBuilder(TestAllTypes.getDefaultInstance()).setOptionalInt32(3);
|
||||
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
assertEquals(2, builder.getMessage(2).getOptionalInt32());
|
||||
assertEquals(3, builder.getMessage(3).getOptionalInt32());
|
||||
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
List<TestAllTypes> messages = builder.build();
|
||||
assertEquals(4, messages.size());
|
||||
assertSame(messages, builder.build()); // expect same list
|
||||
|
||||
// Remove a message.
|
||||
builder.remove(2);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
assertEquals(3, builder.getCount());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
assertEquals(3, builder.getMessage(2).getOptionalInt32());
|
||||
|
||||
// Remove a builder.
|
||||
builder.remove(0);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
assertEquals(2, builder.getCount());
|
||||
assertEquals(1, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(3, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
// Test clear.
|
||||
builder.clear();
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
assertEquals(0, builder.getCount());
|
||||
assertTrue(builder.isEmpty());
|
||||
}
|
||||
|
||||
public void testLists() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
builder.addMessage(0,
|
||||
TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
// Use list of builders.
|
||||
List<TestAllTypes.Builder> builders = builder.getBuilderList();
|
||||
assertEquals(0, builders.get(0).getOptionalInt32());
|
||||
assertEquals(1, builders.get(1).getOptionalInt32());
|
||||
builders.get(0).setOptionalInt32(10);
|
||||
builders.get(1).setOptionalInt32(11);
|
||||
|
||||
// Use list of protos
|
||||
List<TestAllTypes> protos = builder.getMessageList();
|
||||
assertEquals(10, protos.get(0).getOptionalInt32());
|
||||
assertEquals(11, protos.get(1).getOptionalInt32());
|
||||
|
||||
// Add an item to the builders and verify it's updated in both
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(12).build());
|
||||
assertEquals(3, builders.size());
|
||||
assertEquals(3, protos.size());
|
||||
}
|
||||
|
||||
private void assertIsUnmodifiable(List<?> list) {
|
||||
if (list == Collections.emptyList()) {
|
||||
// OKAY -- Need to check this b/c EmptyList allows you to call clear.
|
||||
} else {
|
||||
try {
|
||||
list.clear();
|
||||
fail("List wasn't immutable");
|
||||
} catch (UnsupportedOperationException e) {
|
||||
// good
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>
|
||||
newRepeatedFieldBuilder(TestUtil.MockBuilderParent parent) {
|
||||
return new RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(Collections.<TestAllTypes>emptyList(), false,
|
||||
parent, false);
|
||||
}
|
||||
}
|
|
@ -1,156 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package com.google.protobuf.test;
|
||||
import com.google.protobuf.*;
|
||||
|
||||
import protobuf_unittest.UnittestProto.TestAllTypes;
|
||||
import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* Tests for {@link SingleFieldBuilder}. This tests basic functionality.
|
||||
* More extensive testing is provided via other tests that exercise the
|
||||
* builder.
|
||||
*
|
||||
* @author jonp@google.com (Jon Perlow)
|
||||
*/
|
||||
public class SingleFieldBuilderTest extends TestCase {
|
||||
|
||||
public void testBasicUseAndInvalidations() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
assertEquals(TestAllTypes.getDefaultInstance(),
|
||||
builder.getBuilder().buildPartial());
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
|
||||
builder.getBuilder().setOptionalInt32(10);
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
TestAllTypes message = builder.build();
|
||||
assertEquals(10, message.getOptionalInt32());
|
||||
|
||||
// Test that we receive invalidations now that build has been called.
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
builder.getBuilder().setOptionalInt32(20);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
|
||||
// Test that we don't keep getting invalidations on every change
|
||||
builder.getBuilder().setOptionalInt32(30);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
|
||||
}
|
||||
|
||||
public void testSetMessage() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
builder.setMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
assertEquals(0, builder.getMessage().getOptionalInt32());
|
||||
|
||||
// Update message using the builder
|
||||
builder.getBuilder().setOptionalInt32(1);
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
assertEquals(1, builder.getBuilder().getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage().getOptionalInt32());
|
||||
builder.build();
|
||||
builder.getBuilder().setOptionalInt32(2);
|
||||
assertEquals(2, builder.getBuilder().getOptionalInt32());
|
||||
assertEquals(2, builder.getMessage().getOptionalInt32());
|
||||
|
||||
// Make sure message stays cached
|
||||
assertSame(builder.getMessage(), builder.getMessage());
|
||||
}
|
||||
|
||||
public void testClear() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
builder.setMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
assertNotSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
builder.clear();
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
|
||||
builder.getBuilder().setOptionalInt32(1);
|
||||
assertNotSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
builder.clear();
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
}
|
||||
|
||||
public void testMerge() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
|
||||
// Merge into default field.
|
||||
builder.mergeFrom(TestAllTypes.getDefaultInstance());
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
|
||||
// Merge into non-default field on existing builder.
|
||||
builder.getBuilder().setOptionalInt32(2);
|
||||
builder.mergeFrom(TestAllTypes.newBuilder()
|
||||
.setOptionalDouble(4.0)
|
||||
.buildPartial());
|
||||
assertEquals(2, builder.getMessage().getOptionalInt32());
|
||||
assertEquals(4.0, builder.getMessage().getOptionalDouble());
|
||||
|
||||
// Merge into non-default field on existing message
|
||||
builder.setMessage(TestAllTypes.newBuilder()
|
||||
.setOptionalInt32(10)
|
||||
.buildPartial());
|
||||
builder.mergeFrom(TestAllTypes.newBuilder()
|
||||
.setOptionalDouble(5.0)
|
||||
.buildPartial());
|
||||
assertEquals(10, builder.getMessage().getOptionalInt32());
|
||||
assertEquals(5.0, builder.getMessage().getOptionalDouble());
|
||||
}
|
||||
}
|
2716
java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
Normal file
2716
java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
Normal file
File diff suppressed because it is too large
Load diff
|
@ -972,7 +972,7 @@ public class GeneratedMessageTest extends TestCase {
|
|||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
|
||||
TestAllTypes.Builder builder = (TestAllTypes.Builder)
|
||||
((GeneratedMessage) TestAllTypes.getDefaultInstance()).
|
||||
((AbstractMessage) TestAllTypes.getDefaultInstance()).
|
||||
newBuilderForType(mockParent);
|
||||
builder.setOptionalInt32(1);
|
||||
builder.setOptionalNestedEnum(TestAllTypes.NestedEnum.BAR);
|
||||
|
@ -1027,7 +1027,7 @@ public class GeneratedMessageTest extends TestCase {
|
|||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
|
||||
TestAllExtensions.Builder builder = (TestAllExtensions.Builder)
|
||||
((GeneratedMessage) TestAllExtensions.getDefaultInstance()).
|
||||
((AbstractMessage) TestAllExtensions.getDefaultInstance()).
|
||||
newBuilderForType(mockParent);
|
||||
|
||||
builder.addExtension(UnittestProto.repeatedInt32Extension, 1);
|
||||
|
|
|
@ -1,190 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package com.google.protobuf;
|
||||
|
||||
import protobuf_unittest.UnittestProto.TestAllTypes;
|
||||
import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Tests for {@link RepeatedFieldBuilder}. This tests basic functionality.
|
||||
* More extensive testing is provided via other tests that exercise the
|
||||
* builder.
|
||||
*
|
||||
* @author jonp@google.com (Jon Perlow)
|
||||
*/
|
||||
public class RepeatedFieldBuilderTest extends TestCase {
|
||||
|
||||
public void testBasicUse() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
List<TestAllTypes> list = builder.build();
|
||||
assertEquals(2, list.size());
|
||||
assertEquals(0, list.get(0).getOptionalInt32());
|
||||
assertEquals(1, list.get(1).getOptionalInt32());
|
||||
assertIsUnmodifiable(list);
|
||||
|
||||
// Make sure it doesn't change.
|
||||
List<TestAllTypes> list2 = builder.build();
|
||||
assertSame(list, list2);
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
}
|
||||
|
||||
public void testGoingBackAndForth() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
// Convert to list
|
||||
List<TestAllTypes> list = builder.build();
|
||||
assertEquals(2, list.size());
|
||||
assertEquals(0, list.get(0).getOptionalInt32());
|
||||
assertEquals(1, list.get(1).getOptionalInt32());
|
||||
assertIsUnmodifiable(list);
|
||||
|
||||
// Update 0th item
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
builder.getBuilder(0).setOptionalString("foo");
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
list = builder.build();
|
||||
assertEquals(2, list.size());
|
||||
assertEquals(0, list.get(0).getOptionalInt32());
|
||||
assertEquals("foo", list.get(0).getOptionalString());
|
||||
assertEquals(1, list.get(1).getOptionalInt32());
|
||||
assertIsUnmodifiable(list);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
}
|
||||
|
||||
public void testVariousMethods() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(2).build());
|
||||
builder.addBuilder(0, TestAllTypes.getDefaultInstance())
|
||||
.setOptionalInt32(0);
|
||||
builder.addBuilder(TestAllTypes.getDefaultInstance()).setOptionalInt32(3);
|
||||
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
assertEquals(2, builder.getMessage(2).getOptionalInt32());
|
||||
assertEquals(3, builder.getMessage(3).getOptionalInt32());
|
||||
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
List<TestAllTypes> messages = builder.build();
|
||||
assertEquals(4, messages.size());
|
||||
assertSame(messages, builder.build()); // expect same list
|
||||
|
||||
// Remove a message.
|
||||
builder.remove(2);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
assertEquals(3, builder.getCount());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
assertEquals(3, builder.getMessage(2).getOptionalInt32());
|
||||
|
||||
// Remove a builder.
|
||||
builder.remove(0);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
assertEquals(2, builder.getCount());
|
||||
assertEquals(1, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(3, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
// Test clear.
|
||||
builder.clear();
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
assertEquals(0, builder.getCount());
|
||||
assertTrue(builder.isEmpty());
|
||||
}
|
||||
|
||||
public void testLists() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent);
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build());
|
||||
builder.addMessage(0,
|
||||
TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
assertEquals(0, builder.getMessage(0).getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage(1).getOptionalInt32());
|
||||
|
||||
// Use list of builders.
|
||||
List<TestAllTypes.Builder> builders = builder.getBuilderList();
|
||||
assertEquals(0, builders.get(0).getOptionalInt32());
|
||||
assertEquals(1, builders.get(1).getOptionalInt32());
|
||||
builders.get(0).setOptionalInt32(10);
|
||||
builders.get(1).setOptionalInt32(11);
|
||||
|
||||
// Use list of protos
|
||||
List<TestAllTypes> protos = builder.getMessageList();
|
||||
assertEquals(10, protos.get(0).getOptionalInt32());
|
||||
assertEquals(11, protos.get(1).getOptionalInt32());
|
||||
|
||||
// Add an item to the builders and verify it's updated in both
|
||||
builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(12).build());
|
||||
assertEquals(3, builders.size());
|
||||
assertEquals(3, protos.size());
|
||||
}
|
||||
|
||||
private void assertIsUnmodifiable(List<?> list) {
|
||||
if (list == Collections.emptyList()) {
|
||||
// OKAY -- Need to check this b/c EmptyList allows you to call clear.
|
||||
} else {
|
||||
try {
|
||||
list.clear();
|
||||
fail("List wasn't immutable");
|
||||
} catch (UnsupportedOperationException e) {
|
||||
// good
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>
|
||||
newRepeatedFieldBuilder(GeneratedMessage.BuilderParent parent) {
|
||||
return new RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(Collections.<TestAllTypes>emptyList(), false,
|
||||
parent, false);
|
||||
}
|
||||
}
|
|
@ -1,155 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package com.google.protobuf;
|
||||
|
||||
import protobuf_unittest.UnittestProto.TestAllTypes;
|
||||
import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* Tests for {@link SingleFieldBuilder}. This tests basic functionality.
|
||||
* More extensive testing is provided via other tests that exercise the
|
||||
* builder.
|
||||
*
|
||||
* @author jonp@google.com (Jon Perlow)
|
||||
*/
|
||||
public class SingleFieldBuilderTest extends TestCase {
|
||||
|
||||
public void testBasicUseAndInvalidations() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
assertEquals(TestAllTypes.getDefaultInstance(),
|
||||
builder.getBuilder().buildPartial());
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
|
||||
builder.getBuilder().setOptionalInt32(10);
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
TestAllTypes message = builder.build();
|
||||
assertEquals(10, message.getOptionalInt32());
|
||||
|
||||
// Test that we receive invalidations now that build has been called.
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
builder.getBuilder().setOptionalInt32(20);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
|
||||
// Test that we don't keep getting invalidations on every change
|
||||
builder.getBuilder().setOptionalInt32(30);
|
||||
assertEquals(1, mockParent.getInvalidationCount());
|
||||
|
||||
}
|
||||
|
||||
public void testSetMessage() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
builder.setMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
assertEquals(0, builder.getMessage().getOptionalInt32());
|
||||
|
||||
// Update message using the builder
|
||||
builder.getBuilder().setOptionalInt32(1);
|
||||
assertEquals(0, mockParent.getInvalidationCount());
|
||||
assertEquals(1, builder.getBuilder().getOptionalInt32());
|
||||
assertEquals(1, builder.getMessage().getOptionalInt32());
|
||||
builder.build();
|
||||
builder.getBuilder().setOptionalInt32(2);
|
||||
assertEquals(2, builder.getBuilder().getOptionalInt32());
|
||||
assertEquals(2, builder.getMessage().getOptionalInt32());
|
||||
|
||||
// Make sure message stays cached
|
||||
assertSame(builder.getMessage(), builder.getMessage());
|
||||
}
|
||||
|
||||
public void testClear() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
builder.setMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build());
|
||||
assertNotSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
builder.clear();
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
|
||||
builder.getBuilder().setOptionalInt32(1);
|
||||
assertNotSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
builder.clear();
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
}
|
||||
|
||||
public void testMerge() {
|
||||
TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
|
||||
SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder> builder =
|
||||
new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder,
|
||||
TestAllTypesOrBuilder>(
|
||||
TestAllTypes.getDefaultInstance(),
|
||||
mockParent,
|
||||
false);
|
||||
|
||||
// Merge into default field.
|
||||
builder.mergeFrom(TestAllTypes.getDefaultInstance());
|
||||
assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage());
|
||||
|
||||
// Merge into non-default field on existing builder.
|
||||
builder.getBuilder().setOptionalInt32(2);
|
||||
builder.mergeFrom(TestAllTypes.newBuilder()
|
||||
.setOptionalDouble(4.0)
|
||||
.buildPartial());
|
||||
assertEquals(2, builder.getMessage().getOptionalInt32());
|
||||
assertEquals(4.0, builder.getMessage().getOptionalDouble());
|
||||
|
||||
// Merge into non-default field on existing message
|
||||
builder.setMessage(TestAllTypes.newBuilder()
|
||||
.setOptionalInt32(10)
|
||||
.buildPartial());
|
||||
builder.mergeFrom(TestAllTypes.newBuilder()
|
||||
.setOptionalDouble(5.0)
|
||||
.buildPartial());
|
||||
assertEquals(10, builder.getMessage().getOptionalInt32());
|
||||
assertEquals(5.0, builder.getMessage().getOptionalDouble());
|
||||
}
|
||||
}
|
|
@ -59,6 +59,7 @@ nobase_include_HEADERS = \
|
|||
google/protobuf/stubs/atomic_sequence_num.h \
|
||||
google/protobuf/stubs/atomicops.h \
|
||||
google/protobuf/stubs/atomicops_internals_power.h \
|
||||
google/protobuf/stubs/atomicops_internals_ppc_gcc.h \
|
||||
google/protobuf/stubs/atomicops_internals_arm64_gcc.h \
|
||||
google/protobuf/stubs/atomicops_internals_arm_gcc.h \
|
||||
google/protobuf/stubs/atomicops_internals_arm_qnx.h \
|
||||
|
@ -547,7 +548,8 @@ EXTRA_DIST = \
|
|||
google/protobuf/compiler/ruby/ruby_generated_code.proto \
|
||||
google/protobuf/compiler/ruby/ruby_generated_code.rb \
|
||||
google/protobuf/compiler/package_info.h \
|
||||
google/protobuf/compiler/zip_output_unittest.sh
|
||||
google/protobuf/compiler/zip_output_unittest.sh \
|
||||
README.md
|
||||
|
||||
protoc_lite_outputs = \
|
||||
google/protobuf/map_lite_unittest.pb.cc \
|
||||
|
|
|
@ -205,9 +205,10 @@ GenerateFieldAccessorTable(io::Printer* printer, int* bytecode_estimate) {
|
|||
} else {
|
||||
vars["final"] = "";
|
||||
}
|
||||
vars["ver"] = GeneratedCodeVersionSuffix();
|
||||
printer->Print(vars,
|
||||
"$private$static $final$\n"
|
||||
" com.google.protobuf.GeneratedMessage.FieldAccessorTable\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.FieldAccessorTable\n"
|
||||
" internal_$identifier$_fieldAccessorTable;\n");
|
||||
|
||||
// 6 bytes per field and oneof
|
||||
|
@ -220,11 +221,11 @@ GenerateFieldAccessorTableInitializer(io::Printer* printer) {
|
|||
int bytecode_estimate = 10;
|
||||
printer->Print(
|
||||
"internal_$identifier$_fieldAccessorTable = new\n"
|
||||
" com.google.protobuf.GeneratedMessage.FieldAccessorTable(\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.FieldAccessorTable(\n"
|
||||
" internal_$identifier$_descriptor,\n"
|
||||
" new java.lang.String[] { ",
|
||||
"identifier",
|
||||
UniqueFileScopeIdentifier(descriptor_));
|
||||
"identifier", UniqueFileScopeIdentifier(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
const FieldDescriptor* field = descriptor_->field(i);
|
||||
const FieldGeneratorInfo* info = context_->GetFieldGeneratorInfo(field);
|
||||
|
@ -254,11 +255,11 @@ void ImmutableMessageGenerator::GenerateInterface(io::Printer* printer) {
|
|||
printer->Print(
|
||||
"public interface $classname$OrBuilder$idend$ extends\n"
|
||||
" $extra_interfaces$\n"
|
||||
" com.google.protobuf.GeneratedMessage.\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.\n"
|
||||
" ExtendableMessageOrBuilder<$classname$> {\n",
|
||||
"extra_interfaces", ExtraMessageOrBuilderInterfaces(descriptor_),
|
||||
"classname", descriptor_->name(),
|
||||
"idend", "");
|
||||
"idend", "", "ver", GeneratedCodeVersionSuffix());
|
||||
} else {
|
||||
printer->Print(
|
||||
"public interface $classname$OrBuilder$idend$ extends\n"
|
||||
|
@ -302,6 +303,7 @@ void ImmutableMessageGenerator::Generate(io::Printer* printer) {
|
|||
variables["static"] = is_own_file ? " " : " static ";
|
||||
variables["classname"] = descriptor_->name();
|
||||
variables["extra_interfaces"] = ExtraMessageInterfaces(descriptor_);
|
||||
variables["ver"] = GeneratedCodeVersionSuffix();
|
||||
|
||||
WriteMessageDocComment(printer, descriptor_);
|
||||
MaybePrintGeneratedAnnotation(context_, printer, descriptor_,
|
||||
|
@ -315,22 +317,25 @@ void ImmutableMessageGenerator::Generate(io::Printer* printer) {
|
|||
printer->Annotate("classname", descriptor_);
|
||||
printer->Print(
|
||||
variables,
|
||||
" com.google.protobuf.GeneratedMessage.ExtendableMessage<\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.ExtendableMessage<\n"
|
||||
" $classname$> implements\n"
|
||||
" $extra_interfaces$\n"
|
||||
" $classname$OrBuilder {\n");
|
||||
builder_type = strings::Substitute(
|
||||
"com.google.protobuf.GeneratedMessage.ExtendableBuilder<$0, ?>",
|
||||
name_resolver_->GetImmutableClassName(descriptor_));
|
||||
"com.google.protobuf.GeneratedMessage$1.ExtendableBuilder<$0, ?>",
|
||||
name_resolver_->GetImmutableClassName(descriptor_),
|
||||
GeneratedCodeVersionSuffix());
|
||||
} else {
|
||||
printer->Print(variables,
|
||||
"public $static$final class $classname$ extends\n");
|
||||
printer->Annotate("classname", descriptor_);
|
||||
printer->Print(variables,
|
||||
" com.google.protobuf.GeneratedMessage implements\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$ implements\n"
|
||||
" $extra_interfaces$\n"
|
||||
" $classname$OrBuilder {\n");
|
||||
builder_type = "com.google.protobuf.GeneratedMessage.Builder<?>";
|
||||
builder_type = strings::Substitute(
|
||||
"com.google.protobuf.GeneratedMessage$0.Builder<?>",
|
||||
GeneratedCodeVersionSuffix());
|
||||
}
|
||||
printer->Indent();
|
||||
// Using builder_type, instead of Builder, prevents the Builder class from
|
||||
|
@ -581,16 +586,18 @@ GenerateMessageSerializationMethods(io::Printer* printer) {
|
|||
if (descriptor_->extension_range_count() > 0) {
|
||||
if (descriptor_->options().message_set_wire_format()) {
|
||||
printer->Print(
|
||||
"com.google.protobuf.GeneratedMessage\n"
|
||||
"com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .ExtendableMessage<$classname$>.ExtensionWriter\n"
|
||||
" extensionWriter = newMessageSetExtensionWriter();\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_));
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
} else {
|
||||
printer->Print(
|
||||
"com.google.protobuf.GeneratedMessage\n"
|
||||
"com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .ExtendableMessage<$classname$>.ExtensionWriter\n"
|
||||
" extensionWriter = newExtensionWriter();\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_));
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -694,43 +701,44 @@ GenerateParseFromMethods(io::Printer* printer) {
|
|||
"}\n"
|
||||
"public static $classname$ parseFrom(java.io.InputStream input)\n"
|
||||
" throws java.io.IOException {\n"
|
||||
" return com.google.protobuf.GeneratedMessage\n"
|
||||
" return com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .parseWithIOException(PARSER, input);\n"
|
||||
"}\n"
|
||||
"public static $classname$ parseFrom(\n"
|
||||
" java.io.InputStream input,\n"
|
||||
" com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
|
||||
" throws java.io.IOException {\n"
|
||||
" return com.google.protobuf.GeneratedMessage\n"
|
||||
" return com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .parseWithIOException(PARSER, input, extensionRegistry);\n"
|
||||
"}\n"
|
||||
"public static $classname$ parseDelimitedFrom(java.io.InputStream input)\n"
|
||||
" throws java.io.IOException {\n"
|
||||
" return com.google.protobuf.GeneratedMessage\n"
|
||||
" return com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .parseDelimitedWithIOException(PARSER, input);\n"
|
||||
"}\n"
|
||||
"public static $classname$ parseDelimitedFrom(\n"
|
||||
" java.io.InputStream input,\n"
|
||||
" com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
|
||||
" throws java.io.IOException {\n"
|
||||
" return com.google.protobuf.GeneratedMessage\n"
|
||||
" return com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .parseDelimitedWithIOException(PARSER, input, extensionRegistry);\n"
|
||||
"}\n"
|
||||
"public static $classname$ parseFrom(\n"
|
||||
" com.google.protobuf.CodedInputStream input)\n"
|
||||
" throws java.io.IOException {\n"
|
||||
" return com.google.protobuf.GeneratedMessage\n"
|
||||
" return com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .parseWithIOException(PARSER, input);\n"
|
||||
"}\n"
|
||||
"public static $classname$ parseFrom(\n"
|
||||
" com.google.protobuf.CodedInputStream input,\n"
|
||||
" com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
|
||||
" throws java.io.IOException {\n"
|
||||
" return com.google.protobuf.GeneratedMessage\n"
|
||||
" return com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .parseWithIOException(PARSER, input, extensionRegistry);\n"
|
||||
"}\n"
|
||||
"\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_));
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
}
|
||||
|
||||
void ImmutableMessageGenerator::GenerateSerializeOneField(
|
||||
|
@ -769,10 +777,11 @@ void ImmutableMessageGenerator::GenerateBuilder(io::Printer* printer) {
|
|||
printer->Print(
|
||||
"@java.lang.Override\n"
|
||||
"protected Builder newBuilderForType(\n"
|
||||
" com.google.protobuf.GeneratedMessage.BuilderParent parent) {\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.BuilderParent parent) {\n"
|
||||
" Builder builder = new Builder(parent);\n"
|
||||
" return builder;\n"
|
||||
"}\n");
|
||||
"}\n",
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
|
||||
MessageBuilderGenerator builderGenerator(descriptor_, context_);
|
||||
builderGenerator.Generate(printer);
|
||||
|
@ -826,7 +835,7 @@ GenerateDescriptorMethods(io::Printer* printer) {
|
|||
"}\n");
|
||||
}
|
||||
printer->Print(
|
||||
"protected com.google.protobuf.GeneratedMessage.FieldAccessorTable\n"
|
||||
"protected com.google.protobuf.GeneratedMessage$ver$.FieldAccessorTable\n"
|
||||
" internalGetFieldAccessorTable() {\n"
|
||||
" return $fileclass$.internal_$identifier$_fieldAccessorTable\n"
|
||||
" .ensureFieldAccessorsInitialized(\n"
|
||||
|
@ -835,7 +844,8 @@ GenerateDescriptorMethods(io::Printer* printer) {
|
|||
"\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"fileclass", name_resolver_->GetImmutableClassName(descriptor_->file()),
|
||||
"identifier", UniqueFileScopeIdentifier(descriptor_));
|
||||
"identifier", UniqueFileScopeIdentifier(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
|
|
|
@ -94,20 +94,22 @@ Generate(io::Printer* printer) {
|
|||
if (descriptor_->extension_range_count() > 0) {
|
||||
printer->Print(
|
||||
"public static final class Builder extends\n"
|
||||
" com.google.protobuf.GeneratedMessage.ExtendableBuilder<\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.ExtendableBuilder<\n"
|
||||
" $classname$, Builder> implements\n"
|
||||
" $extra_interfaces$\n"
|
||||
" $classname$OrBuilder {\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"extra_interfaces", ExtraBuilderInterfaces(descriptor_));
|
||||
"extra_interfaces", ExtraBuilderInterfaces(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
} else {
|
||||
printer->Print(
|
||||
"public static final class Builder extends\n"
|
||||
" com.google.protobuf.GeneratedMessage.Builder<Builder> implements\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.Builder<Builder> implements\n"
|
||||
" $extra_interfaces$\n"
|
||||
" $classname$OrBuilder {\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"extra_interfaces", ExtraBuilderInterfaces(descriptor_));
|
||||
"extra_interfaces", ExtraBuilderInterfaces(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
}
|
||||
printer->Indent();
|
||||
|
||||
|
@ -280,7 +282,7 @@ GenerateDescriptorMethods(io::Printer* printer) {
|
|||
"}\n");
|
||||
}
|
||||
printer->Print(
|
||||
"protected com.google.protobuf.GeneratedMessage.FieldAccessorTable\n"
|
||||
"protected com.google.protobuf.GeneratedMessage$ver$.FieldAccessorTable\n"
|
||||
" internalGetFieldAccessorTable() {\n"
|
||||
" return $fileclass$.internal_$identifier$_fieldAccessorTable\n"
|
||||
" .ensureFieldAccessorsInitialized(\n"
|
||||
|
@ -289,7 +291,8 @@ GenerateDescriptorMethods(io::Printer* printer) {
|
|||
"\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"fileclass", name_resolver_->GetImmutableClassName(descriptor_->file()),
|
||||
"identifier", UniqueFileScopeIdentifier(descriptor_));
|
||||
"identifier", UniqueFileScopeIdentifier(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
|
@ -306,15 +309,18 @@ GenerateCommonBuilderMethods(io::Printer* printer) {
|
|||
|
||||
printer->Print(
|
||||
"private Builder(\n"
|
||||
" com.google.protobuf.GeneratedMessage.BuilderParent parent) {\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.BuilderParent parent) {\n"
|
||||
" super(parent);\n"
|
||||
" maybeForceBuilderInitialization();\n"
|
||||
"}\n",
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_));
|
||||
"classname", name_resolver_->GetImmutableClassName(descriptor_),
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
|
||||
printer->Print(
|
||||
"private void maybeForceBuilderInitialization() {\n"
|
||||
" if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {\n");
|
||||
" if (com.google.protobuf.GeneratedMessage$ver$\n"
|
||||
" .alwaysUseFieldBuilders) {\n",
|
||||
"ver", GeneratedCodeVersionSuffix());
|
||||
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
|
@ -590,6 +596,7 @@ GenerateCommonBuilderMethods(io::Printer* printer) {
|
|||
" return this;\n"
|
||||
"}\n"
|
||||
"\n");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1203,7 +1203,7 @@ GenerateMergingCode(io::Printer* printer) const {
|
|||
" $name$_ = other.$name$_;\n"
|
||||
" $clear_mutable_bit_builder$;\n"
|
||||
" $name$Builder_ = \n"
|
||||
" com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?\n"
|
||||
" com.google.protobuf.GeneratedMessage$ver$.alwaysUseFieldBuilders ?\n"
|
||||
" get$capitalized_name$FieldBuilder() : null;\n"
|
||||
" } else {\n"
|
||||
" $name$Builder_.addAllMessages(other.$name$_);\n"
|
||||
|
|
|
@ -79,9 +79,11 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor,
|
|||
" throw new NullPointerException();\n"
|
||||
" }\n";
|
||||
(*variables)["writeString"] =
|
||||
"com.google.protobuf.GeneratedMessage.writeString";
|
||||
"com.google.protobuf.GeneratedMessage" + GeneratedCodeVersionSuffix() +
|
||||
".writeString";
|
||||
(*variables)["computeStringSize"] =
|
||||
"com.google.protobuf.GeneratedMessage.computeStringSize";
|
||||
"com.google.protobuf.GeneratedMessage" + GeneratedCodeVersionSuffix() +
|
||||
".computeStringSize";
|
||||
|
||||
// TODO(birdo): Add @deprecated javadoc when generating javadoc is supported
|
||||
// by the proto compiler
|
||||
|
|
Loading…
Add table
Reference in a new issue