You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by rf...@apache.org on 2011/04/28 23:52:36 UTC

svn commit: r1097632 [2/3] - in /incubator/wink/trunk/wink-providers/wink-protobuf-provider: pom.xml src/test/java/com/example/tutorial/AddressBookProtos.java src/test/java/org/apache/wink/providers/protobuf/ProtobufTest.java

Modified: incubator/wink/trunk/wink-providers/wink-protobuf-provider/src/test/java/com/example/tutorial/AddressBookProtos.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-providers/wink-protobuf-provider/src/test/java/com/example/tutorial/AddressBookProtos.java?rev=1097632&r1=1097631&r2=1097632&view=diff
==============================================================================
--- incubator/wink/trunk/wink-providers/wink-protobuf-provider/src/test/java/com/example/tutorial/AddressBookProtos.java (original)
+++ incubator/wink/trunk/wink-providers/wink-protobuf-provider/src/test/java/com/example/tutorial/AddressBookProtos.java Thu Apr 28 21:52:36 2011
@@ -1,4 +1,4 @@
-/*
+/*******************************************************************************
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -6,1370 +6,2005 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *  
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.    
- */
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: addressbook.proto
-
-package com.example.tutorial;
-
-public final class AddressBookProtos {
-    private AddressBookProtos() {
-    }
-
-    public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
-    }
-
-    public static final class Person extends com.google.protobuf.GeneratedMessage {
-        // Use Person.newBuilder() to construct.
-        private Person() {
-            initFields();
-        }
-
-        private Person(boolean noInit) {
-        }
-
-        private static final Person defaultInstance;
-
-        public static Person getDefaultInstance() {
-            return defaultInstance;
-        }
-
-        public Person getDefaultInstanceForType() {
-            return defaultInstance;
-        }
-
-        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_descriptor;
-        }
-
-        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
-            return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_fieldAccessorTable;
-        }
-
-        public enum PhoneType implements com.google.protobuf.ProtocolMessageEnum {
-            MOBILE(0, 0), HOME(1, 1), WORK(2, 2), ;
-
-            public final int getNumber() {
-                return value;
-            }
-
-            public static PhoneType valueOf(int value) {
-                switch (value) {
-                    case 0:
-                        return MOBILE;
-                    case 1:
-                        return HOME;
-                    case 2:
-                        return WORK;
-                    default:
-                        return null;
-                }
-            }
-
-            public static com.google.protobuf.Internal.EnumLiteMap<PhoneType> internalGetValueMap() {
-                return internalValueMap;
-            }
-
-            private static com.google.protobuf.Internal.EnumLiteMap<PhoneType> internalValueMap =
-                new com.google.protobuf.Internal.EnumLiteMap<PhoneType>() {
-                    public PhoneType findValueByNumber(int number) {
-                        return PhoneType.valueOf(number);
-                    }
-                };
-
-            public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
-                return getDescriptor().getValues().get(index);
-            }
-
-            public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
-                return getDescriptor();
-            }
-
-            public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-                return com.example.tutorial.AddressBookProtos.Person.getDescriptor().getEnumTypes().get(0);
-            }
-
-            private static final PhoneType[] VALUES = {MOBILE, HOME, WORK,};
-
-            public static PhoneType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-                if (desc.getType() != getDescriptor()) {
-                    throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
-                }
-                return VALUES[desc.getIndex()];
-            }
-
-            private final int index;
-            private final int value;
-
-            private PhoneType(int index, int value) {
-                this.index = index;
-                this.value = value;
-            }
-
-            static {
-                com.example.tutorial.AddressBookProtos.getDescriptor();
-            }
-
-            // @@protoc_insertion_point(enum_scope:tutorial.Person.PhoneType)
-        }
-
-        public static final class PhoneNumber extends com.google.protobuf.GeneratedMessage {
-            // Use PhoneNumber.newBuilder() to construct.
-            private PhoneNumber() {
-                initFields();
-            }
-
-            private PhoneNumber(boolean noInit) {
-            }
-
-            private static final PhoneNumber defaultInstance;
-
-            public static PhoneNumber getDefaultInstance() {
-                return defaultInstance;
-            }
-
-            public PhoneNumber getDefaultInstanceForType() {
-                return defaultInstance;
-            }
-
-            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_descriptor;
-            }
-
-            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
-                return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_fieldAccessorTable;
-            }
-
-            // required string number = 1;
-            public static final int NUMBER_FIELD_NUMBER = 1;
-            private boolean hasNumber;
-            private java.lang.String number_ = "";
-
-            public boolean hasNumber() {
-                return hasNumber;
-            }
-
-            public java.lang.String getNumber() {
-                return number_;
-            }
-
-            // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
-            public static final int TYPE_FIELD_NUMBER = 2;
-            private boolean hasType;
-            private com.example.tutorial.AddressBookProtos.Person.PhoneType type_;
-
-            public boolean hasType() {
-                return hasType;
-            }
-
-            public com.example.tutorial.AddressBookProtos.Person.PhoneType getType() {
-                return type_;
-            }
-
-            private void initFields() {
-                type_ = com.example.tutorial.AddressBookProtos.Person.PhoneType.HOME;
-            }
-
-            public final boolean isInitialized() {
-                if (!hasNumber)
-                    return false;
-                return true;
-            }
-
-            public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-                getSerializedSize();
-                if (hasNumber()) {
-                    output.writeString(1, getNumber());
-                }
-                if (hasType()) {
-                    output.writeEnum(2, getType().getNumber());
-                }
-                getUnknownFields().writeTo(output);
-            }
-
-            private int memoizedSerializedSize = -1;
-
-            public int getSerializedSize() {
-                int size = memoizedSerializedSize;
-                if (size != -1)
-                    return size;
-
-                size = 0;
-                if (hasNumber()) {
-                    size += com.google.protobuf.CodedOutputStream.computeStringSize(1, getNumber());
-                }
-                if (hasType()) {
-                    size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, getType().getNumber());
-                }
-                size += getUnknownFields().getSerializedSize();
-                memoizedSerializedSize = size;
-                return size;
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(com.google.protobuf.ByteString data)
-                throws com.google.protobuf.InvalidProtocolBufferException {
-                return newBuilder().mergeFrom(data).buildParsed();
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(com.google.protobuf.ByteString data,
-                                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                throws com.google.protobuf.InvalidProtocolBufferException {
-                return newBuilder().mergeFrom(data, extensionRegistry).buildParsed();
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(byte[] data)
-                throws com.google.protobuf.InvalidProtocolBufferException {
-                return newBuilder().mergeFrom(data).buildParsed();
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(byte[] data,
-                                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                throws com.google.protobuf.InvalidProtocolBufferException {
-                return newBuilder().mergeFrom(data, extensionRegistry).buildParsed();
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(java.io.InputStream input)
-                throws java.io.IOException {
-                return newBuilder().mergeFrom(input).buildParsed();
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(java.io.InputStream input,
-                                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                throws java.io.IOException {
-                return newBuilder().mergeFrom(input, extensionRegistry).buildParsed();
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseDelimitedFrom(java.io.InputStream input)
-                throws java.io.IOException {
-                Builder builder = newBuilder();
-                if (builder.mergeDelimitedFrom(input)) {
-                    return builder.buildParsed();
-                } else {
-                    return null;
-                }
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseDelimitedFrom(java.io.InputStream input,
-                                                                                                       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                throws java.io.IOException {
-                Builder builder = newBuilder();
-                if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-                    return builder.buildParsed();
-                } else {
-                    return null;
-                }
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(com.google.protobuf.CodedInputStream input)
-                throws java.io.IOException {
-                return newBuilder().mergeFrom(input).buildParsed();
-            }
-
-            public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(com.google.protobuf.CodedInputStream input,
-                                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                throws java.io.IOException {
-                return newBuilder().mergeFrom(input, extensionRegistry).buildParsed();
-            }
-
-            public static Builder newBuilder() {
-                return Builder.create();
-            }
-
-            public Builder newBuilderForType() {
-                return newBuilder();
-            }
-
-            public static Builder newBuilder(com.example.tutorial.AddressBookProtos.Person.PhoneNumber prototype) {
-                return newBuilder().mergeFrom(prototype);
-            }
-
-            public Builder toBuilder() {
-                return newBuilder(this);
-            }
-
-            public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> {
-                private com.example.tutorial.AddressBookProtos.Person.PhoneNumber result;
-
-                // Construct using com.example.tutorial.AddressBookProtos.Person.PhoneNumber.newBuilder()
-                private Builder() {
-                }
-
-                private static Builder create() {
-                    Builder builder = new Builder();
-                    builder.result = new com.example.tutorial.AddressBookProtos.Person.PhoneNumber();
-                    return builder;
-                }
-
-                protected com.example.tutorial.AddressBookProtos.Person.PhoneNumber internalGetResult() {
-                    return result;
-                }
-
-                public Builder clear() {
-                    if (result == null) {
-                        throw new IllegalStateException("Cannot call clear() after build().");
-                    }
-                    result = new com.example.tutorial.AddressBookProtos.Person.PhoneNumber();
-                    return this;
-                }
-
-                public Builder clone() {
-                    return create().mergeFrom(result);
-                }
-
-                public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                    return com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDescriptor();
-                }
-
-                public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getDefaultInstanceForType() {
-                    return com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance();
-                }
-
-                public boolean isInitialized() {
-                    return result.isInitialized();
-                }
-
-                public com.example.tutorial.AddressBookProtos.Person.PhoneNumber build() {
-                    if (result != null && !isInitialized()) {
-                        throw newUninitializedMessageException(result);
-                    }
-                    return buildPartial();
-                }
-
-                private com.example.tutorial.AddressBookProtos.Person.PhoneNumber buildParsed()
-                    throws com.google.protobuf.InvalidProtocolBufferException {
-                    if (!isInitialized()) {
-                        throw newUninitializedMessageException(result).asInvalidProtocolBufferException();
-                    }
-                    return buildPartial();
-                }
-
-                public com.example.tutorial.AddressBookProtos.Person.PhoneNumber buildPartial() {
-                    if (result == null) {
-                        throw new IllegalStateException("build() has already been called on this Builder.");
-                    }
-                    com.example.tutorial.AddressBookProtos.Person.PhoneNumber returnMe = result;
-                    result = null;
-                    return returnMe;
-                }
-
-                public Builder mergeFrom(com.google.protobuf.Message other) {
-                    if (other instanceof com.example.tutorial.AddressBookProtos.Person.PhoneNumber) {
-                        return mergeFrom((com.example.tutorial.AddressBookProtos.Person.PhoneNumber)other);
-                    } else {
-                        super.mergeFrom(other);
-                        return this;
-                    }
-                }
-
-                public Builder mergeFrom(com.example.tutorial.AddressBookProtos.Person.PhoneNumber other) {
-                    if (other == com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance())
-                        return this;
-                    if (other.hasNumber()) {
-                        setNumber(other.getNumber());
-                    }
-                    if (other.hasType()) {
-                        setType(other.getType());
-                    }
-                    this.mergeUnknownFields(other.getUnknownFields());
-                    return this;
-                }
-
-                public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
-                                         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                    throws java.io.IOException {
-                    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-                        com.google.protobuf.UnknownFieldSet.newBuilder(this.getUnknownFields());
-                    while (true) {
-                        int tag = input.readTag();
-                        switch (tag) {
-                            case 0:
-                                this.setUnknownFields(unknownFields.build());
-                                return this;
-                            default: {
-                                if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
-                                    this.setUnknownFields(unknownFields.build());
-                                    return this;
-                                }
-                                break;
-                            }
-                            case 10: {
-                                setNumber(input.readString());
-                                break;
-                            }
-                            case 16: {
-                                int rawValue = input.readEnum();
-                                com.example.tutorial.AddressBookProtos.Person.PhoneType value =
-                                    com.example.tutorial.AddressBookProtos.Person.PhoneType.valueOf(rawValue);
-                                if (value == null) {
-                                    unknownFields.mergeVarintField(2, rawValue);
-                                } else {
-                                    setType(value);
-                                }
-                                break;
-                            }
-                        }
-                    }
-                }
-
-                // required string number = 1;
-                public boolean hasNumber() {
-                    return result.hasNumber();
-                }
-
-                public java.lang.String getNumber() {
-                    return result.getNumber();
-                }
-
-                public Builder setNumber(java.lang.String value) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    result.hasNumber = true;
-                    result.number_ = value;
-                    return this;
-                }
-
-                public Builder clearNumber() {
-                    result.hasNumber = false;
-                    result.number_ = getDefaultInstance().getNumber();
-                    return this;
-                }
-
-                // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
-                public boolean hasType() {
-                    return result.hasType();
-                }
-
-                public com.example.tutorial.AddressBookProtos.Person.PhoneType getType() {
-                    return result.getType();
-                }
-
-                public Builder setType(com.example.tutorial.AddressBookProtos.Person.PhoneType value) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    result.hasType = true;
-                    result.type_ = value;
-                    return this;
-                }
-
-                public Builder clearType() {
-                    result.hasType = false;
-                    result.type_ = com.example.tutorial.AddressBookProtos.Person.PhoneType.HOME;
-                    return this;
-                }
-
-                // @@protoc_insertion_point(builder_scope:tutorial.Person.PhoneNumber)
-            }
-
-            static {
-                defaultInstance = new PhoneNumber(true);
-                com.example.tutorial.AddressBookProtos.internalForceInit();
-                defaultInstance.initFields();
-            }
-
-            // @@protoc_insertion_point(class_scope:tutorial.Person.PhoneNumber)
-        }
-
-        // required string name = 1;
-        public static final int NAME_FIELD_NUMBER = 1;
-        private boolean hasName;
-        private java.lang.String name_ = "";
-
-        public boolean hasName() {
-            return hasName;
-        }
-
-        public java.lang.String getName() {
-            return name_;
-        }
-
-        // required int32 id = 2;
-        public static final int ID_FIELD_NUMBER = 2;
-        private boolean hasId;
-        private int id_ = 0;
-
-        public boolean hasId() {
-            return hasId;
-        }
-
-        public int getId() {
-            return id_;
-        }
-
-        // optional string email = 3;
-        public static final int EMAIL_FIELD_NUMBER = 3;
-        private boolean hasEmail;
-        private java.lang.String email_ = "";
-
-        public boolean hasEmail() {
-            return hasEmail;
-        }
-
-        public java.lang.String getEmail() {
-            return email_;
-        }
-
-        // repeated .tutorial.Person.PhoneNumber phone = 4;
-        public static final int PHONE_FIELD_NUMBER = 4;
-        private java.util.List<com.example.tutorial.AddressBookProtos.Person.PhoneNumber> phone_ =
-            java.util.Collections.emptyList();
-
-        public java.util.List<com.example.tutorial.AddressBookProtos.Person.PhoneNumber> getPhoneList() {
-            return phone_;
-        }
-
-        public int getPhoneCount() {
-            return phone_.size();
-        }
-
-        public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getPhone(int index) {
-            return phone_.get(index);
-        }
-
-        private void initFields() {
-        }
-
-        public final boolean isInitialized() {
-            if (!hasName)
-                return false;
-            if (!hasId)
-                return false;
-            for (com.example.tutorial.AddressBookProtos.Person.PhoneNumber element : getPhoneList()) {
-                if (!element.isInitialized())
-                    return false;
-            }
-            return true;
-        }
-
-        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            getSerializedSize();
-            if (hasName()) {
-                output.writeString(1, getName());
-            }
-            if (hasId()) {
-                output.writeInt32(2, getId());
-            }
-            if (hasEmail()) {
-                output.writeString(3, getEmail());
-            }
-            for (com.example.tutorial.AddressBookProtos.Person.PhoneNumber element : getPhoneList()) {
-                output.writeMessage(4, element);
-            }
-            getUnknownFields().writeTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-
-        public int getSerializedSize() {
-            int size = memoizedSerializedSize;
-            if (size != -1)
-                return size;
-
-            size = 0;
-            if (hasName()) {
-                size += com.google.protobuf.CodedOutputStream.computeStringSize(1, getName());
-            }
-            if (hasId()) {
-                size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, getId());
-            }
-            if (hasEmail()) {
-                size += com.google.protobuf.CodedOutputStream.computeStringSize(3, getEmail());
-            }
-            for (com.example.tutorial.AddressBookProtos.Person.PhoneNumber element : getPhoneList()) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, element);
-            }
-            size += getUnknownFields().getSerializedSize();
-            memoizedSerializedSize = size;
-            return size;
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(com.google.protobuf.ByteString data)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(com.google.protobuf.ByteString data,
-                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data, extensionRegistry).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(byte[] data)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(byte[] data,
-                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data, extensionRegistry).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(java.io.InputStream input)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(java.io.InputStream input,
-                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input, extensionRegistry).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseDelimitedFrom(java.io.InputStream input)
-            throws java.io.IOException {
-            Builder builder = newBuilder();
-            if (builder.mergeDelimitedFrom(input)) {
-                return builder.buildParsed();
-            } else {
-                return null;
-            }
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseDelimitedFrom(java.io.InputStream input,
-                                                                                       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws java.io.IOException {
-            Builder builder = newBuilder();
-            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-                return builder.buildParsed();
-            } else {
-                return null;
-            }
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(com.google.protobuf.CodedInputStream input)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.Person parseFrom(com.google.protobuf.CodedInputStream input,
-                                                                              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input, extensionRegistry).buildParsed();
-        }
-
-        public static Builder newBuilder() {
-            return Builder.create();
-        }
-
-        public Builder newBuilderForType() {
-            return newBuilder();
-        }
-
-        public static Builder newBuilder(com.example.tutorial.AddressBookProtos.Person prototype) {
-            return newBuilder().mergeFrom(prototype);
-        }
-
-        public Builder toBuilder() {
-            return newBuilder(this);
-        }
-
-        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> {
-            private com.example.tutorial.AddressBookProtos.Person result;
-
-            // Construct using com.example.tutorial.AddressBookProtos.Person.newBuilder()
-            private Builder() {
-            }
-
-            private static Builder create() {
-                Builder builder = new Builder();
-                builder.result = new com.example.tutorial.AddressBookProtos.Person();
-                return builder;
-            }
-
-            protected com.example.tutorial.AddressBookProtos.Person internalGetResult() {
-                return result;
-            }
-
-            public Builder clear() {
-                if (result == null) {
-                    throw new IllegalStateException("Cannot call clear() after build().");
-                }
-                result = new com.example.tutorial.AddressBookProtos.Person();
-                return this;
-            }
-
-            public Builder clone() {
-                return create().mergeFrom(result);
-            }
-
-            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return com.example.tutorial.AddressBookProtos.Person.getDescriptor();
-            }
-
-            public com.example.tutorial.AddressBookProtos.Person getDefaultInstanceForType() {
-                return com.example.tutorial.AddressBookProtos.Person.getDefaultInstance();
-            }
-
-            public boolean isInitialized() {
-                return result.isInitialized();
-            }
-
-            public com.example.tutorial.AddressBookProtos.Person build() {
-                if (result != null && !isInitialized()) {
-                    throw newUninitializedMessageException(result);
-                }
-                return buildPartial();
-            }
-
-            private com.example.tutorial.AddressBookProtos.Person buildParsed()
-                throws com.google.protobuf.InvalidProtocolBufferException {
-                if (!isInitialized()) {
-                    throw newUninitializedMessageException(result).asInvalidProtocolBufferException();
-                }
-                return buildPartial();
-            }
-
-            public com.example.tutorial.AddressBookProtos.Person buildPartial() {
-                if (result == null) {
-                    throw new IllegalStateException("build() has already been called on this Builder.");
-                }
-                if (result.phone_ != java.util.Collections.EMPTY_LIST) {
-                    result.phone_ = java.util.Collections.unmodifiableList(result.phone_);
-                }
-                com.example.tutorial.AddressBookProtos.Person returnMe = result;
-                result = null;
-                return returnMe;
-            }
-
-            public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof com.example.tutorial.AddressBookProtos.Person) {
-                    return mergeFrom((com.example.tutorial.AddressBookProtos.Person)other);
-                } else {
-                    super.mergeFrom(other);
-                    return this;
-                }
-            }
-
-            public Builder mergeFrom(com.example.tutorial.AddressBookProtos.Person other) {
-                if (other == com.example.tutorial.AddressBookProtos.Person.getDefaultInstance())
-                    return this;
-                if (other.hasName()) {
-                    setName(other.getName());
-                }
-                if (other.hasId()) {
-                    setId(other.getId());
-                }
-                if (other.hasEmail()) {
-                    setEmail(other.getEmail());
-                }
-                if (!other.phone_.isEmpty()) {
-                    if (result.phone_.isEmpty()) {
-                        result.phone_ =
-                            new java.util.ArrayList<com.example.tutorial.AddressBookProtos.Person.PhoneNumber>();
-                    }
-                    result.phone_.addAll(other.phone_);
-                }
-                this.mergeUnknownFields(other.getUnknownFields());
-                return this;
-            }
-
-            public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
-                                     com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                throws java.io.IOException {
-                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-                    com.google.protobuf.UnknownFieldSet.newBuilder(this.getUnknownFields());
-                while (true) {
-                    int tag = input.readTag();
-                    switch (tag) {
-                        case 0:
-                            this.setUnknownFields(unknownFields.build());
-                            return this;
-                        default: {
-                            if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
-                                this.setUnknownFields(unknownFields.build());
-                                return this;
-                            }
-                            break;
-                        }
-                        case 10: {
-                            setName(input.readString());
-                            break;
-                        }
-                        case 16: {
-                            setId(input.readInt32());
-                            break;
-                        }
-                        case 26: {
-                            setEmail(input.readString());
-                            break;
-                        }
-                        case 34: {
-                            com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder subBuilder =
-                                com.example.tutorial.AddressBookProtos.Person.PhoneNumber.newBuilder();
-                            input.readMessage(subBuilder, extensionRegistry);
-                            addPhone(subBuilder.buildPartial());
-                            break;
-                        }
-                    }
-                }
-            }
-
-            // required string name = 1;
-            public boolean hasName() {
-                return result.hasName();
-            }
-
-            public java.lang.String getName() {
-                return result.getName();
-            }
-
-            public Builder setName(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                result.hasName = true;
-                result.name_ = value;
-                return this;
-            }
-
-            public Builder clearName() {
-                result.hasName = false;
-                result.name_ = getDefaultInstance().getName();
-                return this;
-            }
-
-            // required int32 id = 2;
-            public boolean hasId() {
-                return result.hasId();
-            }
-
-            public int getId() {
-                return result.getId();
-            }
-
-            public Builder setId(int value) {
-                result.hasId = true;
-                result.id_ = value;
-                return this;
-            }
-
-            public Builder clearId() {
-                result.hasId = false;
-                result.id_ = 0;
-                return this;
-            }
-
-            // optional string email = 3;
-            public boolean hasEmail() {
-                return result.hasEmail();
-            }
-
-            public java.lang.String getEmail() {
-                return result.getEmail();
-            }
-
-            public Builder setEmail(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                result.hasEmail = true;
-                result.email_ = value;
-                return this;
-            }
-
-            public Builder clearEmail() {
-                result.hasEmail = false;
-                result.email_ = getDefaultInstance().getEmail();
-                return this;
-            }
-
-            // repeated .tutorial.Person.PhoneNumber phone = 4;
-            public java.util.List<com.example.tutorial.AddressBookProtos.Person.PhoneNumber> getPhoneList() {
-                return java.util.Collections.unmodifiableList(result.phone_);
-            }
-
-            public int getPhoneCount() {
-                return result.getPhoneCount();
-            }
-
-            public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getPhone(int index) {
-                return result.getPhone(index);
-            }
-
-            public Builder setPhone(int index, com.example.tutorial.AddressBookProtos.Person.PhoneNumber value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                result.phone_.set(index, value);
-                return this;
-            }
-
-            public Builder setPhone(int index,
-                                    com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder builderForValue) {
-                result.phone_.set(index, builderForValue.build());
-                return this;
-            }
-
-            public Builder addPhone(com.example.tutorial.AddressBookProtos.Person.PhoneNumber value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                if (result.phone_.isEmpty()) {
-                    result.phone_ =
-                        new java.util.ArrayList<com.example.tutorial.AddressBookProtos.Person.PhoneNumber>();
-                }
-                result.phone_.add(value);
-                return this;
-            }
-
-            public Builder addPhone(com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder builderForValue) {
-                if (result.phone_.isEmpty()) {
-                    result.phone_ =
-                        new java.util.ArrayList<com.example.tutorial.AddressBookProtos.Person.PhoneNumber>();
-                }
-                result.phone_.add(builderForValue.build());
-                return this;
-            }
-
-            public Builder addAllPhone(java.lang.Iterable<? extends com.example.tutorial.AddressBookProtos.Person.PhoneNumber> values) {
-                if (result.phone_.isEmpty()) {
-                    result.phone_ =
-                        new java.util.ArrayList<com.example.tutorial.AddressBookProtos.Person.PhoneNumber>();
-                }
-                super.addAll(values, result.phone_);
-                return this;
-            }
-
-            public Builder clearPhone() {
-                result.phone_ = java.util.Collections.emptyList();
-                return this;
-            }
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *  
+ *******************************************************************************/
 
-            // @@protoc_insertion_point(builder_scope:tutorial.Person)
-        }
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: src/test/resources/addressbook.proto
 
-        static {
-            defaultInstance = new Person(true);
-            com.example.tutorial.AddressBookProtos.internalForceInit();
-            defaultInstance.initFields();
-        }
+package com.example.tutorial;
 
-        // @@protoc_insertion_point(class_scope:tutorial.Person)
+public final class AddressBookProtos {
+  private AddressBookProtos() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+  }
+  public interface PersonOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // required int32 id = 2;
+    boolean hasId();
+    int getId();
+    
+    // optional string email = 3;
+    boolean hasEmail();
+    String getEmail();
+    
+    // repeated .tutorial.Person.PhoneNumber phone = 4;
+    java.util.List<com.example.tutorial.AddressBookProtos.Person.PhoneNumber> 
+        getPhoneList();
+    com.example.tutorial.AddressBookProtos.Person.PhoneNumber getPhone(int index);
+    int getPhoneCount();
+    java.util.List<? extends com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder> 
+        getPhoneOrBuilderList();
+    com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder getPhoneOrBuilder(
+        int index);
+  }
+  public static final class Person extends
+      com.google.protobuf.GeneratedMessage
+      implements PersonOrBuilder {
+    // Use Person.newBuilder() to construct.
+    private Person(Builder builder) {
+      super(builder);
     }
-
-    public static final class AddressBook extends com.google.protobuf.GeneratedMessage {
-        // Use AddressBook.newBuilder() to construct.
-        private AddressBook() {
-            initFields();
-        }
-
-        private AddressBook(boolean noInit) {
-        }
-
-        private static final AddressBook defaultInstance;
-
-        public static AddressBook getDefaultInstance() {
-            return defaultInstance;
-        }
-
-        public AddressBook getDefaultInstanceForType() {
-            return defaultInstance;
-        }
-
-        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return com.example.tutorial.AddressBookProtos.internal_static_tutorial_AddressBook_descriptor;
-        }
-
-        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
-            return com.example.tutorial.AddressBookProtos.internal_static_tutorial_AddressBook_fieldAccessorTable;
-        }
-
-        // repeated .tutorial.Person person = 1;
-        public static final int PERSON_FIELD_NUMBER = 1;
-        private java.util.List<com.example.tutorial.AddressBookProtos.Person> person_ = java.util.Collections
-            .emptyList();
-
-        public java.util.List<com.example.tutorial.AddressBookProtos.Person> getPersonList() {
-            return person_;
-        }
-
-        public int getPersonCount() {
-            return person_.size();
-        }
-
-        public com.example.tutorial.AddressBookProtos.Person getPerson(int index) {
-            return person_.get(index);
+    private Person(boolean noInit) {}
+    
+    private static final Person defaultInstance;
+    public static Person getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Person getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_fieldAccessorTable;
+    }
+    
+    public enum PhoneType
+        implements com.google.protobuf.ProtocolMessageEnum {
+      MOBILE(0, 0),
+      HOME(1, 1),
+      WORK(2, 2),
+      ;
+      
+      public static final int MOBILE_VALUE = 0;
+      public static final int HOME_VALUE = 1;
+      public static final int WORK_VALUE = 2;
+      
+      
+      public final int getNumber() { return value; }
+      
+      public static PhoneType valueOf(int value) {
+        switch (value) {
+          case 0: return MOBILE;
+          case 1: return HOME;
+          case 2: return WORK;
+          default: return null;
+        }
+      }
+      
+      public static com.google.protobuf.Internal.EnumLiteMap<PhoneType>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<PhoneType>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<PhoneType>() {
+              public PhoneType findValueByNumber(int number) {
+                return PhoneType.valueOf(number);
+              }
+            };
+      
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.example.tutorial.AddressBookProtos.Person.getDescriptor().getEnumTypes().get(0);
+      }
+      
+      private static final PhoneType[] VALUES = {
+        MOBILE, HOME, WORK, 
+      };
+      
+      public static PhoneType valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+      
+      private final int index;
+      private final int value;
+      
+      private PhoneType(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+      
+      // @@protoc_insertion_point(enum_scope:tutorial.Person.PhoneType)
+    }
+    
+    public interface PhoneNumberOrBuilder
+        extends com.google.protobuf.MessageOrBuilder {
+      
+      // required string number = 1;
+      boolean hasNumber();
+      String getNumber();
+      
+      // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
+      boolean hasType();
+      com.example.tutorial.AddressBookProtos.Person.PhoneType getType();
+    }
+    public static final class PhoneNumber extends
+        com.google.protobuf.GeneratedMessage
+        implements PhoneNumberOrBuilder {
+      // Use PhoneNumber.newBuilder() to construct.
+      private PhoneNumber(Builder builder) {
+        super(builder);
+      }
+      private PhoneNumber(boolean noInit) {}
+      
+      private static final PhoneNumber defaultInstance;
+      public static PhoneNumber getDefaultInstance() {
+        return defaultInstance;
+      }
+      
+      public PhoneNumber getDefaultInstanceForType() {
+        return defaultInstance;
+      }
+      
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_fieldAccessorTable;
+      }
+      
+      private int bitField0_;
+      // required string number = 1;
+      public static final int NUMBER_FIELD_NUMBER = 1;
+      private Object number_;
+      public boolean hasNumber() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getNumber() {
+        Object ref = number_;
+        if (ref instanceof String) {
+          return (String) ref;
+        } else {
+          com.google.protobuf.ByteString bs = 
+              (com.google.protobuf.ByteString) ref;
+          String s = bs.toStringUtf8();
+          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+            number_ = s;
+          }
+          return s;
+        }
+      }
+      private com.google.protobuf.ByteString getNumberBytes() {
+        Object ref = number_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+          number_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      
+      // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
+      public static final int TYPE_FIELD_NUMBER = 2;
+      private com.example.tutorial.AddressBookProtos.Person.PhoneType type_;
+      public boolean hasType() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public com.example.tutorial.AddressBookProtos.Person.PhoneType getType() {
+        return type_;
+      }
+      
+      private void initFields() {
+        number_ = "";
+        type_ = com.example.tutorial.AddressBookProtos.Person.PhoneType.HOME;
+      }
+      private byte memoizedIsInitialized = -1;
+      public final boolean isInitialized() {
+        byte isInitialized = memoizedIsInitialized;
+        if (isInitialized != -1) return isInitialized == 1;
+        
+        if (!hasNumber()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+        memoizedIsInitialized = 1;
+        return true;
+      }
+      
+      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                          throws java.io.IOException {
+        getSerializedSize();
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          output.writeBytes(1, getNumberBytes());
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          output.writeEnum(2, type_.getNumber());
+        }
+        getUnknownFields().writeTo(output);
+      }
+      
+      private int memoizedSerializedSize = -1;
+      public int getSerializedSize() {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+      
+        size = 0;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeBytesSize(1, getNumberBytes());
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeEnumSize(2, type_.getNumber());
+        }
+        size += getUnknownFields().getSerializedSize();
+        memoizedSerializedSize = size;
+        return size;
+      }
+      
+      @java.lang.Override
+      protected Object writeReplace() throws java.io.ObjectStreamException {
+        return super.writeReplace();
+      }
+      
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(
+          com.google.protobuf.ByteString data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(
+          com.google.protobuf.ByteString data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(byte[] data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(
+          byte[] data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseDelimitedFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseDelimitedFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(
+          com.google.protobuf.CodedInputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      
+      public static Builder newBuilder() { return Builder.create(); }
+      public Builder newBuilderForType() { return newBuilder(); }
+      public static Builder newBuilder(com.example.tutorial.AddressBookProtos.Person.PhoneNumber prototype) {
+        return newBuilder().mergeFrom(prototype);
+      }
+      public Builder toBuilder() { return newBuilder(this); }
+      
+      @java.lang.Override
+      protected Builder newBuilderForType(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        Builder builder = new Builder(parent);
+        return builder;
+      }
+      public static final class Builder extends
+          com.google.protobuf.GeneratedMessage.Builder<Builder>
+         implements com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder {
+        public static final com.google.protobuf.Descriptors.Descriptor
+            getDescriptor() {
+          return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_descriptor;
+        }
+        
+        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+            internalGetFieldAccessorTable() {
+          return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_fieldAccessorTable;
+        }
+        
+        // Construct using com.example.tutorial.AddressBookProtos.Person.PhoneNumber.newBuilder()
+        private Builder() {
+          maybeForceBuilderInitialization();
+        }
+        
+        private Builder(BuilderParent parent) {
+          super(parent);
+          maybeForceBuilderInitialization();
+        }
+        private void maybeForceBuilderInitialization() {
+          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          }
+        }
+        private static Builder create() {
+          return new Builder();
+        }
+        
+        public Builder clear() {
+          super.clear();
+          number_ = "";
+          bitField0_ = (bitField0_ & ~0x00000001);
+          type_ = com.example.tutorial.AddressBookProtos.Person.PhoneType.HOME;
+          bitField0_ = (bitField0_ & ~0x00000002);
+          return this;
+        }
+        
+        public Builder clone() {
+          return create().mergeFrom(buildPartial());
+        }
+        
+        public com.google.protobuf.Descriptors.Descriptor
+            getDescriptorForType() {
+          return com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDescriptor();
+        }
+        
+        public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getDefaultInstanceForType() {
+          return com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance();
+        }
+        
+        public com.example.tutorial.AddressBookProtos.Person.PhoneNumber build() {
+          com.example.tutorial.AddressBookProtos.Person.PhoneNumber result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(result);
+          }
+          return result;
         }
-
-        private void initFields() {
+        
+        private com.example.tutorial.AddressBookProtos.Person.PhoneNumber buildParsed()
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          com.example.tutorial.AddressBookProtos.Person.PhoneNumber result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(
+              result).asInvalidProtocolBufferException();
+          }
+          return result;
+        }
+        
+        public com.example.tutorial.AddressBookProtos.Person.PhoneNumber buildPartial() {
+          com.example.tutorial.AddressBookProtos.Person.PhoneNumber result = new com.example.tutorial.AddressBookProtos.Person.PhoneNumber(this);
+          int from_bitField0_ = bitField0_;
+          int to_bitField0_ = 0;
+          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+            to_bitField0_ |= 0x00000001;
+          }
+          result.number_ = number_;
+          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+            to_bitField0_ |= 0x00000002;
+          }
+          result.type_ = type_;
+          result.bitField0_ = to_bitField0_;
+          onBuilt();
+          return result;
+        }
+        
+        public Builder mergeFrom(com.google.protobuf.Message other) {
+          if (other instanceof com.example.tutorial.AddressBookProtos.Person.PhoneNumber) {
+            return mergeFrom((com.example.tutorial.AddressBookProtos.Person.PhoneNumber)other);
+          } else {
+            super.mergeFrom(other);
+            return this;
+          }
+        }
+        
+        public Builder mergeFrom(com.example.tutorial.AddressBookProtos.Person.PhoneNumber other) {
+          if (other == com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance()) return this;
+          if (other.hasNumber()) {
+            setNumber(other.getNumber());
+          }
+          if (other.hasType()) {
+            setType(other.getType());
+          }
+          this.mergeUnknownFields(other.getUnknownFields());
+          return this;
         }
-
+        
         public final boolean isInitialized() {
-            for (com.example.tutorial.AddressBookProtos.Person element : getPersonList()) {
-                if (!element.isInitialized())
-                    return false;
-            }
-            return true;
-        }
-
-        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            getSerializedSize();
-            for (com.example.tutorial.AddressBookProtos.Person element : getPersonList()) {
-                output.writeMessage(1, element);
-            }
-            getUnknownFields().writeTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-
-        public int getSerializedSize() {
-            int size = memoizedSerializedSize;
-            if (size != -1)
-                return size;
-
-            size = 0;
-            for (com.example.tutorial.AddressBookProtos.Person element : getPersonList()) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, element);
+          if (!hasNumber()) {
+            
+            return false;
+          }
+          return true;
+        }
+        
+        public Builder mergeFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws java.io.IOException {
+          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder(
+              this.getUnknownFields());
+          while (true) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  this.setUnknownFields(unknownFields.build());
+                  onChanged();
+                  return this;
+                }
+                break;
+              }
+              case 10: {
+                bitField0_ |= 0x00000001;
+                number_ = input.readBytes();
+                break;
+              }
+              case 16: {
+                int rawValue = input.readEnum();
+                com.example.tutorial.AddressBookProtos.Person.PhoneType value = com.example.tutorial.AddressBookProtos.Person.PhoneType.valueOf(rawValue);
+                if (value == null) {
+                  unknownFields.mergeVarintField(2, rawValue);
+                } else {
+                  bitField0_ |= 0x00000002;
+                  type_ = value;
+                }
+                break;
+              }
             }
