@@ -1656,7 +1656,8 @@ public String formatOutOfCountryCallingNumber(PhoneNumber number,
16561656 * @return the formatted phone number in its original number format
16571657 */
16581658 public String formatInOriginalFormat (PhoneNumber number , String regionCallingFrom ) {
1659- if (number .hasRawInput () && !hasFormattingPatternForNumber (number )) {
1659+ NumberFormat formatRule = chooseFormattingPatternForNumber (number );
1660+ if (number .hasRawInput () && formatRule == null ) {
16601661 // We check if we have the formatting pattern because without that, we might format the number
16611662 // as a group without national prefix.
16621663 return number .getRawInput ();
@@ -1696,12 +1697,6 @@ public String formatInOriginalFormat(PhoneNumber number, String regionCallingFro
16961697 formattedNumber = nationalFormat ;
16971698 break ;
16981699 }
1699- // Metadata cannot be null here because getNddPrefixForRegion() (above) returns null if
1700- // there is no metadata for the region.
1701- PhoneMetadata metadata = getMetadataForRegion (regionCode );
1702- String nationalNumber = getNationalSignificantNumber (number );
1703- NumberFormat formatRule =
1704- chooseFormattingPatternForNumber (metadata .getNumberFormatList (), nationalNumber );
17051700 // The format rule could still be null here if the national number was 0 and there was no
17061701 // raw input (this should not be possible for numbers generated by the phonenumber library
17071702 // as they would also not have a country calling code and we would have exited earlier).
@@ -1770,18 +1765,32 @@ private boolean rawInputContainsNationalPrefix(String rawInput, String nationalP
17701765 return false ;
17711766 }
17721767
1773- private boolean hasFormattingPatternForNumber (PhoneNumber number ) {
1768+ private NumberFormat chooseFormattingPatternForNumber (PhoneNumber number ) {
17741769 int countryCallingCode = number .getCountryCode ();
17751770 String phoneNumberRegion = getRegionCodeForCountryCode (countryCallingCode );
17761771 PhoneMetadata metadata =
17771772 getMetadataForRegionOrCallingCode (countryCallingCode , phoneNumberRegion );
17781773 if (metadata == null ) {
1779- return false ;
1774+ return null ;
17801775 }
17811776 String nationalNumber = getNationalSignificantNumber (number );
1782- NumberFormat formatRule =
1783- chooseFormattingPatternForNumber (metadata .getNumberFormatList (), nationalNumber );
1784- return formatRule != null ;
1777+ return chooseFormattingPatternForNumber (metadata .getNumberFormatList (), nationalNumber );
1778+ }
1779+
1780+ NumberFormat chooseFormattingPatternForNumber (List <NumberFormat > availableFormats ,
1781+ String nationalNumber ) {
1782+ for (NumberFormat numFormat : availableFormats ) {
1783+ int size = numFormat .getLeadingDigitsPatternCount ();
1784+ if (size == 0 || regexCache .getPatternForRegex (
1785+ // We always use the last leading_digits_pattern, as it is the most detailed.
1786+ numFormat .getLeadingDigitsPattern (size - 1 )).matcher (nationalNumber ).lookingAt ()) {
1787+ Matcher m = regexCache .getPatternForRegex (numFormat .getPattern ()).matcher (nationalNumber );
1788+ if (m .matches ()) {
1789+ return numFormat ;
1790+ }
1791+ }
1792+ }
1793+ return null ;
17851794 }
17861795
17871796 /**
@@ -1970,22 +1979,6 @@ private String formatNsn(String number,
19701979 : formatNsnUsingPattern (number , formattingPattern , numberFormat , carrierCode );
19711980 }
19721981
1973- NumberFormat chooseFormattingPatternForNumber (List <NumberFormat > availableFormats ,
1974- String nationalNumber ) {
1975- for (NumberFormat numFormat : availableFormats ) {
1976- int size = numFormat .getLeadingDigitsPatternCount ();
1977- if (size == 0 || regexCache .getPatternForRegex (
1978- // We always use the last leading_digits_pattern, as it is the most detailed.
1979- numFormat .getLeadingDigitsPattern (size - 1 )).matcher (nationalNumber ).lookingAt ()) {
1980- Matcher m = regexCache .getPatternForRegex (numFormat .getPattern ()).matcher (nationalNumber );
1981- if (m .matches ()) {
1982- return numFormat ;
1983- }
1984- }
1985- }
1986- return null ;
1987- }
1988-
19891982 // Simple wrapper of formatNsnUsingPattern for the common case of no carrier code.
19901983 String formatNsnUsingPattern (String nationalNumber ,
19911984 NumberFormat formattingPattern ,
0 commit comments