Regenerated code with changes
diff --git a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
index cbbc50d..d070aed 100644
--- a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
+++ b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
@@ -59,7 +59,7 @@
   [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

   [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class TestRequiredLite : pb::GeneratedMessageLite<TestRequiredLite, TestRequiredLite.Builder> {

-    private static readonly TestRequiredLite defaultInstance = new Builder().BuildPartial();

+    private static readonly TestRequiredLite defaultInstance = new TestRequiredLite().MakeReadOnly();

     private static readonly string[] _testRequiredLiteFieldNames = new string[] { "d", "en" };

     private static readonly uint[] _testRequiredLiteFieldTags = new uint[] { 8, 16 };

     public static TestRequiredLite DefaultInstance {

@@ -67,7 +67,7 @@
     }

     

     public override TestRequiredLite DefaultInstanceForType {

-      get { return defaultInstance; }

+      get { return DefaultInstance; }

     }

     

     protected override TestRequiredLite ThisMessage {

@@ -183,6 +183,10 @@
     public static TestRequiredLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

+    private TestRequiredLite MakeReadOnly() {

+      return this;

+    }

+    

     public static Builder CreateBuilder() { return new Builder(); }

     public override Builder ToBuilder() { return CreateBuilder(this); }

     public override Builder CreateBuilderForType() { return new Builder(); }

@@ -198,22 +202,22 @@
         get { return this; }

       }

       public Builder() {

-        result = DefaultInstance ?? new TestRequiredLite();

-        builderIsReadOnly = result == DefaultInstance;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

       }

       internal Builder(TestRequiredLite cloneFrom) {

         result = cloneFrom;

-        builderIsReadOnly = true;

+        resultIsReadOnly = true;

       }

       

-      bool builderIsReadOnly;

-      TestRequiredLite result;

+      private bool resultIsReadOnly;

+      private TestRequiredLite result;

       

       private TestRequiredLite PrepareBuilder() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           TestRequiredLite original = result;

           result = new TestRequiredLite();

-          builderIsReadOnly = false;

+          resultIsReadOnly = false;

           MergeFrom(original);

         }

         return result;

@@ -228,13 +232,13 @@
       }

       

       public override Builder Clear() {

-        result = DefaultInstance ?? new TestRequiredLite();

-        builderIsReadOnly = true;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

         return this;

       }

       

       public override Builder Clone() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return new Builder(result);

         } else {

           return new Builder().MergeFrom(result);

@@ -246,11 +250,11 @@
       }

       

       public override TestRequiredLite BuildPartial() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return result;

         }

-        builderIsReadOnly = true;

