First step decoupling the library from protocol buffer: Removing protocol buffer dependency for PhoneNumber class. The change decreases the Phonenumber.java to a third of its original size (from 18.5k to 5.9k).

Change-Id: I9ed04e5c9b5fbb2f4116906c230e614231ea262b
diff --git a/README.android b/README.android
index d137bba..c84926b 100644
--- a/README.android
+++ b/README.android
@@ -1,4 +1,4 @@
 URL: http://code.google.com/p/libphonenumber/
-Version: r28
+Version: r29
 License: Apache 2
 Description: Google Phone Number Library.
diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
index 5feefdd..38b9c40 100644
--- a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
@@ -562,10 +562,9 @@
     if (number.hasExtension()) {
       // We don't want to alter the proto given to us, but we don't want to include the extension
       // when we format it, so we copy it and clear the extension here.
-      PhoneNumber.Builder protoBuilder = PhoneNumber.newBuilder();
-      protoBuilder.mergeFrom(number);
-      protoBuilder.clearExtension();
-      copiedProto = protoBuilder.build();
+      copiedProto = new PhoneNumber();
+      copiedProto.mergeFrom(number);
+      copiedProto.clearExtension();
     } else {
       copiedProto = number;
     }
@@ -680,13 +679,13 @@
    */
   public String format(PhoneNumber number, PhoneNumberFormat numberFormat) {
     StringBuffer formattedNumber = new StringBuffer(20);
-    format(number.toBuilder(), numberFormat, formattedNumber);
+    format(number, numberFormat, formattedNumber);
     return formattedNumber.toString();
   }
 