-            size += getUnknownFields().getSerializedSize();
-            memoizedSerializedSize = size;
-            return size;
-        }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(com.google.protobuf.ByteString data)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(com.google.protobuf.ByteString data,
-                                                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data, extensionRegistry).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(byte[] data)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(byte[] data,
-                                                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws com.google.protobuf.InvalidProtocolBufferException {
-            return newBuilder().mergeFrom(data, extensionRegistry).buildParsed();
+          }
         }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(java.io.InputStream input)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input).buildParsed();
+        
+        private int bitField0_;
+        
+        // required string number = 1;
+        private Object number_ = "";
+        public boolean hasNumber() {
+          return ((bitField0_ & 0x00000001) == 0x00000001);
+        }
+        public String getNumber() {
+          Object ref = number_;
+          if (!(ref instanceof String)) {
+            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+            number_ = s;
+            return s;
+          } else {
+            return (String) ref;
+          }
+        }
+        public Builder setNumber(String value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+          number_ = value;
+          onChanged();
+          return this;
+        }
+        public Builder clearNumber() {
+          bitField0_ = (bitField0_ & ~0x00000001);
+          number_ = getDefaultInstance().getNumber();
+          onChanged();
+          return this;
+        }
+        void setNumber(com.google.protobuf.ByteString value) {
+          bitField0_ |= 0x00000001;
+          number_ = value;
+          onChanged();
+        }
+        
+        // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
+        private com.example.tutorial.AddressBookProtos.Person.PhoneType type_ = com.example.tutorial.AddressBookProtos.Person.PhoneType.HOME;
+        public boolean hasType() {
+          return ((bitField0_ & 0x00000002) == 0x00000002);
+        }
+        public com.example.tutorial.AddressBookProtos.Person.PhoneType getType() {
+          return type_;
+        }
+        public Builder setType(com.example.tutorial.AddressBookProtos.Person.PhoneType value) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          bitField0_ |= 0x00000002;
+          type_ = value;
+          onChanged();
+          return this;
+        }
+        public Builder clearType() {
+          bitField0_ = (bitField0_ & ~0x00000002);
+          type_ = com.example.tutorial.AddressBookProtos.Person.PhoneType.HOME;
+          onChanged();
+          return this;
+        }
+        
+        // @@protoc_insertion_point(builder_scope:tutorial.Person.PhoneNumber)
+      }
+      
+      static {
+        defaultInstance = new PhoneNumber(true);
+        defaultInstance.initFields();
+      }
+      
+      // @@protoc_insertion_point(class_scope:tutorial.Person.PhoneNumber)
+    }
+    
+    private int bitField0_;
+    // required string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
         }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(java.io.InputStream input,
-                                                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input, extensionRegistry).buildParsed();
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required int32 id = 2;
+    public static final int ID_FIELD_NUMBER = 2;
+    private int id_;
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getId() {
+      return id_;
+    }
+    
+    // optional string email = 3;
+    public static final int EMAIL_FIELD_NUMBER = 3;
+    private Object email_;
+    public boolean hasEmail() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public String getEmail() {
+      Object ref = email_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          email_ = s;
         }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseDelimitedFrom(java.io.InputStream input)