-        return result;

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

       }

       

       public override Builder MergeFrom(pb::IMessageLite other) {

@@ -371,7 +375,7 @@
   [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

   [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class TestInteropPersonLite : pb::ExtendableMessageLite<TestInteropPersonLite, TestInteropPersonLite.Builder> {

-    private static readonly TestInteropPersonLite defaultInstance = new Builder().BuildPartial();

+    private static readonly TestInteropPersonLite defaultInstance = new TestInteropPersonLite().MakeReadOnly();

     private static readonly string[] _testInteropPersonLiteFieldNames = new string[] { "addresses", "codes", "email", "id", "name", "phone" };

     private static readonly uint[] _testInteropPersonLiteFieldTags = new uint[] { 43, 82, 26, 16, 10, 34 };

     public static TestInteropPersonLite DefaultInstance {

@@ -379,7 +383,7 @@
     }

     

     public override TestInteropPersonLite DefaultInstanceForType {

-      get { return defaultInstance; }

+      get { return DefaultInstance; }

     }

     

     protected override TestInteropPersonLite ThisMessage {

@@ -403,7 +407,7 @@
       [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

       [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

       public sealed partial class PhoneNumber : pb::GeneratedMessageLite<PhoneNumber, PhoneNumber.Builder> {

-        private static readonly PhoneNumber defaultInstance = new Builder().BuildPartial();

+        private static readonly PhoneNumber defaultInstance = new PhoneNumber().MakeReadOnly();

         private static readonly string[] _phoneNumberFieldNames = new string[] { "number", "type" };

         private static readonly uint[] _phoneNumberFieldTags = new uint[] { 10, 16 };

         public static PhoneNumber DefaultInstance {

@@ -411,7 +415,7 @@
         }

         

         public override PhoneNumber DefaultInstanceForType {

-          get { return defaultInstance; }

+          get { return DefaultInstance; }

         }

         

         protected override PhoneNumber ThisMessage {

@@ -526,6 +530,10 @@
         public static PhoneNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

           return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

         }

+        private PhoneNumber MakeReadOnly() {

+          return this;

+        }

+        

         public static Builder CreateBuilder() { return new Builder(); }

         public override Builder ToBuilder() { return CreateBuilder(this); }

         public override Builder CreateBuilderForType() { return new Builder(); }

@@ -541,22 +549,22 @@
             get { return this; }

           }

           public Builder() {

-            result = DefaultInstance ?? new PhoneNumber();

-            builderIsReadOnly = result == DefaultInstance;

+            result = DefaultInstance;

+            resultIsReadOnly = true;

           }

           internal Builder(PhoneNumber cloneFrom) {

             result = cloneFrom;

-            builderIsReadOnly = true;

+            resultIsReadOnly = true;

           }

           

-          bool builderIsReadOnly;

-          PhoneNumber result;

+          private bool resultIsReadOnly;

+          private PhoneNumber result;

           

           private PhoneNumber PrepareBuilder() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               PhoneNumber original = result;

               result = new PhoneNumber();

-              builderIsReadOnly = false;

+              resultIsReadOnly = false;

               MergeFrom(original);

             }

             return result;

@@ -571,13 +579,13 @@
           }

           

           public override Builder Clear() {

-            result = DefaultInstance ?? new PhoneNumber();

-            builderIsReadOnly = true;

+            result = DefaultInstance;

+            resultIsReadOnly = true;

             return this;

           }

           

           public override Builder Clone() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               return new Builder(result);

             } else {

               return new Builder().MergeFrom(result);

@@ -589,11 +597,11 @@
           }

           

           public override PhoneNumber BuildPartial() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               return result;

             }

-            builderIsReadOnly = true;

-            return result;

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

           }

           

           public override Builder MergeFrom(pb::IMessageLite other) {

@@ -715,7 +723,7 @@
       [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

       [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

       public sealed partial class Addresses : pb::GeneratedMessageLite<Addresses, Addresses.Builder> {

-        private static readonly Addresses defaultInstance = new Builder().BuildPartial();

+        private static readonly Addresses defaultInstance = new Addresses().MakeReadOnly();

         private static readonly string[] _addressesFieldNames = new string[] { "address", "address2", "city", "state", "zip" };

         private static readonly uint[] _addressesFieldTags = new uint[] { 10, 18, 26, 34, 45 };

         public static Addresses DefaultInstance {

@@ -723,7 +731,7 @@
         }

         

         public override Addresses DefaultInstanceForType {

-          get { return defaultInstance; }

+          get { return DefaultInstance; }

         }

         

         protected override Addresses ThisMessage {

@@ -899,6 +907,10 @@
         public static Addresses ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

           return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

         }

+        private Addresses MakeReadOnly() {

+          return this;

+        }

+        

         public static Builder CreateBuilder() { return new Builder(); }

         public override Builder ToBuilder() { return CreateBuilder(this); }

         public override Builder CreateBuilderForType() { return new Builder(); }

@@ -914,22 +926,22 @@
             get { return this; }

           }

           public Builder() {

-            result = DefaultInstance ?? new Addresses();

-            builderIsReadOnly = result == DefaultInstance;

+            result = DefaultInstance;

+            resultIsReadOnly = true;

           }

           internal Builder(Addresses cloneFrom) {

             result = cloneFrom;

-            builderIsReadOnly = true;

+            resultIsReadOnly = true;

           }

           

-          bool builderIsReadOnly;

-          Addresses result;

+          private bool resultIsReadOnly;

+          private Addresses result;

           

           private Addresses PrepareBuilder() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               Addresses original = result;

               result = new Addresses();

-              builderIsReadOnly = false;

+              resultIsReadOnly = false;

               MergeFrom(original);

             }

             return result;

@@ -944,13 +956,13 @@
           }

           

           public override Builder Clear() {

-            result = DefaultInstance ?? new Addresses();

-            builderIsReadOnly = true;

+            result = DefaultInstance;

+            resultIsReadOnly = true;

             return this;

           }

           

           public override Builder Clone() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               return new Builder(result);

             } else {

               return new Builder().MergeFrom(result);

@@ -962,11 +974,11 @@
           }

           

           public override Addresses BuildPartial() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               return result;

             }

-            builderIsReadOnly = true;

-            return result;

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

           }

           

           public override Builder MergeFrom(pb::IMessageLite other) {

@@ -1388,6 +1400,13 @@
     public static TestInteropPersonLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

+    private TestInteropPersonLite MakeReadOnly() {

+      codes_.MakeReadOnly();

+      phone_.MakeReadOnly();

+      addresses_.MakeReadOnly();

+      return this;

+    }

+    

     public static Builder CreateBuilder() { return new Builder(); }

     public override Builder ToBuilder() { return CreateBuilder(this); }

     public override Builder CreateBuilderForType() { return new Builder(); }

@@ -1403,22 +1422,22 @@
         get { return this; }

       }

       public Builder() {

-        result = DefaultInstance ?? new TestInteropPersonLite();

-        builderIsReadOnly = result == DefaultInstance;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

       }

       internal Builder(TestInteropPersonLite cloneFrom) {

         result = cloneFrom;

-        builderIsReadOnly = true;

+        resultIsReadOnly = true;

       }

       