-  // Same as format(PhoneNumber, PhoneNumberFormat), but accepts mutable PhoneNumber.Builder and
-  // StringBuffer as parameters to decrease object creation when invoked many times.
-  public void format(PhoneNumber.Builder number, PhoneNumberFormat numberFormat,
+  // Same as format(PhoneNumber, PhoneNumberFormat), but accepts mutable StringBuffer as parameters
+  // to decrease object creation when invoked many times.
+  public void format(PhoneNumber number, PhoneNumberFormat numberFormat,
                      StringBuffer formattedNumber) {
     // Clear the StringBuffer first.
     formattedNumber.setLength(0);
@@ -897,12 +896,6 @@
    * @return  the national significant number of the PhoneNumber object passed in
    */
   public static String getNationalSignificantNumber(PhoneNumber number) {
-    return getNationalSignificantNumber(number.toBuilder());
-  }
-
-  // Same as getNationalSignificantNumber(PhoneNumber), but accepts mutable PhoneNumber.Builder as
-  // a parameter to decrease object creation when invoked many times.
-  public static String getNationalSignificantNumber(PhoneNumber.Builder number) {
     // The leading zero in the national (significant) number of an Italian phone number has a
     // special meaning. Unlike the rest of the world, it indicates the number is a landline
     // number. There have been plans to migrate landline numbers to start with the digit two since
@@ -1020,11 +1013,6 @@
    */
   private void maybeGetFormattedExtension(PhoneNumber number, String regionCode,
                                           StringBuffer formattedNumber) {
-    maybeGetFormattedExtension(number.toBuilder(), regionCode, formattedNumber);
-  }
-
-  private void maybeGetFormattedExtension(PhoneNumber.Builder number, String regionCode,
-                                          StringBuffer formattedNumber) {
     if (number.hasExtension()) {
       // Formats the extension part of the phone number by prefixing it with the appropriate
       // extension prefix. This will be the default extension prefix, unless overridden by a
@@ -1420,14 +1408,14 @@
    *     country code was extracted, this will be left unchanged.
    * @param storeCountryCodeSource  true if the country_code_source field of phoneNumber should be
    *     populated.
-   * @param phoneNumber  the PhoneNumber.Builder object that needs to be populated with country code
+   * @param phoneNumber  the PhoneNumber object that needs to be populated with country code
    *     and country code source. Note the country code is always populated, whereas country code
    *     source is only populated when keepCountryCodeSource is true.
    * @return  the country code extracted or 0 if none could be extracted
    */
   int maybeExtractCountryCode(String number, PhoneMetadata defaultRegionMetadata,
                               StringBuffer nationalNumber, boolean storeCountryCodeSource,
-                              PhoneNumber.Builder phoneNumber)
+                              PhoneNumber phoneNumber)
       throws NumberParseException {
     if (number.length() == 0) {
       return 0;
@@ -1649,15 +1637,14 @@
    */
   public PhoneNumber parse(String numberToParse, String defaultCountry)
       throws NumberParseException {
-    PhoneNumber.Builder phoneNumber = PhoneNumber.newBuilder();
+    PhoneNumber phoneNumber = new PhoneNumber();
     parse(numberToParse, defaultCountry, phoneNumber);
-    return phoneNumber.build();
+    return phoneNumber;
   }
 
-  // Same as parse(String, String), but accepts mutable PhoneNumber.Builder as a parameter to
+  // Same as parse(String, String), but accepts mutable PhoneNumber as a parameter to
   // decrease object creation when invoked many times.
-  public void parse(String numberToParse, String defaultCountry,
-                    PhoneNumber.Builder phoneNumber)
+  public void parse(String numberToParse, String defaultCountry, PhoneNumber phoneNumber)
       throws NumberParseException {
     if (!isValidRegionCode(defaultCountry)) {
       throw new NumberParseException(NumberParseException.ErrorType.INVALID_COUNTRY_CODE,
@@ -1684,15 +1671,15 @@
    */
   public PhoneNumber parseAndKeepRawInput(String numberToParse, String defaultCountry)
       throws NumberParseException {
-    PhoneNumber.Builder phoneNumber = PhoneNumber.newBuilder();
+    PhoneNumber phoneNumber = new PhoneNumber();
     parseAndKeepRawInput(numberToParse, defaultCountry, phoneNumber);
-    return phoneNumber.build();
+    return phoneNumber;
   }
 
-  // Same as parseAndKeepRawInput(String, String), but accepts mutable PhoneNumber.Builder as a
-  // parameter to decrease object creation when invoked many times.
+  // Same as parseAndKeepRawInput(String, String), but accepts mutable PhoneNumber as a parameter to
+  // decrease object creation when invoked many times.
   public void parseAndKeepRawInput(String numberToParse, String defaultCountry,
-                                   PhoneNumber.Builder phoneNumber)
+                                   PhoneNumber phoneNumber)
       throws NumberParseException {
     if (!isValidRegionCode(defaultCountry)) {
       throw new NumberParseException(NumberParseException.ErrorType.INVALID_COUNTRY_CODE,
@@ -1731,7 +1718,7 @@
    * isNumberMatch().
    */
   private void parseHelper(String numberToParse, String defaultCountry,
-                           Boolean keepRawInput, PhoneNumber.Builder phoneNumber)
+                           Boolean keepRawInput, PhoneNumber phoneNumber)
       throws NumberParseException {
     // Extract a possible number from the string passed in (this strips leading characters that
     // could not be the start of a phone number.)
@@ -1827,12 +1814,12 @@
    */
   public MatchType isNumberMatch(PhoneNumber firstNumberIn, PhoneNumber secondNumberIn) {
     // Make copies of the phone number so that the numbers passed in are not edited.
-    PhoneNumber.Builder firstNumber = PhoneNumber.newBuilder();
+    PhoneNumber firstNumber = new PhoneNumber();
     firstNumber.mergeFrom(firstNumberIn);
-    PhoneNumber.Builder secondNumber = PhoneNumber.newBuilder();
+    PhoneNumber secondNumber = new PhoneNumber();
     secondNumber.mergeFrom(secondNumberIn);
     // First clear raw_input and country_code_source field and any empty-string extensions so that
-    // we can use the proto-buffer equality method.
+    // we can use the PhoneNumber.exactlySameAs() method.
     firstNumber.clearRawInput();
     firstNumber.clearCountryCodeSource();
     secondNumber.clearRawInput();
@@ -1846,22 +1833,19 @@
         secondNumber.clearExtension();
     }
 
-    PhoneNumber number1 = firstNumber.build();
-    PhoneNumber number2 = secondNumber.build();
-
     // Early exit if both had extensions and these are different.
-    if (number1.hasExtension() && number2.hasExtension() &&
-        !number1.getExtension().equals(number2.getExtension())) {
+    if (firstNumber.hasExtension() && secondNumber.hasExtension() &&
+        !firstNumber.getExtension().equals(secondNumber.getExtension())) {
       return MatchType.NO_MATCH;
     }
-    int firstNumberCountryCode = number1.getCountryCode();
-    int secondNumberCountryCode = number2.getCountryCode();
+    int firstNumberCountryCode = firstNumber.getCountryCode();
+    int secondNumberCountryCode = secondNumber.getCountryCode();
     // Both had country code specified.
     if (firstNumberCountryCode != 0 && secondNumberCountryCode != 0) {
-      if (areSameMessages(number1, number2)) {
+      if (firstNumber.exactlySameAs(secondNumber)) {
         return MatchType.EXACT_MATCH;
       } else if (firstNumberCountryCode == secondNumberCountryCode &&
-                 isNationalNumberSuffixOfTheOther(number1, number2)) {
+                 isNationalNumberSuffixOfTheOther(firstNumber, secondNumber)) {
         // A SHORT_NSN_MATCH occurs if there is a difference because of the presence or absence of
         // an 'Italian leading zero', the presence or absence of an extension, or one NSN being a
         // shorter variant of the other.
@@ -1872,13 +1856,12 @@
     }
     // Checks cases where one or both country codes were not specified. To make equality checks
     // easier, we first set the country codes to be equal.
-    PhoneNumber newNumber =
-        PhoneNumber.newBuilder(number1).setCountryCode(secondNumberCountryCode).build();
+    firstNumber.setCountryCode(secondNumberCountryCode);
     // If all else was the same, then this is an NSN_MATCH.
-    if (areSameMessages(newNumber, number2)) {
+    if (firstNumber.exactlySameAs(secondNumber)) {
       return MatchType.NSN_MATCH;
     }
-    if (isNationalNumberSuffixOfTheOther(newNumber, number2)) {
+    if (isNationalNumberSuffixOfTheOther(firstNumber, secondNumber)) {
       return MatchType.SHORT_NSN_MATCH;
     }
     return MatchType.NO_MATCH;
@@ -1910,11 +1893,11 @@
    */
   public MatchType isNumberMatch(String firstNumber, String secondNumber)
       throws NumberParseException {
-    PhoneNumber.Builder number1 = PhoneNumber.newBuilder();
+    PhoneNumber number1 = new PhoneNumber();
     parseHelper(firstNumber, null, false, number1);
-    PhoneNumber.Builder number2 = PhoneNumber.newBuilder();
+    PhoneNumber number2 = new PhoneNumber();
     parseHelper(secondNumber, null, false, number2);
-    return isNumberMatch(number1.build(), number2.build());
+    return isNumberMatch(number1, number2);
   }
 
   /**
@@ -1931,8 +1914,8 @@
    */
   public MatchType isNumberMatch(PhoneNumber firstNumber, String secondNumber)
       throws NumberParseException {
-    PhoneNumber.Builder number2 = PhoneNumber.newBuilder();
+    PhoneNumber number2 = new PhoneNumber();
     parseHelper(secondNumber, null, false, number2);
-    return isNumberMatch(firstNumber, number2.build());
+    return isNumberMatch(firstNumber, number2);
   }
 }
diff --git a/java/src/com/google/i18n/phonenumbers/Phonenumber.java b/java/src/com/google/i18n/phonenumbers/Phonenumber.java
index aa79615..c67aed8 100644
--- a/java/src/com/google/i18n/phonenumbers/Phonenumber.java
+++ b/java/src/com/google/i18n/phonenumbers/Phonenumber.java
@@ -1,524 +1,185 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: phonenumber.proto
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Definition of the class representing international telephone numbers. This class is hand created
+ * based on the class file compiled from phonenumber.proto. Please refer to that file for detailed
+ * descriptions of the meaning of each field.
+ */
 
 package com.google.i18n.phonenumbers;
 
+import java.io.Serializable;
+
 public final class Phonenumber {
+
   private Phonenumber() {}
-  public static void registerAllExtensions(
-      com.google.protobuf.ExtensionRegistryLite registry) {
-  }
-  public static final class PhoneNumber extends
-      com.google.protobuf.GeneratedMessageLite {
-    // Use PhoneNumber.newBuilder() to construct.
-    private PhoneNumber() {
-      initFields();
+  public static final class PhoneNumber implements Serializable {
+    public enum CountryCodeSource {
+      FROM_NUMBER_WITH_PLUS_SIGN,
+      FROM_NUMBER_WITH_IDD,
+      FROM_NUMBER_WITHOUT_PLUS_SIGN,
+      FROM_DEFAULT_COUNTRY
     }
-    private PhoneNumber(boolean noInit) {}
-    
-    private static final PhoneNumber defaultInstance;
-    public static PhoneNumber getDefaultInstance() {
-      return defaultInstance;
-    }
-    
-    public PhoneNumber getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-    
-    public enum CountryCodeSource
-        implements com.google.protobuf.Internal.EnumLite {
-      FROM_NUMBER_WITH_PLUS_SIGN(0, 1),
-      FROM_NUMBER_WITH_IDD(1, 5),
-      FROM_NUMBER_WITHOUT_PLUS_SIGN(2, 10),
-      FROM_DEFAULT_COUNTRY(3, 20),
-      ;
 
-
-      public final int getNumber() { return value; }
-
-      public static CountryCodeSource valueOf(int value) {
-        switch (value) {
-          case 1: return FROM_NUMBER_WITH_PLUS_SIGN;
-          case 5: return FROM_NUMBER_WITH_IDD;
-          case 10: return FROM_NUMBER_WITHOUT_PLUS_SIGN;
-          case 20: return FROM_DEFAULT_COUNTRY;
-          default: return null;
-        }
-      }
-
-      public static com.google.protobuf.Internal.EnumLiteMap<CountryCodeSource>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static com.google.protobuf.Internal.EnumLiteMap<CountryCodeSource>
-          internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<CountryCodeSource>() {
-              public CountryCodeSource findValueByNumber(int number) {
-                return CountryCodeSource.valueOf(number)
-      ;        }
-            };
-
-      private final int index;
-      private final int value;
-      private CountryCodeSource(int index, int value) {
-        this.index = index;
-        this.value = value;
-      }
-
-      // @@protoc_insertion_point(enum_scope:i18n.phonenumbers.PhoneNumber.CountryCodeSource)
+    public PhoneNumber() {
+      countryCodeSource_ = CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN;
     }
 
     // required int32 country_code = 1;
-    public static final int COUNTRY_CODE_FIELD_NUMBER = 1;
     private boolean hasCountryCode;
     private int countryCode_ = 0;
     public boolean hasCountryCode() { return hasCountryCode; }
     public int getCountryCode() { return countryCode_; }
-    
+    public PhoneNumber setCountryCode(int value) {
+      hasCountryCode = true;
+      countryCode_ = value;
+      return this;
+    }
+    public PhoneNumber clearCountryCode() {
+      hasCountryCode = false;
+      countryCode_ = 0;
+      return this;
+    }
+
     // required uint64 national_number = 2;
-    public static final int NATIONAL_NUMBER_FIELD_NUMBER = 2;
     private boolean hasNationalNumber;
     private long nationalNumber_ = 0L;
     public boolean hasNationalNumber() { return hasNationalNumber; }
     public long getNationalNumber() { return nationalNumber_; }
-    
+    public PhoneNumber setNationalNumber(long value) {
+      hasNationalNumber = true;
+      nationalNumber_ = value;
+      return this;
+    }
+    public PhoneNumber clearNationalNumber() {
+      hasNationalNumber = false;
+      nationalNumber_ = 0L;
+      return this;
+    }
+
     // optional string extension = 3;
-    public static final int EXTENSION_FIELD_NUMBER = 3;
     private boolean hasExtension;
     private java.lang.String extension_ = "";
     public boolean hasExtension() { return hasExtension; }
-    public java.lang.String getExtension() { return extension_; }
-    
+    public String getExtension() { return extension_; }
+    public PhoneNumber setExtension(String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      hasExtension = true;
+      extension_ = value;
+      return this;
+    }
+    public PhoneNumber clearExtension() {
+      hasExtension = false;
+      extension_ = "";
+      return this;
+    }
+
     // optional bool italian_leading_zero = 4;
-    public static final int ITALIAN_LEADING_ZERO_FIELD_NUMBER = 4;
     private boolean hasItalianLeadingZero;
     private boolean italianLeadingZero_ = false;
     public boolean hasItalianLeadingZero() { return hasItalianLeadingZero; }
     public boolean getItalianLeadingZero() { return italianLeadingZero_; }
-    
+    public PhoneNumber setItalianLeadingZero(boolean value) {
+      hasItalianLeadingZero = true;
+      italianLeadingZero_ = value;
+      return this;
+    }
+    public PhoneNumber clearItalianLeadingZero() {
+      hasItalianLeadingZero = false;
+      italianLeadingZero_ = false;
+      return this;
+    }
+
     // optional string raw_input = 5;
-    public static final int RAW_INPUT_FIELD_NUMBER = 5;
     private boolean hasRawInput;
-    private java.lang.String rawInput_ = "";
+    private String rawInput_ = "";
     public boolean hasRawInput() { return hasRawInput; }
-    public java.lang.String getRawInput() { return rawInput_; }
+    public String getRawInput() { return rawInput_; }
+    public PhoneNumber setRawInput(String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      hasRawInput = true;
+      rawInput_ = value;
+      return this;
+    }
+    public PhoneNumber clearRawInput() {
+      hasRawInput = false;
+      rawInput_ = "";
+      return this;
+    }
 
-    // optional .i18n.phonenumbers.PhoneNumber.CountryCodeSource country_code_source = 6;
-    public static final int COUNTRY_CODE_SOURCE_FIELD_NUMBER = 6;
+    // optional CountryCodeSource country_code_source = 6;
     private boolean hasCountryCodeSource;
-    private com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource countryCodeSource_;
+    private CountryCodeSource countryCodeSource_;
     public boolean hasCountryCodeSource() { return hasCountryCodeSource; }
-    public com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource getCountryCodeSource() { return countryCodeSource_; }
+    public CountryCodeSource getCountryCodeSource() { return countryCodeSource_; }
+    public PhoneNumber setCountryCodeSource(CountryCodeSource value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      hasCountryCodeSource = true;
+      countryCodeSource_ = value;
+      return this;
+    }
+    public PhoneNumber clearCountryCodeSource() {
+      hasCountryCodeSource = false;
+      countryCodeSource_ = CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN;
+      return this;
+    }
 
-    private void initFields() {
-      countryCodeSource_ = com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN;
+    public final PhoneNumber clear() {
+      clearCountryCode();
+      clearNationalNumber();
+      clearExtension();
+      clearItalianLeadingZero();
+      clearRawInput();
+      clearCountryCodeSource();
+      return this;
     }
-    public final boolean isInitialized() {
-      if (!hasCountryCode) return false;
-      if (!hasNationalNumber) return false;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (hasCountryCode()) {
-        output.writeInt32(1, getCountryCode());
-      }
-      if (hasNationalNumber()) {
-        output.writeUInt64(2, getNationalNumber());
-      }
-      if (hasExtension()) {
-        output.writeString(3, getExtension());
-      }
-      if (hasItalianLeadingZero()) {
-        output.writeBool(4, getItalianLeadingZero());
-      }
-      if (hasRawInput()) {
-        output.writeString(5, getRawInput());
-      }
-      if (hasCountryCodeSource()) {
-        output.writeEnum(6, getCountryCodeSource().getNumber());
-      }
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (hasCountryCode()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(1, getCountryCode());
-      }
-      if (hasNationalNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(2, getNationalNumber());
-      }
-      if (hasExtension()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeStringSize(3, getExtension());
-      }
-      if (hasItalianLeadingZero()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(4, getItalianLeadingZero());
-      }
-      if (hasRawInput()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeStringSize(5, getRawInput());
-      }
-      if (hasCountryCodeSource()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(6, getCountryCodeSource().getNumber());
-      }
-      memoizedSerializedSize = size;
-      return size;
-    }
-    
-    public static com.google.i18n.phonenumbers.Phonenumber.PhoneNumber parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.i18n.phonenumbers.Phonenumber.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.google.i18n.phonenumbers.Phonenumber.PhoneNumber parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data).buildParsed();
-    }
-    public static com.google.i18n.phonenumbers.Phonenumber.PhoneNumber parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return newBuilder().mergeFrom(data, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.i18n.phonenumbers.Phonenumber.PhoneNumber parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.i18n.phonenumbers.Phonenumber.PhoneNumber parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input, extensionRegistry)
-               .buildParsed();
-    }
-    public static com.google.i18n.phonenumbers.Phonenumber.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.google.i18n.phonenumbers.Phonenumber.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.google.i18n.phonenumbers.Phonenumber.PhoneNumber parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return newBuilder().mergeFrom(input).buildParsed();
-    }
-    public static com.google.i18n.phonenumbers.Phonenumber.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.google.i18n.phonenumbers.Phonenumber.PhoneNumber prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-    
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageLite.Builder<
-          com.google.i18n.phonenumbers.Phonenumber.PhoneNumber, Builder> {
-      private com.google.i18n.phonenumbers.Phonenumber.PhoneNumber result;
-      
-      // Construct using com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.newBuilder()
-      private Builder() {}
-      
-      private static Builder create() {
-        Builder builder = new Builder();
-        builder.result = new com.google.i18n.phonenumbers.Phonenumber.PhoneNumber();
-        return builder;
-      }
-      
-      protected com.google.i18n.phonenumbers.Phonenumber.PhoneNumber internalGetResult() {
-        return result;
-      }
-      
-      public Builder clear() {
-        if (result == null) {
-          throw new IllegalStateException(
-            "Cannot call clear() after build().");
-        }
-        result = new com.google.i18n.phonenumbers.Phonenumber.PhoneNumber();
-        return this;
-      }
-      
-      public Builder clone() {
-        return create().mergeFrom(result);
-      }
-      
-      public com.google.i18n.phonenumbers.Phonenumber.PhoneNumber getDefaultInstanceForType() {
-        return com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.getDefaultInstance();
-      }
-      
-      public boolean isInitialized() {
-        return result.isInitialized();
-      }
-      public com.google.i18n.phonenumbers.Phonenumber.PhoneNumber build() {
-        if (result != null && !isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return buildPartial();
-      }
-      
-      private com.google.i18n.phonenumbers.Phonenumber.PhoneNumber buildParsed()
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        if (!isInitialized()) {
-          throw newUninitializedMessageException(
-            result).asInvalidProtocolBufferException();
-        }
-        return buildPartial();
-      }
-      
-      public com.google.i18n.phonenumbers.Phonenumber.PhoneNumber buildPartial() {
-        if (result == null) {
-          throw new IllegalStateException(
-            "build() has already been called on this Builder.");
-        }
-        com.google.i18n.phonenumbers.Phonenumber.PhoneNumber returnMe = result;
-        result = null;
-        return returnMe;
-      }
-      
-      public Builder mergeFrom(com.google.i18n.phonenumbers.Phonenumber.PhoneNumber other) {
-        if (other == com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.getDefaultInstance()) return this;
-        if (other.hasCountryCode()) {
-          setCountryCode(other.getCountryCode());
-        }
-        if (other.hasNationalNumber()) {
-          setNationalNumber(other.getNationalNumber());
-        }
-        if (other.hasExtension()) {
-          setExtension(other.getExtension());
-        }
-        if (other.hasItalianLeadingZero()) {
-          setItalianLeadingZero(other.getItalianLeadingZero());
-        }
-        if (other.hasRawInput()) {
-          setRawInput(other.getRawInput());
-        }
-        if (other.hasCountryCodeSource()) {
-          setCountryCodeSource(other.getCountryCodeSource());
-        }
-        return this;
-      }
-      
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        while (true) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              return this;
-            default: {
-              if (!parseUnknownField(input, extensionRegistry, tag)) {
-                return this;
-              }
-              break;
-            }
-            case 8: {
-              setCountryCode(input.readInt32());
-              break;
-            }
-            case 16: {
-              setNationalNumber(input.readUInt64());
-              break;
-            }
-            case 26: {
-              setExtension(input.readString());
-              break;
-            }
-            case 32: {
-              setItalianLeadingZero(input.readBool());
-              break;
-            }
-            case 42: {
-              setRawInput(input.readString());
-              break;
-            }
-            case 48: {
-              int rawValue = input.readEnum();
-              com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource value = com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource.valueOf(rawValue);
-              if (value != null) {
-                setCountryCodeSource(value);
-              }
-              break;
-            }
-          }
-        }
-      }
-      
-      
-      // required int32 country_code = 1;
-      public boolean hasCountryCode() {
-        return result.hasCountryCode();
-      }
-      public int getCountryCode() {
-        return result.getCountryCode();
-      }
-      public Builder setCountryCode(int value) {
-        result.hasCountryCode = true;
-        result.countryCode_ = value;
-        return this;
-      }
-      public Builder clearCountryCode() {
-        result.hasCountryCode = false;
-        result.countryCode_ = 0;
-        return this;
-      }
-      
-      // required uint64 national_number = 2;
-      public boolean hasNationalNumber() {
-        return result.hasNationalNumber();
-      }
-      public long getNationalNumber() {
-        return result.getNationalNumber();
-      }
-      public Builder setNationalNumber(long value) {
-        result.hasNationalNumber = true;
-        result.nationalNumber_ = value;
-        return this;
-      }
-      public Builder clearNationalNumber() {
-        result.hasNationalNumber = false;
-        result.nationalNumber_ = 0L;
-        return this;
-      }
-      
-      // optional string extension = 3;
-      public boolean hasExtension() {
-        return result.hasExtension();
-      }
-      public java.lang.String getExtension() {
-        return result.getExtension();
-      }
-      public Builder setExtension(java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  result.hasExtension = true;
-        result.extension_ = value;
-        return this;
-      }
-      public Builder clearExtension() {
-        result.hasExtension = false;
-        result.extension_ = getDefaultInstance().getExtension();
-        return this;
-      }
-      
-      // optional bool italian_leading_zero = 4;
-      public boolean hasItalianLeadingZero() {
-        return result.hasItalianLeadingZero();
-      }
-      public boolean getItalianLeadingZero() {
-        return result.getItalianLeadingZero();
-      }
-      public Builder setItalianLeadingZero(boolean value) {
-        result.hasItalianLeadingZero = true;
-        result.italianLeadingZero_ = value;
-        return this;
-      }
-      public Builder clearItalianLeadingZero() {
-        result.hasItalianLeadingZero = false;
-        result.italianLeadingZero_ = false;
-        return this;
-      }
-      
-      // optional string raw_input = 5;
-      public boolean hasRawInput() {
-        return result.hasRawInput();
-      }
-      public java.lang.String getRawInput() {
-        return result.getRawInput();
-      }
-      public Builder setRawInput(java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  result.hasRawInput = true;
-        result.rawInput_ = value;
-        return this;
-      }
-      public Builder clearRawInput() {
-        result.hasRawInput = false;
-        result.rawInput_ = getDefaultInstance().getRawInput();
-        return this;
-      }
 
-      // optional .i18n.phonenumbers.PhoneNumber.CountryCodeSource country_code_source = 6;
-      public boolean hasCountryCodeSource() {
-        return result.hasCountryCodeSource();
+    public PhoneNumber mergeFrom(PhoneNumber other) {
+      if (other.hasCountryCode()) {
+        setCountryCode(other.getCountryCode());
       }
-      public com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource getCountryCodeSource() {
-        return result.getCountryCodeSource();
+      if (other.hasNationalNumber()) {
+        setNationalNumber(other.getNationalNumber());
       }
-      public Builder setCountryCodeSource(com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        result.hasCountryCodeSource = true;
-        result.countryCodeSource_ = value;
-        return this;
+      if (other.hasExtension()) {
+        setExtension(other.getExtension());
       }
-      public Builder clearCountryCodeSource() {
-        result.hasCountryCodeSource = false;
-        result.countryCodeSource_ = com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN;
-        return this;
+      if (other.hasItalianLeadingZero()) {
+        setItalianLeadingZero(other.getItalianLeadingZero());
       }
+      if (other.hasRawInput()) {
+        setRawInput(other.getRawInput());
+      }
+      if (other.hasCountryCodeSource()) {
+        setCountryCodeSource(other.getCountryCodeSource());
+      }
+      return this;
+    }
 
-      // @@protoc_insertion_point(builder_scope:i18n.phonenumbers.PhoneNumber)
+    public boolean exactlySameAs(PhoneNumber other) {
+      return (countryCode_ == other.countryCode_ && nationalNumber_ == other.nationalNumber_ &&
+          extension_.equals(other.extension_) && italianLeadingZero_ == other.italianLeadingZero_ &&
+          rawInput_.equals(other.rawInput_) && countryCodeSource_ == other.countryCodeSource_);
     }
-    
-    static {
-      defaultInstance = new PhoneNumber(true);
-      com.google.i18n.phonenumbers.Phonenumber.internalForceInit();
-      defaultInstance.initFields();
-    }
-    
-    // @@protoc_insertion_point(class_scope:i18n.phonenumbers.PhoneNumber)
   }
-  
-  
-  static {
-  }
-  
-  public static void internalForceInit() {}
-  
-  // @@protoc_insertion_point(outer_class_scope)
 }
diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
index e1d412c..d96d9f0 100644
--- a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -60,7 +60,17 @@
     super.tearDown();
   }
 
-  private Boolean assertEquals(MessageLite message1, MessageLite message2) {
+  private boolean assertEquals(PhoneNumber number1, PhoneNumber number2) {
+    if (number1 == null && number2 == null) {
+      return true;
+    }
+    if (number1 == null || number2 == null) {
+      return false;
+    }
+    return number1.exactlySameAs(number2);
+  }
+
+  private boolean assertEquals(MessageLite message1, MessageLite message2) {
     return PhoneNumberUtil.areSameMessages(message1, message2);
   }
 
@@ -121,67 +131,57 @@
   }
 
   public void testGetLengthOfGeographicalAreaCode() {
+    PhoneNumber number = new PhoneNumber();
     // Google MTV, which has area code "650".
-    PhoneNumber usNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
-    assertEquals(3, phoneUtil.getLengthOfGeographicalAreaCode(usNumber1));
+    number.setCountryCode(1).setNationalNumber(6502530000L);
+    assertEquals(3, phoneUtil.getLengthOfGeographicalAreaCode(number));
 
     // A North America toll-free number, which has no area code.
-    PhoneNumber usNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(8002530000L).build();
-    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(usNumber2));
+    number.setCountryCode(1).setNationalNumber(8002530000L);
+    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number));
 
     // An invalid US number (1 digit shorter), which has no area code.
-    PhoneNumber usNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(650253000L).build();
-    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(usNumber3));
+    number.setCountryCode(1).setNationalNumber(650253000L);
+    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number));
 
     // Google London, which has area code "20".
-    PhoneNumber ukNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(2070313000L).build();
-    assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(ukNumber1));
+    number.setCountryCode(44).setNationalNumber(2070313000L);
+    assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(number));
 
     // A UK mobile phone, which has no area code.
-    PhoneNumber ukNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(7123456789L).build();
-    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(ukNumber2));
+    number.setCountryCode(44).setNationalNumber(7123456789L);
+    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number));
 
     // Google Buenos Aires, which has area code "11".
-    PhoneNumber arNumber =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(1155303000L).build();
-    assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(arNumber));
+    number.setCountryCode(54).setNationalNumber(1155303000L);
+    assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(number));
 
     // Google Sydney, which has area code "2".
-    PhoneNumber auNumber =
-        PhoneNumber.newBuilder().setCountryCode(61).setNationalNumber(293744000L).build();
-    assertEquals(1, phoneUtil.getLengthOfGeographicalAreaCode(auNumber));
+    number.setCountryCode(61).setNationalNumber(293744000L);
+    assertEquals(1, phoneUtil.getLengthOfGeographicalAreaCode(number));
 
     // Google Singapore. Singapore has no area code and no national prefix.
-    PhoneNumber sgNumber =
-        PhoneNumber.newBuilder().setCountryCode(65).setNationalNumber(65218000L).build();
-    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(sgNumber));
+    number.setCountryCode(65).setNationalNumber(65218000L);
+    assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number));
   }
 
   public void testGetNationalSignificantNumber() {
-    PhoneNumber usNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
-    assertEquals("6502530000", PhoneNumberUtil.getNationalSignificantNumber(usNumber));
+    PhoneNumber number = new PhoneNumber();
+    number.setCountryCode(1).setNationalNumber(6502530000L);
+    assertEquals("6502530000", PhoneNumberUtil.getNationalSignificantNumber(number));
 
     // An Italian mobile number.
-    PhoneNumber itNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(312345678L).build();
-    assertEquals("312345678", PhoneNumberUtil.getNationalSignificantNumber(itNumber1));
+    number.setCountryCode(39).setNationalNumber(312345678L);
+    assertEquals("312345678", PhoneNumberUtil.getNationalSignificantNumber(number));
 
     // An Italian fixed line number.
-    PhoneNumber itNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(236618300L)
-            .setItalianLeadingZero(true).build();
-    assertEquals("0236618300", PhoneNumberUtil.getNationalSignificantNumber(itNumber2));
+    number.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
+    assertEquals("0236618300", PhoneNumberUtil.getNationalSignificantNumber(number));
   }
 
   public void testGetExampleNumber() throws IOException {
-    PhoneNumber deNumber =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(30123456).build();
+    PhoneNumber deNumber = new PhoneNumber();
+    deNumber.setCountryCode(49).setNationalNumber(30123456);
     assertEquals(deNumber, phoneUtil.getExampleNumber("DE"));
     assertEquals(deNumber, phoneUtil.getExampleNumber("de"));
 
@@ -232,213 +232,211 @@
   }
 
   public void testFormatUSNumber() {
-    PhoneNumber usNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
-    assertEquals("650 253 0000", phoneUtil.format(usNumber1,
+    PhoneNumber usNumber = new PhoneNumber();
+    usNumber.setCountryCode(1).setNationalNumber(6502530000L);
+    assertEquals("650 253 0000", phoneUtil.format(usNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+1 650 253 0000",
-                 phoneUtil.format(usNumber1,
+                 phoneUtil.format(usNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber usNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(8002530000L).build();
-    assertEquals("800 253 0000", phoneUtil.format(usNumber2,
+    usNumber.clear();
+    usNumber.setCountryCode(1).setNationalNumber(8002530000L);
+    assertEquals("800 253 0000", phoneUtil.format(usNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+1 800 253 0000",
-                 phoneUtil.format(usNumber2,
+                 phoneUtil.format(usNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber usNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(9002530000L).build();
-    assertEquals("900 253 0000", phoneUtil.format(usNumber3,
+    usNumber.clear();
+    usNumber.setCountryCode(1).setNationalNumber(9002530000L);
+    assertEquals("900 253 0000", phoneUtil.format(usNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+1 900 253 0000",
-                 phoneUtil.format(usNumber3,
+                 phoneUtil.format(usNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
   }
 
   public void testFormatBSNumber() {
-    PhoneNumber bsNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(2421234567L).build();
-    assertEquals("242 123 4567", phoneUtil.format(bsNumber1,
+    PhoneNumber bsNumber = new PhoneNumber();
+    bsNumber.setCountryCode(1).setNationalNumber(2421234567L);
+    assertEquals("242 123 4567", phoneUtil.format(bsNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+1 242 123 4567",
-                 phoneUtil.format(bsNumber1,
+                 phoneUtil.format(bsNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber bsNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(8002530000L).build();
-    assertEquals("800 253 0000", phoneUtil.format(bsNumber2,
+    bsNumber.clear();
+    bsNumber.setCountryCode(1).setNationalNumber(8002530000L);
+    assertEquals("800 253 0000", phoneUtil.format(bsNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+1 800 253 0000",
-                 phoneUtil.format(bsNumber2,
+                 phoneUtil.format(bsNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber bsNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(9002530000L).build();
-    assertEquals("900 253 0000", phoneUtil.format(bsNumber3,
+    bsNumber.clear();
+    bsNumber.setCountryCode(1).setNationalNumber(9002530000L);
+    assertEquals("900 253 0000", phoneUtil.format(bsNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+1 900 253 0000",
-                 phoneUtil.format(bsNumber3,
+                 phoneUtil.format(bsNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
   }
 
   public void testFormatGBNumber() {
-    PhoneNumber gbNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(2087389353L).build();
-    assertEquals("(020) 8738 9353", phoneUtil.format(gbNumber1,
+    PhoneNumber gbNumber = new PhoneNumber();
+    gbNumber.setCountryCode(44).setNationalNumber(2087389353L);
+    assertEquals("(020) 8738 9353", phoneUtil.format(gbNumber,
                                                      PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+44 20 8738 9353",
-                 phoneUtil.format(gbNumber1,
+                 phoneUtil.format(gbNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber gbNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(7912345678L).build();
-    assertEquals("(07912) 345 678", phoneUtil.format(gbNumber2,
+    gbNumber.clear();
+    gbNumber.setCountryCode(44).setNationalNumber(7912345678L);
+    assertEquals("(07912) 345 678", phoneUtil.format(gbNumber,
                                                      PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+44 7912 345 678",
-                 phoneUtil.format(gbNumber2,
+                 phoneUtil.format(gbNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
   }
 
   public void testFormatDENumber() {
-    PhoneNumber deNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(301234L).build();
-    assertEquals("030 1234", phoneUtil.format(deNumber1,
+    PhoneNumber deNumber = new PhoneNumber();
+    deNumber.setCountryCode(49).setNationalNumber(301234L);
+    assertEquals("030 1234", phoneUtil.format(deNumber,
                                               PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+49 30 1234",
-                 phoneUtil.format(deNumber1,
+                 phoneUtil.format(deNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber deNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(291123L).build();
-    assertEquals("0291 123", phoneUtil.format(deNumber2,
+    deNumber.clear();
+    deNumber.setCountryCode(49).setNationalNumber(291123L);
+    assertEquals("0291 123", phoneUtil.format(deNumber,
                                               PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+49 291 123",
-                 phoneUtil.format(deNumber2,
+                 phoneUtil.format(deNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber deNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(29112345678L).build();
-    assertEquals("0291 12345678", phoneUtil.format(deNumber3,
+    deNumber.clear();
+    deNumber.setCountryCode(49).setNationalNumber(29112345678L);
+    assertEquals("0291 12345678", phoneUtil.format(deNumber,
                                                    PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+49 291 12345678",
-                 phoneUtil.format(deNumber3,
+                 phoneUtil.format(deNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
 
-    PhoneNumber deNumber4 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(9123123L).build();
-    assertEquals("09123 123", phoneUtil.format(deNumber4,
+    deNumber.clear();
+    deNumber.setCountryCode(49).setNationalNumber(9123123L);
+    assertEquals("09123 123", phoneUtil.format(deNumber,
                                                PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+49 9123 123",
-                 phoneUtil.format(deNumber4,
+                 phoneUtil.format(deNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
-    PhoneNumber deNumber5 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(1234L).build();
+    deNumber.clear();
+    deNumber.setCountryCode(49).setNationalNumber(1234L);
     // Note this number is correctly formatted without national prefix. Most of the numbers that
     // are treated as invalid numbers by the library are short numbers, and they are usually not
     // dialed with national prefix.
-    assertEquals("1234", phoneUtil.format(deNumber5,
+    assertEquals("1234", phoneUtil.format(deNumber,
                                           PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+49 1234",
-                 phoneUtil.format(deNumber5,
+                 phoneUtil.format(deNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
   }
 
   public void testFormatITNumber() {
-    PhoneNumber itNumber1 =
-        PhoneNumber.newBuilder()
-            .setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true).build();
-    assertEquals("02 3661 8300", phoneUtil.format(itNumber1,
+    PhoneNumber itNumber = new PhoneNumber();
+    itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
+    assertEquals("02 3661 8300", phoneUtil.format(itNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+39 02 3661 8300",
-                 phoneUtil.format(itNumber1,
+                 phoneUtil.format(itNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
     assertEquals("+390236618300",
-                 phoneUtil.format(itNumber1,
+                 phoneUtil.format(itNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.E164));
 
-    PhoneNumber itNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(345678901L).build();
-    assertEquals("345 678 901", phoneUtil.format(itNumber2,
+    itNumber.clear();
+    itNumber.setCountryCode(39).setNationalNumber(345678901L);
+    assertEquals("345 678 901", phoneUtil.format(itNumber,
                                                  PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+39 345 678 901",
-                 phoneUtil.format(itNumber2,
+                 phoneUtil.format(itNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
     assertEquals("+39345678901",
-                 phoneUtil.format(itNumber2,
-                                  PhoneNumberUtil.PhoneNumberFormat.E164));
-  }
+                 phoneUtil.format(itNumber,
+                                  PhoneNumberUtil.PhoneNumberFormat.E164));  }
 
   public void testFormatAUNumber() {
-    PhoneNumber auNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(61).setNationalNumber(236618300L).build();
-    assertEquals("02 3661 8300", phoneUtil.format(auNumber1,
+    PhoneNumber auNumber = new PhoneNumber();
+    auNumber.setCountryCode(61).setNationalNumber(236618300L);
+    assertEquals("02 3661 8300", phoneUtil.format(auNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+61 2 3661 8300",
-                 phoneUtil.format(auNumber1,
+                 phoneUtil.format(auNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
     assertEquals("+61236618300",
-                 phoneUtil.format(auNumber1,
+                 phoneUtil.format(auNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.E164));
 
-    PhoneNumber auNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(61).setNationalNumber(1800123456L).build();
-    assertEquals("1800 123 456", phoneUtil.format(auNumber2,
+    auNumber.clear();
+    auNumber.setCountryCode(61).setNationalNumber(1800123456L);
+    assertEquals("1800 123 456", phoneUtil.format(auNumber,
                                                  PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+61 1800 123 456",
-                 phoneUtil.format(auNumber2,
+                 phoneUtil.format(auNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
     assertEquals("+611800123456",
-                 phoneUtil.format(auNumber2,
+                 phoneUtil.format(auNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.E164));
   }
 
   public void testFormatARNumber() {
-    PhoneNumber arNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(1187654321L).build();
-    assertEquals("011 8765-4321", phoneUtil.format(arNumber1,
+    PhoneNumber arNumber = new PhoneNumber();
+    arNumber.setCountryCode(54).setNationalNumber(1187654321L);
+    assertEquals("011 8765-4321", phoneUtil.format(arNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+54 11 8765-4321",
-                 phoneUtil.format(arNumber1,
+                 phoneUtil.format(arNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
     assertEquals("+541187654321",
-                 phoneUtil.format(arNumber1,
+                 phoneUtil.format(arNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.E164));
 
-    PhoneNumber arNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(91187654321L).build();
-    assertEquals("011 15 8765-4321", phoneUtil.format(arNumber2,
+    arNumber.clear();
+    arNumber.setCountryCode(54).setNationalNumber(91187654321L);
+    assertEquals("011 15 8765-4321", phoneUtil.format(arNumber,
                                                       PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     assertEquals("+54 9 11 8765 4321",
-                 phoneUtil.format(arNumber2,
+                 phoneUtil.format(arNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
     assertEquals("+5491187654321",
-                 phoneUtil.format(arNumber2,
+                 phoneUtil.format(arNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.E164));
   }
 
   public void testFormatOutOfCountryCallingNumber() {
-    PhoneNumber usNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(9002530000L).build();
+    PhoneNumber usNumber = new PhoneNumber();
+    usNumber.setCountryCode(1).setNationalNumber(9002530000L);
     assertEquals("00 1 900 253 0000",
-                 phoneUtil.formatOutOfCountryCallingNumber(usNumber1, "DE"));
+                 phoneUtil.formatOutOfCountryCallingNumber(usNumber, "DE"));
 
-    PhoneNumber usNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
+    usNumber.clear();
+    usNumber.setCountryCode(1).setNationalNumber(6502530000L);
     assertEquals("1 650 253 0000",
-                 phoneUtil.formatOutOfCountryCallingNumber(usNumber2, "BS"));
+                 phoneUtil.formatOutOfCountryCallingNumber(usNumber, "BS"));
 
     assertEquals("0~0 1 650 253 0000",
-                 phoneUtil.formatOutOfCountryCallingNumber(usNumber2, "PL"));
+                 phoneUtil.formatOutOfCountryCallingNumber(usNumber, "PL"));
 
-    PhoneNumber gbNumber =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(7912345678L).build();
+    PhoneNumber gbNumber = new PhoneNumber();
+    gbNumber.setCountryCode(44).setNationalNumber(7912345678L);
     assertEquals("011 44 7912 345 678",
                  phoneUtil.formatOutOfCountryCallingNumber(gbNumber, "US"));
 
-    PhoneNumber deNumber =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(1234L).build();
+    PhoneNumber deNumber = new PhoneNumber();
+    deNumber.setCountryCode(49).setNationalNumber(1234L);
     assertEquals("00 49 1234",
                  phoneUtil.formatOutOfCountryCallingNumber(deNumber, "GB"));
     // Note this number is correctly formatted without national prefix. Most of the numbers that
@@ -447,9 +445,8 @@
     assertEquals("1234",
                  phoneUtil.formatOutOfCountryCallingNumber(deNumber, "DE"));
 
-    PhoneNumber itNumber =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(236618300L)
-            .setItalianLeadingZero(true).build();
+    PhoneNumber itNumber = new PhoneNumber();
+    itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
     assertEquals("011 39 02 3661 8300",
                  phoneUtil.formatOutOfCountryCallingNumber(itNumber, "US"));
     assertEquals("02 3661 8300",
@@ -457,41 +454,39 @@
     assertEquals("+39 02 3661 8300",
                  phoneUtil.formatOutOfCountryCallingNumber(itNumber, "SG"));
 
-    PhoneNumber sgNumber =
-        PhoneNumber.newBuilder().setCountryCode(65).setNationalNumber(94777892L).build();
+    PhoneNumber sgNumber = new PhoneNumber();
+    sgNumber.setCountryCode(65).setNationalNumber(94777892L);
     assertEquals("9477 7892",
                  phoneUtil.formatOutOfCountryCallingNumber(sgNumber, "SG"));
 
-    PhoneNumber arNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(91187654321L).build();
+    PhoneNumber arNumber = new PhoneNumber();
+    arNumber.setCountryCode(54).setNationalNumber(91187654321L);
     assertEquals("011 54 9 11 8765 4321",
-                 phoneUtil.formatOutOfCountryCallingNumber(arNumber1, "US"));
+                 phoneUtil.formatOutOfCountryCallingNumber(arNumber, "US"));
 
-    PhoneNumber arNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(91187654321L)
-            .setExtension("1234").build();
+    arNumber.setExtension("1234");
     assertEquals("011 54 9 11 8765 4321 ext. 1234",
-                 phoneUtil.formatOutOfCountryCallingNumber(arNumber2, "US"));
+                 phoneUtil.formatOutOfCountryCallingNumber(arNumber, "US"));
     assertEquals("0011 54 9 11 8765 4321 ext. 1234",
-                 phoneUtil.formatOutOfCountryCallingNumber(arNumber2, "AU"));
+                 phoneUtil.formatOutOfCountryCallingNumber(arNumber, "AU"));
     assertEquals("011 15 8765-4321 ext. 1234",
-                 phoneUtil.formatOutOfCountryCallingNumber(arNumber2, "AR"));
+                 phoneUtil.formatOutOfCountryCallingNumber(arNumber, "AR"));
     assertEquals("011 15 8765-4321 ext. 1234",
-                 phoneUtil.formatOutOfCountryCallingNumber(arNumber2, "ar"));
+                 phoneUtil.formatOutOfCountryCallingNumber(arNumber, "ar"));
   }
 
   public void testFormatOutOfCountryWithPreferredIntlPrefix() {
-    PhoneNumber.Builder itNumber = PhoneNumber.newBuilder();
+    PhoneNumber itNumber = new PhoneNumber();
     itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
     // This should use 0011, since that is the preferred international prefix (both 0011 and 0012
     // are accepted as possible international prefixes in our test metadta.)
     assertEquals("0011 39 02 3661 8300",
-                 phoneUtil.formatOutOfCountryCallingNumber(itNumber.build(), "AU"));
+                 phoneUtil.formatOutOfCountryCallingNumber(itNumber, "AU"));
   }
 
   public void testFormatByPattern() {
-    PhoneNumber usNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
+    PhoneNumber usNumber = new PhoneNumber();
+    usNumber.setCountryCode(1).setNationalNumber(6502530000L);
     NumberFormat newNumFormat1 =
         NumberFormat.newBuilder().setPattern("(\\d{3})(\\d{3})(\\d{4})")
             .setFormat("($1) $2-$3").build();
@@ -507,9 +502,9 @@
                                            PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL,
                                            newNumberFormats));
 
-    PhoneNumber itNumber =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(236618300L)
-            .setItalianLeadingZero(true).build();
+    PhoneNumber itNumber = new PhoneNumber();
+    itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
+
     NumberFormat newNumFormat2 =
         NumberFormat.newBuilder().setPattern("(\\d{2})(\\d{5})(\\d{3})")
             .setFormat("$1-$2 $3").build();
@@ -524,8 +519,8 @@
                                            PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL,
                                            newNumberFormats));
 
-    PhoneNumber gbNumber =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(2012345678L).build();
+   PhoneNumber gbNumber = new PhoneNumber();
+   gbNumber.setCountryCode(44).setNationalNumber(2012345678L);
 
     NumberFormat newNumFormat3 =
         NumberFormat.newBuilder().setNationalPrefixFormattingRule("$NP$FG")
@@ -561,28 +556,28 @@
   }
 
   public void testFormatE164Number() {
-    PhoneNumber.Builder usNumber = PhoneNumber.newBuilder();
+    PhoneNumber usNumber = new PhoneNumber();
     usNumber.setCountryCode(1).setNationalNumber(6502530000L);
-    assertEquals("+16502530000", phoneUtil.format(usNumber.build(),
+    assertEquals("+16502530000", phoneUtil.format(usNumber,
                                                   PhoneNumberUtil.PhoneNumberFormat.E164));
-    PhoneNumber.Builder deNumber = PhoneNumber.newBuilder();
+    PhoneNumber deNumber = new PhoneNumber();
     deNumber.setCountryCode(49).setNationalNumber(301234L);
-    assertEquals("+49301234", phoneUtil.format(deNumber.build(),
+    assertEquals("+49301234", phoneUtil.format(deNumber,
                                                PhoneNumberUtil.PhoneNumberFormat.E164));
   }
 
   public void testFormatNumberWithExtension() {
-    PhoneNumber.Builder nzNumber = PhoneNumber.newBuilder();
+    PhoneNumber nzNumber = new PhoneNumber();
     nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("1234");
     // Uses default extension prefix:
     assertEquals("03-331 6005 ext. 1234",
-                 phoneUtil.format(nzNumber.build(),
+                 phoneUtil.format(nzNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
     // Extension prefix overridden in the territory information for the US:
-    PhoneNumber.Builder usNumber = PhoneNumber.newBuilder();
+    PhoneNumber usNumber = new PhoneNumber();
     usNumber.setCountryCode(1).setNationalNumber(6502530000L).setExtension("4567");
     assertEquals("650 253 0000 extn. 4567",
-                 phoneUtil.format(usNumber.build(),
+                 phoneUtil.format(usNumber,
                                   PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
   }
 
@@ -604,197 +599,200 @@
   }
 
   public void testIsPremiumRate() {
-    PhoneNumber premiumRateNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(9004433030L).build();
-    assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
-                 phoneUtil.getNumberType(premiumRateNumber1));
+    PhoneNumber premiumRateNumber = new PhoneNumber();
 
-    PhoneNumber premiumRateNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(892123L).build();
+    premiumRateNumber.setCountryCode(1).setNationalNumber(9004433030L);
+    assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
+                 phoneUtil.getNumberType(premiumRateNumber));
+
+    premiumRateNumber.clear();
+    premiumRateNumber.setCountryCode(39).setNationalNumber(892123L);
         assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
-                 phoneUtil.getNumberType(premiumRateNumber2));
+                 phoneUtil.getNumberType(premiumRateNumber));
 
-    PhoneNumber premiumRateNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(9187654321L).build();
+    premiumRateNumber.clear();
+    premiumRateNumber.setCountryCode(44).setNationalNumber(9187654321L);
         assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
-                 phoneUtil.getNumberType(premiumRateNumber3));
+                 phoneUtil.getNumberType(premiumRateNumber));
 
-    PhoneNumber premiumRateNumber4 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(9001654321L).build();
+    premiumRateNumber.clear();
+    premiumRateNumber.setCountryCode(49).setNationalNumber(9001654321L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
-                 phoneUtil.getNumberType(premiumRateNumber4));
+                 phoneUtil.getNumberType(premiumRateNumber));
 
-    PhoneNumber premiumRateNumber5 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(90091234567L).build();
+    premiumRateNumber.clear();
+    premiumRateNumber.setCountryCode(49).setNationalNumber(90091234567L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
-                 phoneUtil.getNumberType(premiumRateNumber5));
+                 phoneUtil.getNumberType(premiumRateNumber));
   }
 
   public void testIsTollFree() {
-    PhoneNumber tollFreeNumber1
-        = PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(8881234567L).build();
-    assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE,
-                 phoneUtil.getNumberType(tollFreeNumber1));
+    PhoneNumber tollFreeNumber = new PhoneNumber();
 
-    PhoneNumber tollFreeNumber2
-        = PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(803123L).build();
+    tollFreeNumber.setCountryCode(1).setNationalNumber(8881234567L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE,
-                 phoneUtil.getNumberType(tollFreeNumber2));
+                 phoneUtil.getNumberType(tollFreeNumber));
 
-    PhoneNumber tollFreeNumber3
-        = PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(8012345678L).build();
+    tollFreeNumber.clear();
+    tollFreeNumber.setCountryCode(39).setNationalNumber(803123L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE,
-                 phoneUtil.getNumberType(tollFreeNumber3));
+                 phoneUtil.getNumberType(tollFreeNumber));
 
-    PhoneNumber tollFreeNumber4
-        = PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(8001234567L).build();
+    tollFreeNumber.clear();
+    tollFreeNumber.setCountryCode(44).setNationalNumber(8012345678L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE,
-                 phoneUtil.getNumberType(tollFreeNumber4));
+                 phoneUtil.getNumberType(tollFreeNumber));
+
+    tollFreeNumber.clear();
+    tollFreeNumber.setCountryCode(49).setNationalNumber(8001234567L);
+    assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE,
+                 phoneUtil.getNumberType(tollFreeNumber));
   }
 
   public void testIsMobile() {
-    PhoneNumber mobileNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(2423570000L).build();
-    assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE,
-                 phoneUtil.getNumberType(mobileNumber1));
+    PhoneNumber mobileNumber = new PhoneNumber();
 
-    PhoneNumber mobileNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(312345678L).build();
+    // A Bahama mobile number
+    mobileNumber.setCountryCode(1).setNationalNumber(2423570000L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE,
-                 phoneUtil.getNumberType(mobileNumber2));
+                 phoneUtil.getNumberType(mobileNumber));
 
-    PhoneNumber mobileNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(7912345678L).build();
+    mobileNumber.clear();
+    mobileNumber.setCountryCode(39).setNationalNumber(312345678L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE,
-                 phoneUtil.getNumberType(mobileNumber3));
+                 phoneUtil.getNumberType(mobileNumber));
 
-    PhoneNumber mobileNumber4 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(15123456789L).build();
+    mobileNumber.clear();
+    mobileNumber.setCountryCode(44).setNationalNumber(7912345678L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE,
-                 phoneUtil.getNumberType(mobileNumber4));
+                 phoneUtil.getNumberType(mobileNumber));
 
-    PhoneNumber mobileNumber5 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(91187654321L).build();
+    mobileNumber.clear();
+    mobileNumber.setCountryCode(49).setNationalNumber(15123456789L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE,
-                 phoneUtil.getNumberType(mobileNumber5));
+                 phoneUtil.getNumberType(mobileNumber));
+
+    mobileNumber.clear();
+    mobileNumber.setCountryCode(54).setNationalNumber(91187654321L);
+    assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE,
+                 phoneUtil.getNumberType(mobileNumber));
   }
 
   public void testIsFixedLine() {
+    PhoneNumber fixedLineNumber = new PhoneNumber();
+
     // A Bahama fixed-line number
-    PhoneNumber fixedLineNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(2423651234L).build();
+    fixedLineNumber.setCountryCode(1).setNationalNumber(2423651234L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE,
-                 phoneUtil.getNumberType(fixedLineNumber1));
+                 phoneUtil.getNumberType(fixedLineNumber));
 
     // An Italian fixed-line number
-    PhoneNumber fixedLineNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(236618300L)
-            .setItalianLeadingZero(true).build();
+    fixedLineNumber.clear();
+    fixedLineNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
     assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE,
-                 phoneUtil.getNumberType(fixedLineNumber2));
+                 phoneUtil.getNumberType(fixedLineNumber));
 
-    PhoneNumber fixedLineNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(2012345678L).build();
+    fixedLineNumber.clear();
+    fixedLineNumber.setCountryCode(44).setNationalNumber(2012345678L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE,
-                 phoneUtil.getNumberType(fixedLineNumber3));
+                 phoneUtil.getNumberType(fixedLineNumber));
 
-    PhoneNumber fixedLineNumber4 =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(301234L).build();
+    fixedLineNumber.clear();
+    fixedLineNumber.setCountryCode(49).setNationalNumber(301234L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE,
-                 phoneUtil.getNumberType(fixedLineNumber4));
+                 phoneUtil.getNumberType(fixedLineNumber));
   }
 
   public void testIsFixedLineAndMobile() {
-    PhoneNumber fixedLineAndMobileNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502531111L).build();
+    PhoneNumber fixedLineAndMobileNumber = new PhoneNumber();
+    fixedLineAndMobileNumber.setCountryCode(1).setNationalNumber(6502531111L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE,
-                 phoneUtil.getNumberType(fixedLineAndMobileNumber1));
+                 phoneUtil.getNumberType(fixedLineAndMobileNumber));
 
-    PhoneNumber fixedLineAndMobileNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(1987654321L).build();
+    fixedLineAndMobileNumber.clear();
+    fixedLineAndMobileNumber.setCountryCode(54).setNationalNumber(1987654321L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE,
-                 phoneUtil.getNumberType(fixedLineAndMobileNumber2));
+                 phoneUtil.getNumberType(fixedLineAndMobileNumber));
   }
 
   public void testIsSharedCost() {
-    PhoneNumber.Builder gbNumber = PhoneNumber.newBuilder();
+    PhoneNumber gbNumber = new PhoneNumber();
     gbNumber.setCountryCode(44).setNationalNumber(8431231234L);
-    assertEquals(PhoneNumberUtil.PhoneNumberType.SHARED_COST,
-        phoneUtil.getNumberType(gbNumber.build()));
+    assertEquals(PhoneNumberUtil.PhoneNumberType.SHARED_COST, phoneUtil.getNumberType(gbNumber));
   }
 
   public void testIsVoip() {
-    PhoneNumber.Builder gbNumber = PhoneNumber.newBuilder();
+    PhoneNumber gbNumber = new PhoneNumber();
     gbNumber.setCountryCode(44).setNationalNumber(5631231234L);
-    assertEquals(PhoneNumberUtil.PhoneNumberType.VOIP, phoneUtil.getNumberType(gbNumber.build()));
+    assertEquals(PhoneNumberUtil.PhoneNumberType.VOIP, phoneUtil.getNumberType(gbNumber));
   }
 
   public void testIsPersonalNumber() {
-    PhoneNumber.Builder gbNumber = PhoneNumber.newBuilder();
+    PhoneNumber gbNumber = new PhoneNumber();
     gbNumber.setCountryCode(44).setNationalNumber(7031231234L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.PERSONAL_NUMBER,
-                 phoneUtil.getNumberType(gbNumber.build()));
+                 phoneUtil.getNumberType(gbNumber));
   }
 
   public void testIsUnknown() {
-    PhoneNumber.Builder unknownNumber = PhoneNumber.newBuilder();
+    PhoneNumber unknownNumber = new PhoneNumber();
     unknownNumber.setCountryCode(1).setNationalNumber(65025311111L);
     assertEquals(PhoneNumberUtil.PhoneNumberType.UNKNOWN,
-                 phoneUtil.getNumberType(unknownNumber.build()));
+                 phoneUtil.getNumberType(unknownNumber));
   }
 
   public void testIsValidNumber() {
-    PhoneNumber.Builder usNumber = PhoneNumber.newBuilder();
+    PhoneNumber usNumber = new PhoneNumber();
     usNumber.setCountryCode(1).setNationalNumber(6502530000L);
-    assertTrue(phoneUtil.isValidNumber(usNumber.build()));
+    assertTrue(phoneUtil.isValidNumber(usNumber));
 
-    PhoneNumber.Builder itNumber = PhoneNumber.newBuilder();
+    PhoneNumber itNumber = new PhoneNumber();
     itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
-    assertTrue(phoneUtil.isValidNumber(itNumber.build()));
+    assertTrue(phoneUtil.isValidNumber(itNumber));
 
-    PhoneNumber.Builder gbNumber = PhoneNumber.newBuilder();
+    PhoneNumber gbNumber = new PhoneNumber();
     gbNumber.setCountryCode(44).setNationalNumber(7912345678L);
-    assertTrue(phoneUtil.isValidNumber(gbNumber.build()));
+    assertTrue(phoneUtil.isValidNumber(gbNumber));
 
-    PhoneNumber.Builder nzNumber = PhoneNumber.newBuilder();
+    PhoneNumber nzNumber = new PhoneNumber();
     nzNumber.setCountryCode(64).setNationalNumber(21387835L);
-    assertTrue(phoneUtil.isValidNumber(nzNumber.build()));
+    assertTrue(phoneUtil.isValidNumber(nzNumber));
   }
 
+
   public void testIsValidForRegion() {
     // This number is valid for the Bahamas, but is not a valid US number.
-    PhoneNumber bsNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(2423232345L).build();
-    assertTrue(phoneUtil.isValidNumber(bsNumber1));
-    assertTrue(phoneUtil.isValidNumberForRegion(bsNumber1, "BS"));
-    assertTrue(phoneUtil.isValidNumberForRegion(bsNumber1, "bs"));
-    assertFalse(phoneUtil.isValidNumberForRegion(bsNumber1, "US"));
-    PhoneNumber bsNumber2 =
-        PhoneNumber.newBuilder(bsNumber1).setNationalNumber(2421232345L).build();
+    PhoneNumber bsNumber = new PhoneNumber();
+    bsNumber.setCountryCode(1).setNationalNumber(2423232345L);
+    assertTrue(phoneUtil.isValidNumber(bsNumber));
+    assertTrue(phoneUtil.isValidNumberForRegion(bsNumber, "BS"));
+    assertTrue(phoneUtil.isValidNumberForRegion(bsNumber, "bs"));
+    assertFalse(phoneUtil.isValidNumberForRegion(bsNumber, "US"));
+    bsNumber.setNationalNumber(2421232345L);
     // This number is no longer valid.
-    assertFalse(phoneUtil.isValidNumber(bsNumber2));
+    assertFalse(phoneUtil.isValidNumber(bsNumber));
   }
 
   public void testIsNotValidNumber() {
-    PhoneNumber.Builder usNumber = PhoneNumber.newBuilder();
+    PhoneNumber usNumber = new PhoneNumber();
     usNumber.setCountryCode(1).setNationalNumber(2530000L);
-    assertFalse(phoneUtil.isValidNumber(usNumber.build()));
+    assertFalse(phoneUtil.isValidNumber(usNumber));
 
-    PhoneNumber.Builder itNumber = PhoneNumber.newBuilder();
+    PhoneNumber itNumber = new PhoneNumber();
     itNumber.setCountryCode(39).setNationalNumber(23661830000L).setItalianLeadingZero(true);
-    assertFalse(phoneUtil.isValidNumber(itNumber.build()));
+    assertFalse(phoneUtil.isValidNumber(itNumber));
 
-    PhoneNumber.Builder gbNumber = PhoneNumber.newBuilder();
+    PhoneNumber gbNumber = new PhoneNumber();
     gbNumber.setCountryCode(44).setNationalNumber(791234567L);
-    assertFalse(phoneUtil.isValidNumber(gbNumber.build()));
+    assertFalse(phoneUtil.isValidNumber(gbNumber));
 
-    PhoneNumber.Builder deNumber = PhoneNumber.newBuilder();
+    PhoneNumber deNumber = new PhoneNumber();
     deNumber.setCountryCode(49).setNationalNumber(1234L);
-    assertFalse(phoneUtil.isValidNumber(deNumber.build()));
+    assertFalse(phoneUtil.isValidNumber(deNumber));
 
-    PhoneNumber.Builder nzNumber = PhoneNumber.newBuilder();
+    PhoneNumber nzNumber = new PhoneNumber();
     nzNumber.setCountryCode(64).setNationalNumber(3316005L);
-    assertFalse(phoneUtil.isValidNumber(nzNumber.build()));
+    assertFalse(phoneUtil.isValidNumber(nzNumber));
   }
 
   public void testGetRegionCodeForCountryCode() {
@@ -804,17 +802,17 @@
   }
 
   public void testGetRegionCodeForNumber() {
-    PhoneNumber.Builder bsNumber = PhoneNumber.newBuilder();
+    PhoneNumber bsNumber = new PhoneNumber();
     bsNumber.setCountryCode(1).setNationalNumber(2423027000L);
-    assertEquals("BS", phoneUtil.getRegionCodeForNumber(bsNumber.build()));
+    assertEquals("BS", phoneUtil.getRegionCodeForNumber(bsNumber));
 
-    PhoneNumber.Builder usNumber = PhoneNumber.newBuilder();
+    PhoneNumber usNumber = new PhoneNumber();
     usNumber.setCountryCode(1).setNationalNumber(6502530000L);
-    assertEquals("US", phoneUtil.getRegionCodeForNumber(usNumber.build()));
+    assertEquals("US", phoneUtil.getRegionCodeForNumber(usNumber));
 
-    PhoneNumber.Builder gbNumber = PhoneNumber.newBuilder();
+    PhoneNumber gbNumber = new PhoneNumber();
     gbNumber.setCountryCode(44).setNationalNumber(7912345678L);
-    assertEquals("GB", phoneUtil.getRegionCodeForNumber(gbNumber.build()));
+    assertEquals("GB", phoneUtil.getRegionCodeForNumber(gbNumber));
   }
 
   public void testGetCountryCodeForRegion() {
@@ -834,17 +832,18 @@
   }
 
   public void testIsPossibleNumber() {
-    PhoneNumber number1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
-    assertTrue(phoneUtil.isPossibleNumber(number1));
+    PhoneNumber number = new PhoneNumber();
+    number.setCountryCode(1).setNationalNumber(6502530000L);
+    assertTrue(phoneUtil.isPossibleNumber(number));
 
-    PhoneNumber number2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(2530000L).build();
-    assertTrue(phoneUtil.isPossibleNumber(number2));
+    number.clear();
+    number.setCountryCode(1).setNationalNumber(2530000L);
+    assertTrue(phoneUtil.isPossibleNumber(number));
 
-    PhoneNumber number3 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(2070313000L).build();
-    assertTrue(phoneUtil.isPossibleNumber(number3));
+    number.clear();
+    number.setCountryCode(44).setNationalNumber(2070313000L);
+    assertTrue(phoneUtil.isPossibleNumber(number));
+
     assertTrue(phoneUtil.isPossibleNumber("+1 650 253 0000", "US"));
     assertTrue(phoneUtil.isPossibleNumber("+1 650 GOO OGLE", "US"));
     assertTrue(phoneUtil.isPossibleNumber("(650) 253-0000", "US"));
@@ -859,44 +858,44 @@
 
   public void testIsPossibleNumberWithReason() {
     // FYI, national numbers for country code +1 that are within 7 to 10 digits are possible.
-    PhoneNumber number1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
+    PhoneNumber number = new PhoneNumber();
+    number.setCountryCode(1).setNationalNumber(6502530000L);
     assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE,
-                 phoneUtil.isPossibleNumberWithReason(number1));
+                 phoneUtil.isPossibleNumberWithReason(number));
 
-    PhoneNumber number2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(2530000L).build();
+    number.clear();
+    number.setCountryCode(1).setNationalNumber(2530000L);
     assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE,
-                 phoneUtil.isPossibleNumberWithReason(number2));
+                 phoneUtil.isPossibleNumberWithReason(number));
 
-    PhoneNumber number3 =
-        PhoneNumber.newBuilder().setCountryCode(0).setNationalNumber(2530000L).build();
+    number.clear();
+    number.setCountryCode(0).setNationalNumber(2530000L);
     assertEquals(PhoneNumberUtil.ValidationResult.INVALID_COUNTRY_CODE,
-                 phoneUtil.isPossibleNumberWithReason(number3));
+                 phoneUtil.isPossibleNumberWithReason(number));
 
-    PhoneNumber number4 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(253000L).build();
+    number.clear();
+    number.setCountryCode(1).setNationalNumber(253000L);
     assertEquals(PhoneNumberUtil.ValidationResult.TOO_SHORT,
-                 phoneUtil.isPossibleNumberWithReason(number4));
+                 phoneUtil.isPossibleNumberWithReason(number));
 
-    PhoneNumber number5 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(65025300000L).build();
+    number.clear();
+    number.setCountryCode(1).setNationalNumber(65025300000L);
     assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG,
-                 phoneUtil.isPossibleNumberWithReason(number5));
+                 phoneUtil.isPossibleNumberWithReason(number));
   }
 
   public void testIsNotPossibleNumber() {
-    PhoneNumber number1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(65025300000L).build();
-    assertFalse(phoneUtil.isPossibleNumber(number1));
+    PhoneNumber number = new PhoneNumber();
+    number.setCountryCode(1).setNationalNumber(65025300000L);
+    assertFalse(phoneUtil.isPossibleNumber(number));
 
-    PhoneNumber number2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(253000L).build();
-    assertFalse(phoneUtil.isPossibleNumber(number2));
+    number.clear();
+    number.setCountryCode(1).setNationalNumber(253000L);
+    assertFalse(phoneUtil.isPossibleNumber(number));
 
-    PhoneNumber number3 =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(300L).build();
-    assertFalse(phoneUtil.isPossibleNumber(number3));
+    number.clear();
+    number.setCountryCode(44).setNationalNumber(300L);
+    assertFalse(phoneUtil.isPossibleNumber(number));
 
     assertFalse(phoneUtil.isPossibleNumber("+1 650 253 00000", "US"));
     assertFalse(phoneUtil.isPossibleNumber("(650) 253-00000", "US"));
@@ -1039,7 +1038,7 @@
   }
 
   public void testMaybeExtractCountryCode() {
-    PhoneNumber.Builder number = PhoneNumber.newBuilder();
+    PhoneNumber number = new PhoneNumber();
     PhoneMetadata metadata = phoneUtil.getMetadataForRegion("US");
     // Note that for the US, the IDD is 011.
     try {
@@ -1157,8 +1156,8 @@
   }
 
   public void testParseNationalNumber() throws Exception {
-    PhoneNumber nzNumber =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(33316005L).build();
+    PhoneNumber nzNumber = new PhoneNumber();
+    nzNumber.setCountryCode(64).setNationalNumber(33316005L);
 
     // National prefix attached.
     assertEquals(nzNumber, phoneUtil.parse("033316005", "NZ"));
@@ -1176,28 +1175,27 @@
     assertEquals(nzNumber, phoneUtil.parse("01164 3 331 6005", "US"));
     assertEquals(nzNumber, phoneUtil.parse("+64 3 331 6005", "US"));
 
-    PhoneNumber nzNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(64123456L).build();
-    assertEquals(nzNumber2, phoneUtil.parse("64(0)64123456", "NZ"));
+    nzNumber.clear();
+    nzNumber.setCountryCode(64).setNationalNumber(64123456L);
+    assertEquals(nzNumber, phoneUtil.parse("64(0)64123456", "NZ"));
     // Check that using a "/" is fine in a phone number.
-    PhoneNumber deNumber =
-        PhoneNumber.newBuilder().setCountryCode(49).setNationalNumber(12345678L).build();
+    PhoneNumber deNumber = new PhoneNumber();
+    deNumber.setCountryCode(49).setNationalNumber(12345678L);
     assertEquals(deNumber, phoneUtil.parse("123/45678", "DE"));
 
+    PhoneNumber usNumber = new PhoneNumber();
     // Check it doesn't use the '1' as a country code when parsing if the phone number was already
     // possible.
-    PhoneNumber usNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(1234567890L).build();
+    usNumber.setCountryCode(1).setNationalNumber(1234567890L);
     assertEquals(usNumber, phoneUtil.parse("123-456-7890", "US"));
   }
 
    public void testParseNumberWithAlphaCharacters() throws Exception {
     // Test case with alpha characters.
-    PhoneNumber tollfreeNumber =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(800332005L).build();
-    assertEquals(tollfreeNumber, phoneUtil.parse("0800 DDA 005", "NZ"));
-    PhoneNumber premiumNumber =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(9003326005L).build();
+    PhoneNumber tollfreeNumber = new PhoneNumber();
+    tollfreeNumber.setCountryCode(64).setNationalNumber(800332005L);
+    PhoneNumber premiumNumber = new PhoneNumber();
+    premiumNumber.setCountryCode(64).setNationalNumber(9003326005L);
     assertEquals(premiumNumber, phoneUtil.parse("0900 DDA 6005", "NZ"));
     // Not enough alpha characters for them to be considered intentional, so they are stripped.
     assertEquals(premiumNumber, phoneUtil.parse("0900 332 6005a", "NZ"));
@@ -1207,8 +1205,8 @@
   }
 
   public void testParseWithInternationalPrefixes() throws Exception {
-    PhoneNumber usNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6503336000L).build();
+    PhoneNumber usNumber = new PhoneNumber();
+    usNumber.setCountryCode(1).setNationalNumber(6503336000L);
     assertEquals(usNumber, phoneUtil.parse("+1 (650) 333-6000", "NZ"));
     assertEquals(usNumber, phoneUtil.parse("1-650-333-6000", "US"));
     // Calling the US number from Singapore by using different service providers
@@ -1223,56 +1221,56 @@
   }
 
   public void testParseWithLeadingZero() throws Exception {
-    PhoneNumber itNumber =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(236618300L)
-            .setItalianLeadingZero(true).build();
+    PhoneNumber itNumber = new PhoneNumber();
+    itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true);
     assertEquals(itNumber, phoneUtil.parse("+39 02-36618 300", "NZ"));
     assertEquals(itNumber, phoneUtil.parse("02-36618 300", "IT"));
 
-    PhoneNumber itNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(312345678L).build();
-    assertEquals(itNumber2, phoneUtil.parse("312 345 678", "IT"));
+    itNumber.clear();
+    itNumber.setCountryCode(39).setNationalNumber(312345678L);
+    assertEquals(itNumber, phoneUtil.parse("312 345 678", "IT"));
   }
 
   public void testParseNationalNumberArgentina() throws Exception {
     // Test parsing mobile numbers of Argentina.
-    PhoneNumber arNumber =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(93435551212L).build();
+    PhoneNumber arNumber = new PhoneNumber();
+
+    arNumber.setCountryCode(54).setNationalNumber(93435551212L);
     assertEquals(arNumber, phoneUtil.parse("+54 9 343 555 1212", "AR"));
     assertEquals(arNumber, phoneUtil.parse("0343 15 555 1212", "AR"));
 
-    PhoneNumber arNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(93715654320L).build();
-    assertEquals(arNumber2, phoneUtil.parse("+54 9 3715 65 4320", "AR"));
-    assertEquals(arNumber2, phoneUtil.parse("03715 15 65 4320", "AR"));
+    arNumber.clear();
+    arNumber.setCountryCode(54).setNationalNumber(93715654320L);
+    assertEquals(arNumber, phoneUtil.parse("+54 9 3715 65 4320", "AR"));
+    assertEquals(arNumber, phoneUtil.parse("03715 15 65 4320", "AR"));
 
     // Test parsing fixed-line numbers of Argentina.
-    PhoneNumber arNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(1137970000L).build();
-    assertEquals(arNumber3, phoneUtil.parse("+54 11 3797 0000", "AR"));
-    assertEquals(arNumber3, phoneUtil.parse("011 3797 0000", "AR"));
+    arNumber.clear();
+    arNumber.setCountryCode(54).setNationalNumber(1137970000L);
+    assertEquals(arNumber, phoneUtil.parse("+54 11 3797 0000", "AR"));
+    assertEquals(arNumber, phoneUtil.parse("011 3797 0000", "AR"));
 
-    PhoneNumber arNumber4 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(3715654321L).build();
-    assertEquals(arNumber4, phoneUtil.parse("+54 3715 65 4321", "AR"));
-    assertEquals(arNumber4, phoneUtil.parse("03715 65 4321", "AR"));
+    arNumber.clear();
+    arNumber.setCountryCode(54).setNationalNumber(3715654321L);
+    assertEquals(arNumber, phoneUtil.parse("+54 3715 65 4321", "AR"));
+    assertEquals(arNumber, phoneUtil.parse("03715 65 4321", "AR"));
 
-    PhoneNumber arNumber5 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(2312340000L).build();
-    assertEquals(arNumber5, phoneUtil.parse("+54 23 1234 0000", "AR"));
-    assertEquals(arNumber5, phoneUtil.parse("023 1234 0000", "AR"));
+    arNumber.clear();
+    arNumber.setCountryCode(54).setNationalNumber(2312340000L);
+    assertEquals(arNumber, phoneUtil.parse("+54 23 1234 0000", "AR"));
+    assertEquals(arNumber, phoneUtil.parse("023 1234 0000", "AR"));
   }
 
   public void testParseWithXInNumber() throws Exception {
     // Test that having an 'x' in the phone number at the start is ok and that it just gets removed.
-    PhoneNumber arNumber6 =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(123456789L).build();
-    assertEquals(arNumber6, phoneUtil.parse("0123456789", "AR"));
-    assertEquals(arNumber6, phoneUtil.parse("(0) 123456789", "AR"));
-    assertEquals(arNumber6, phoneUtil.parse("0 123456789", "AR"));
-    assertEquals(arNumber6, phoneUtil.parse("(0xx) 123456789", "AR"));
-    PhoneNumber arFromUs =
-        PhoneNumber.newBuilder().setCountryCode(54).setNationalNumber(81429712L).build();
+    PhoneNumber arNumber = new PhoneNumber();
+    arNumber.setCountryCode(54).setNationalNumber(123456789L);
+    assertEquals(arNumber, phoneUtil.parse("0123456789", "AR"));
+    assertEquals(arNumber, phoneUtil.parse("(0) 123456789", "AR"));
+    assertEquals(arNumber, phoneUtil.parse("0 123456789", "AR"));
+    assertEquals(arNumber, phoneUtil.parse("(0xx) 123456789", "AR"));
+    PhoneNumber arFromUs = new PhoneNumber();
+    arFromUs.setCountryCode(54).setNationalNumber(81429712L);
     // This test is intentionally constructed such that the number of digit after xx is larger than
     // 7, so that the number won't be mistakenly treated as an extension, as we allow extensions up
     // to 7 digits. This assumption is okay for now as all the countries where a carrier selection
@@ -1282,18 +1280,18 @@
 
   public void testParseNumbersMexico() throws Exception {
     // Test parsing fixed-line numbers of Mexico.
-    PhoneNumber mxNumber =
-        PhoneNumber.newBuilder().setCountryCode(52).setNationalNumber(4499780001L).build();
+    PhoneNumber mxNumber = new PhoneNumber();
+    mxNumber.setCountryCode(52).setNationalNumber(4499780001L);
     assertEquals(mxNumber, phoneUtil.parse("+52 (449)978-0001", "MX"));
     assertEquals(mxNumber, phoneUtil.parse("01 (449)978-0001", "MX"));
     assertEquals(mxNumber, phoneUtil.parse("(449)978-0001", "MX"));
 
     // Test parsing mobile numbers of Mexico.
-    PhoneNumber mxNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(52).setNationalNumber(13312345678L).build();
-    assertEquals(mxNumber2, phoneUtil.parse("+52 1 33 1234-5678", "MX"));
-    assertEquals(mxNumber2, phoneUtil.parse("044 (33) 1234-5678", "MX"));
-    assertEquals(mxNumber2, phoneUtil.parse("045 33 1234-5678", "MX"));
+    mxNumber.clear();
+    mxNumber.setCountryCode(52).setNationalNumber(13312345678L);
+    assertEquals(mxNumber, phoneUtil.parse("+52 1 33 1234-5678", "MX"));
+    assertEquals(mxNumber, phoneUtil.parse("044 (33) 1234-5678", "MX"));
+    assertEquals(mxNumber, phoneUtil.parse("045 33 1234-5678", "MX"));
   }
 
   public void testFailedParseOnInvalidNumbers() {
@@ -1400,30 +1398,27 @@
   }
 
   public void testParseExtensions() throws Exception {
-    PhoneNumber nzNumber =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(33316005L)
-            .setExtension("3456").build();
+    PhoneNumber nzNumber = new PhoneNumber();
+    nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("3456");
     assertEquals(nzNumber, phoneUtil.parse("03 331 6005 ext 3456", "NZ"));
     assertEquals(nzNumber, phoneUtil.parse("03-3316005x3456", "NZ"));
     assertEquals(nzNumber, phoneUtil.parse("03-3316005 int.3456", "NZ"));
     assertEquals(nzNumber, phoneUtil.parse("03 3316005 #3456", "NZ"));
     // Test the following do not extract extensions:
-    PhoneNumber nonExtnNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(180074935247L).build();
+    PhoneNumber nonExtnNumber = new PhoneNumber();
+    nonExtnNumber.setCountryCode(1).setNationalNumber(180074935247L);
     assertEquals(nonExtnNumber, phoneUtil.parse("1800 six-flags", "US"));
     assertEquals(nonExtnNumber, phoneUtil.parse("1800 SIX FLAGS", "US"));
     assertEquals(nonExtnNumber, phoneUtil.parse("0~01 1800 7493 5247", "PL"));
     assertEquals(nonExtnNumber, phoneUtil.parse("(1800) 7493.5247", "US"));
     // Check that the last instance of an extension token is matched.
-    PhoneNumber extnNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(180074935247L)
-            .setExtension("1234").build();
+    PhoneNumber extnNumber = new PhoneNumber();
+    extnNumber.setCountryCode(1).setNationalNumber(180074935247L).setExtension("1234");
     assertEquals(extnNumber, phoneUtil.parse("0~01 1800 7493 5247 ~1234", "PL"));
     // Verifying bug-fix where the last digit of a number was previously omitted if it was a 0 when
     // extracting the extension. Also verifying a few different cases of extensions.
-    PhoneNumber ukNumber =
-        PhoneNumber.newBuilder().setCountryCode(44).setNationalNumber(2034567890L)
-            .setExtension("456").build();
+    PhoneNumber ukNumber = new PhoneNumber();
+    ukNumber.setCountryCode(44).setNationalNumber(2034567890L).setExtension("456");
     assertEquals(ukNumber, phoneUtil.parse("+44 2034567890x456", "NZ"));
     assertEquals(ukNumber, phoneUtil.parse("+44 2034567890x456", "GB"));
     assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 x456", "GB"));
@@ -1433,9 +1428,9 @@
     assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 x 456  ", "GB"));
     assertEquals(ukNumber, phoneUtil.parse("+44 2034567890  X 456", "GB"));
 
-    PhoneNumber usWithExtension =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(8009013355L)
-            .setExtension("7246433").build();
+    PhoneNumber usWithExtension = new PhoneNumber();
+    usWithExtension.clear();
+    usWithExtension.setCountryCode(1).setNationalNumber(8009013355L).setExtension("7246433");
     assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 x 7246433", "US"));
     assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 , ext 7246433", "US"));
     assertEquals(usWithExtension,
@@ -1444,9 +1439,8 @@
     assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 ext: 7246433", "US"));
 
     // Test that if a number has two extensions specified, we ignore the second.
-    PhoneNumber usWithTwoExtensionsNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(2121231234L)
-            .setExtension("508").build();
+    PhoneNumber usWithTwoExtensionsNumber = new PhoneNumber();
+    usWithTwoExtensionsNumber.setCountryCode(1).setNationalNumber(2121231234L).setExtension("508");
     assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508/x1234",
                                                             "US"));
     assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508/ x1234",
@@ -1456,46 +1450,42 @@
 
     // Test parsing numbers in the form (645) 123-1234-910# works, where the last 3 digits before
     // the # are an extension.
-    PhoneNumber usWithExtension2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6451231234L)
-            .setExtension("910").build();
-    assertEquals(usWithExtension2, phoneUtil.parse("+1 (645) 123 1234-910#", "US"));
+    usWithExtension.clear();
+    usWithExtension.setCountryCode(1).setNationalNumber(6451231234L).setExtension("910");
+    assertEquals(usWithExtension, phoneUtil.parse("+1 (645) 123 1234-910#", "US"));
   }
 
   public void testParseAndKeepRaw() throws Exception {
-    PhoneNumber alphaNumericNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(180074935247L)
-            .setRawInput("1800 six-flags")
-            .setCountryCodeSource(CountryCodeSource.FROM_DEFAULT_COUNTRY).build();
-    assertEquals(alphaNumericNumber1,
+    PhoneNumber alphaNumericNumber = new PhoneNumber();
+    alphaNumericNumber.
+        setCountryCode(1).setNationalNumber(180074935247L).setRawInput("1800 six-flags").
+        setCountryCodeSource(CountryCodeSource.FROM_DEFAULT_COUNTRY);
+    assertEquals(alphaNumericNumber,
                  phoneUtil.parseAndKeepRawInput("1800 six-flags", "US"));
 
-    PhoneNumber alphaNumericNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(8007493524L)
-            .setRawInput("1800 six-flag")
-            .setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN).build();
-    assertEquals(alphaNumericNumber2,
+    alphaNumericNumber.
+        setCountryCode(1).setNationalNumber(8007493524L).setRawInput("1800 six-flag").
+        setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN);
+    assertEquals(alphaNumericNumber,
                  phoneUtil.parseAndKeepRawInput("1800 six-flag", "US"));
 
-    PhoneNumber alphaNumericNumber3 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(8007493524L)
-            .setRawInput("+1800 six-flag")
-            .setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN).build();
-    assertEquals(alphaNumericNumber3,
+    alphaNumericNumber.
+        setCountryCode(1).setNationalNumber(8007493524L).setRawInput("+1800 six-flag").
+        setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN);
+    assertEquals(alphaNumericNumber,
                  phoneUtil.parseAndKeepRawInput("+1800 six-flag", "NZ"));
 
-    PhoneNumber alphaNumericNumber4 =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(18007493524L)
-            .setRawInput("1800 six-flag")
-            .setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_IDD).build();
-    assertEquals(alphaNumericNumber4,
+    alphaNumericNumber.
+        setCountryCode(1).setNationalNumber(8007493524L).setRawInput("001800 six-flag").
+        setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_IDD);
+    assertEquals(alphaNumericNumber,
                  phoneUtil.parseAndKeepRawInput("001800 six-flag", "NZ"));
   }
 
   public void testCountryWithNoNumberDesc() {
     // Andorra is a country where we don't have PhoneNumberDesc info in the metadata.
-    PhoneNumber adNumber =
-        PhoneNumber.newBuilder().setCountryCode(376).setNationalNumber(12345L).build();
+    PhoneNumber adNumber = new PhoneNumber();
+    adNumber.setCountryCode(376).setNationalNumber(12345L);
     assertEquals("+376 12345", phoneUtil.format(adNumber,
                                                 PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
     assertEquals("+37612345", phoneUtil.format(adNumber,
@@ -1507,16 +1497,16 @@
     assertTrue(phoneUtil.isValidNumber(adNumber));
 
     // Test dialing a US number from within Andorra.
-    PhoneNumber usNumber =
-        PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(6502530000L).build();
+    PhoneNumber usNumber = new PhoneNumber();
+    usNumber.setCountryCode(1).setNationalNumber(6502530000L);
     assertEquals("00 1 650 253 0000",
                  phoneUtil.formatOutOfCountryCallingNumber(usNumber, "AD"));
   }
 
   public void testUnknownCountryCallingCodeForValidation() {
-    PhoneNumber.Builder invalidNumber = PhoneNumber.newBuilder();
+    PhoneNumber invalidNumber = new PhoneNumber();
     invalidNumber.setCountryCode(0).setNationalNumber(1234L);
-    assertFalse(phoneUtil.isValidNumber(invalidNumber.build()));
+    assertFalse(phoneUtil.isValidNumber(invalidNumber));
   }
 
   public void testIsNumberMatchMatches() throws Exception {
@@ -1543,24 +1533,23 @@
     assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH,
                  phoneUtil.isNumberMatch("+64 3 331-6005 extn 1234", "+6433316005#1234"));
     // Test proto buffers.
-    PhoneNumber nzNumber =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(33316005L)
-            .setExtension("3456").build();
+    PhoneNumber nzNumber = new PhoneNumber();
+    nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("3456");
     assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH,
                  phoneUtil.isNumberMatch(nzNumber, "+643 331 6005 ext 3456"));
-    PhoneNumber nzNumber2 = PhoneNumber.newBuilder(nzNumber).clearExtension().build();
+    nzNumber.clearExtension();
     assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH,
-                 phoneUtil.isNumberMatch(nzNumber2, "+6403 331 6005"));
+                 phoneUtil.isNumberMatch(nzNumber, "+6403 331 6005"));
     // Check empty extensions are ignored.
-    PhoneNumber nzNumber3 = PhoneNumber.newBuilder(nzNumber).setExtension("").build();
+    nzNumber.setExtension("");
     assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH,
-                 phoneUtil.isNumberMatch(nzNumber3, "+6403 331 6005"));
+                 phoneUtil.isNumberMatch(nzNumber, "+6403 331 6005"));
     // Check variant with two proto buffers.
-    PhoneNumber nzNumber4 =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(33316005L).build();
-    assertEquals("Number " + nzNumber.toString() + " did not match " + nzNumber4.toString(),
+    PhoneNumber nzNumberTwo = new PhoneNumber();
+    nzNumberTwo.setCountryCode(64).setNationalNumber(33316005L);
+    assertEquals("Number " + nzNumber.toString() + " did not match " + nzNumberTwo.toString(),
                  PhoneNumberUtil.MatchType.EXACT_MATCH,
-                 phoneUtil.isNumberMatch(nzNumber3, nzNumber4));
+                 phoneUtil.isNumberMatch(nzNumber, nzNumberTwo));
   }
 
   public void testIsNumberMatchNonMatches() throws Exception {
@@ -1587,13 +1576,12 @@
                  phoneUtil.isNumberMatch("+64 3 331-6005", "03 331 6005"));
     assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
                  phoneUtil.isNumberMatch("3 331-6005", "03 331 6005"));
-    PhoneNumber nzNumber =
-        PhoneNumber.newBuilder().setCountryCode(64).setNationalNumber(33316005L)
-            .setExtension("").build();
+    PhoneNumber nzNumber = new PhoneNumber();
+    nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("");
     assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
                  phoneUtil.isNumberMatch(nzNumber, "03 331 6005"));
-    PhoneNumber unchangedNzNumber = PhoneNumber.newBuilder().setCountryCode(64)
-        .setNationalNumber(33316005L).setExtension("").build();
+    PhoneNumber unchangedNzNumber = new PhoneNumber();
+    unchangedNzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("");
     // Check the phone number proto was not edited during the method call.
     assertEquals(unchangedNzNumber, nzNumber);
   }
@@ -1617,20 +1605,16 @@
     assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
                  phoneUtil.isNumberMatch("+64 3 331-6005", "3 331 6005#1234"));
     // One has Italian leading zero, one does not.
-    PhoneNumber italianNumber1 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(1234L)
-            .setItalianLeadingZero(true).build();
-    PhoneNumber italianNumber2 =
-        PhoneNumber.newBuilder().setCountryCode(39).setNationalNumber(1234L).build();
+    PhoneNumber italianNumberOne = new PhoneNumber();
+    italianNumberOne.setCountryCode(39).setNationalNumber(1234L).setItalianLeadingZero(true);
+    PhoneNumber italianNumberTwo = new PhoneNumber();
+    italianNumberTwo.setCountryCode(39).setNationalNumber(1234L);
     assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
-                 phoneUtil.isNumberMatch(italianNumber1, italianNumber2));
+                 phoneUtil.isNumberMatch(italianNumberOne, italianNumberTwo));
     // One has an extension, the other has an extension of "".
-    PhoneNumber italianNumber3 =
-        PhoneNumber.newBuilder(italianNumber1).setExtension("1234")
-            .clearItalianLeadingZero().build();
-    PhoneNumber italianNumber4 =
-        PhoneNumber.newBuilder(italianNumber2).setExtension("").build();
+    italianNumberOne.setExtension("1234").clearItalianLeadingZero();
+    italianNumberTwo.setExtension("");
     assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
-                 phoneUtil.isNumberMatch(italianNumber3, italianNumber4));
+                 phoneUtil.isNumberMatch(italianNumberOne, italianNumberTwo));
   }
 }