-            throws java.io.IOException {
-            Builder builder = newBuilder();
-            if (builder.mergeDelimitedFrom(input)) {
-                return builder.buildParsed();
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getEmailBytes() {
+      Object ref = email_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        email_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated .tutorial.Person.PhoneNumber phone = 4;
+    public static final int PHONE_FIELD_NUMBER = 4;
+    private java.util.List<com.example.tutorial.AddressBookProtos.Person.PhoneNumber> phone_;
+    public java.util.List<com.example.tutorial.AddressBookProtos.Person.PhoneNumber> getPhoneList() {
+      return phone_;
+    }
+    public java.util.List<? extends com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder> 
+        getPhoneOrBuilderList() {
+      return phone_;
+    }
+    public int getPhoneCount() {
+      return phone_.size();
+    }
+    public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getPhone(int index) {
+      return phone_.get(index);
+    }
+    public com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder getPhoneOrBuilder(
+        int index) {
+      return phone_.get(index);
+    }
+    
+    private void initFields() {
+      name_ = "";
+      id_ = 0;
+      email_ = "";
+      phone_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasName()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      for (int i = 0; i < getPhoneCount(); i++) {
+        if (!getPhone(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, id_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, getEmailBytes());
+      }
+      for (int i = 0; i < phone_.size(); i++) {
+        output.writeMessage(4, phone_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, id_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getEmailBytes());
+      }
+      for (int i = 0; i < phone_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, phone_.get(i));
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    @java.lang.Override
+    protected Object writeReplace() throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.example.tutorial.AddressBookProtos.Person parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.example.tutorial.AddressBookProtos.Person prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.example.tutorial.AddressBookProtos.PersonOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_fieldAccessorTable;
+      }
+      
+      // Construct using com.example.tutorial.AddressBookProtos.Person.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getPhoneFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        id_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        email_ = "";
+        bitField0_ = (bitField0_ & ~0x00000004);
+        if (phoneBuilder_ == null) {
+          phone_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          phoneBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.example.tutorial.AddressBookProtos.Person.getDescriptor();
+      }
+      
+      public com.example.tutorial.AddressBookProtos.Person getDefaultInstanceForType() {
+        return com.example.tutorial.AddressBookProtos.Person.getDefaultInstance();
+      }
+      
+      public com.example.tutorial.AddressBookProtos.Person build() {
+        com.example.tutorial.AddressBookProtos.Person result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.example.tutorial.AddressBookProtos.Person buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.example.tutorial.AddressBookProtos.Person result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.example.tutorial.AddressBookProtos.Person buildPartial() {
+        com.example.tutorial.AddressBookProtos.Person result = new com.example.tutorial.AddressBookProtos.Person(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.id_ = id_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.email_ = email_;
+        if (phoneBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008)) {
+            phone_ = java.util.Collections.unmodifiableList(phone_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.phone_ = phone_;
+        } else {
+          result.phone_ = phoneBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.example.tutorial.AddressBookProtos.Person) {
+          return mergeFrom((com.example.tutorial.AddressBookProtos.Person)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.example.tutorial.AddressBookProtos.Person other) {
+        if (other == com.example.tutorial.AddressBookProtos.Person.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (other.hasId()) {
+          setId(other.getId());
+        }
+        if (other.hasEmail()) {
+          setEmail(other.getEmail());
+        }
+        if (phoneBuilder_ == null) {
+          if (!other.phone_.isEmpty()) {
+            if (phone_.isEmpty()) {
+              phone_ = other.phone_;
+              bitField0_ = (bitField0_ & ~0x00000008);
             } else {
-                return null;
+              ensurePhoneIsMutable();
+              phone_.addAll(other.phone_);
             }
-        }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseDelimitedFrom(java.io.InputStream input,
-                                                                                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws java.io.IOException {
-            Builder builder = newBuilder();
-            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
-                return builder.buildParsed();
+            onChanged();
+          }
+        } else {
+          if (!other.phone_.isEmpty()) {
+            if (phoneBuilder_.isEmpty()) {
+              phoneBuilder_.dispose();
+              phoneBuilder_ = null;
+              phone_ = other.phone_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              phoneBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getPhoneFieldBuilder() : null;
             } else {
-                return null;
+              phoneBuilder_.addAllMessages(other.phone_);
             }
+          }
         }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(com.google.protobuf.CodedInputStream input)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input).buildParsed();
-        }
-
-        public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(com.google.protobuf.CodedInputStream input,
-                                                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-            throws java.io.IOException {
-            return newBuilder().mergeFrom(input, extensionRegistry).buildParsed();
-        }
-
-        public static Builder newBuilder() {
-            return Builder.create();
-        }
-
-        public Builder newBuilderForType() {
-            return newBuilder();
-        }
-
-        public static Builder newBuilder(com.example.tutorial.AddressBookProtos.AddressBook prototype) {
-            return newBuilder().mergeFrom(prototype);
-        }
-
-        public Builder toBuilder() {
-            return newBuilder(this);
-        }
-
-        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> {
-            private com.example.tutorial.AddressBookProtos.AddressBook result;
-
-            // Construct using com.example.tutorial.AddressBookProtos.AddressBook.newBuilder()
-            private Builder() {
-            }
-
-            private static Builder create() {
-                Builder builder = new Builder();
-                builder.result = new com.example.tutorial.AddressBookProtos.AddressBook();
-                return builder;
-            }
-
-            protected com.example.tutorial.AddressBookProtos.AddressBook internalGetResult() {
-                return result;
-            }
-
-            public Builder clear() {
-                if (result == null) {
-                    throw new IllegalStateException("Cannot call clear() after build().");
-                }
-                result = new com.example.tutorial.AddressBookProtos.AddressBook();
-                return this;
-            }
-
-            public Builder clone() {
-                return create().mergeFrom(result);
-            }
-
-            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return com.example.tutorial.AddressBookProtos.AddressBook.getDescriptor();
-            }
-
-            public com.example.tutorial.AddressBookProtos.AddressBook getDefaultInstanceForType() {
-                return com.example.tutorial.AddressBookProtos.AddressBook.getDefaultInstance();
-            }
-
-            public boolean isInitialized() {
-                return result.isInitialized();
-            }
-
-            public com.example.tutorial.AddressBookProtos.AddressBook build() {
-                if (result != null && !isInitialized()) {
-                    throw newUninitializedMessageException(result);
-                }
-                return buildPartial();
-            }
-
-            private com.example.tutorial.AddressBookProtos.AddressBook buildParsed()
-                throws com.google.protobuf.InvalidProtocolBufferException {
-                if (!isInitialized()) {
-                    throw newUninitializedMessageException(result).asInvalidProtocolBufferException();
-                }
-                return buildPartial();
-            }
-
-            public com.example.tutorial.AddressBookProtos.AddressBook buildPartial() {
-                if (result == null) {
-                    throw new IllegalStateException("build() has already been called on this Builder.");
-                }
-                if (result.person_ != java.util.Collections.EMPTY_LIST) {
-                    result.person_ = java.util.Collections.unmodifiableList(result.person_);
-                }
-                com.example.tutorial.AddressBookProtos.AddressBook returnMe = result;
-                result = null;
-                return returnMe;
-            }
-
-            public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof com.example.tutorial.AddressBookProtos.AddressBook) {
-                    return mergeFrom((com.example.tutorial.AddressBookProtos.AddressBook)other);
-                } else {
-                    super.mergeFrom(other);
-                    return this;
-                }
-            }
-
-            public Builder mergeFrom(com.example.tutorial.AddressBookProtos.AddressBook other) {
-                if (other == com.example.tutorial.AddressBookProtos.AddressBook.getDefaultInstance())
-                    return this;
-                if (!other.person_.isEmpty()) {
-                    if (result.person_.isEmpty()) {
-                        result.person_ = new java.util.ArrayList<com.example.tutorial.AddressBookProtos.Person>();
-                    }
-                    result.person_.addAll(other.person_);
-                }
-                this.mergeUnknownFields(other.getUnknownFields());
-                return this;
-            }
-
-            public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
-                                     com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-                throws java.io.IOException {
-                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-                    com.google.protobuf.UnknownFieldSet.newBuilder(this.getUnknownFields());
-                while (true) {
-                    int tag = input.readTag();
-                    switch (tag) {
-                        case 0:
-                            this.setUnknownFields(unknownFields.build());
-                            return this;
-                        default: {

[... 1145 lines stripped ...]