-      bool builderIsReadOnly;

-      TestInteropPersonLite result;

+      private bool resultIsReadOnly;

+      private TestInteropPersonLite result;

       

       private TestInteropPersonLite PrepareBuilder() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           TestInteropPersonLite original = result;

           result = new TestInteropPersonLite();

-          builderIsReadOnly = false;

+          resultIsReadOnly = false;

           MergeFrom(original);

         }

         return result;

@@ -1433,13 +1452,13 @@
       }

       

       public override Builder Clear() {

-        result = DefaultInstance ?? new TestInteropPersonLite();

-        builderIsReadOnly = true;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

         return this;

       }

       

       public override Builder Clone() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return new Builder(result);

         } else {

           return new Builder().MergeFrom(result);

@@ -1451,14 +1470,11 @@
       }

       

       public override TestInteropPersonLite BuildPartial() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return result;

         }

-        result.codes_.MakeReadOnly();

-        result.phone_.MakeReadOnly();

-        result.addresses_.MakeReadOnly();

-        builderIsReadOnly = true;

-        return result;

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

       }

       

       public override Builder MergeFrom(pb::IMessageLite other) {

@@ -1745,7 +1761,7 @@
   [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

   [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class TestInteropEmployeeIdLite : pb::GeneratedMessageLite<TestInteropEmployeeIdLite, TestInteropEmployeeIdLite.Builder> {

-    private static readonly TestInteropEmployeeIdLite defaultInstance = new Builder().BuildPartial();

+    private static readonly TestInteropEmployeeIdLite defaultInstance = new TestInteropEmployeeIdLite().MakeReadOnly();

     private static readonly string[] _testInteropEmployeeIdLiteFieldNames = new string[] { "number" };

     private static readonly uint[] _testInteropEmployeeIdLiteFieldTags = new uint[] { 10 };

     public static TestInteropEmployeeIdLite DefaultInstance {

@@ -1753,7 +1769,7 @@
     }

     

     public override TestInteropEmployeeIdLite DefaultInstanceForType {

-      get { return defaultInstance; }

+      get { return DefaultInstance; }

     }

     

     protected override TestInteropEmployeeIdLite ThisMessage {

@@ -1849,6 +1865,10 @@
     public static TestInteropEmployeeIdLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

+    private TestInteropEmployeeIdLite MakeReadOnly() {

+      return this;

+    }

+    

     public static Builder CreateBuilder() { return new Builder(); }

     public override Builder ToBuilder() { return CreateBuilder(this); }

     public override Builder CreateBuilderForType() { return new Builder(); }

@@ -1864,22 +1884,22 @@
         get { return this; }

       }

       public Builder() {

-        result = DefaultInstance ?? new TestInteropEmployeeIdLite();

-        builderIsReadOnly = result == DefaultInstance;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

       }

       internal Builder(TestInteropEmployeeIdLite cloneFrom) {

         result = cloneFrom;

-        builderIsReadOnly = true;

+        resultIsReadOnly = true;

       }

       

-      bool builderIsReadOnly;

-      TestInteropEmployeeIdLite result;

+      private bool resultIsReadOnly;

+      private TestInteropEmployeeIdLite result;

       

       private TestInteropEmployeeIdLite PrepareBuilder() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           TestInteropEmployeeIdLite original = result;

           result = new TestInteropEmployeeIdLite();

-          builderIsReadOnly = false;

+          resultIsReadOnly = false;

           MergeFrom(original);

         }

         return result;

@@ -1894,13 +1914,13 @@
       }

       

       public override Builder Clear() {

-        result = DefaultInstance ?? new TestInteropEmployeeIdLite();

-        builderIsReadOnly = true;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

         return this;

       }

       

       public override Builder Clone() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return new Builder(result);

         } else {

           return new Builder().MergeFrom(result);

@@ -1912,11 +1932,11 @@
       }

       

       public override TestInteropEmployeeIdLite BuildPartial() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return result;

         }

-        builderIsReadOnly = true;

-        return result;

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

       }

       

       public override Builder MergeFrom(pb::IMessageLite other) {