Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1656,7 +1656,8 @@ public String formatOutOfCountryCallingNumber(PhoneNumber number,
* @return the formatted phone number in its original number format
*/
public String formatInOriginalFormat(PhoneNumber number, String regionCallingFrom) {
if (number.hasRawInput() && !hasFormattingPatternForNumber(number)) {
NumberFormat formatRule = chooseFormattingPatternForNumber(number);
if (number.hasRawInput() && formatRule == null) {
// We check if we have the formatting pattern because without that, we might format the number
// as a group without national prefix.
return number.getRawInput();
Expand Down Expand Up @@ -1696,12 +1697,6 @@ public String formatInOriginalFormat(PhoneNumber number, String regionCallingFro
formattedNumber = nationalFormat;
break;
}
// Metadata cannot be null here because getNddPrefixForRegion() (above) returns null if
// there is no metadata for the region.
PhoneMetadata metadata = getMetadataForRegion(regionCode);
String nationalNumber = getNationalSignificantNumber(number);
NumberFormat formatRule =
chooseFormattingPatternForNumber(metadata.getNumberFormatList(), nationalNumber);
// The format rule could still be null here if the national number was 0 and there was no
// raw input (this should not be possible for numbers generated by the phonenumber library
// as they would also not have a country calling code and we would have exited earlier).
Expand Down Expand Up @@ -1770,18 +1765,32 @@ private boolean rawInputContainsNationalPrefix(String rawInput, String nationalP
return false;
}

private boolean hasFormattingPatternForNumber(PhoneNumber number) {
private NumberFormat chooseFormattingPatternForNumber(PhoneNumber number) {
int countryCallingCode = number.getCountryCode();
String phoneNumberRegion = getRegionCodeForCountryCode(countryCallingCode);
PhoneMetadata metadata =
getMetadataForRegionOrCallingCode(countryCallingCode, phoneNumberRegion);
if (metadata == null) {
return false;
return null;
}
String nationalNumber = getNationalSignificantNumber(number);
NumberFormat formatRule =
chooseFormattingPatternForNumber(metadata.getNumberFormatList(), nationalNumber);
return formatRule != null;
return chooseFormattingPatternForNumber(metadata.getNumberFormatList(), nationalNumber);
}

NumberFormat chooseFormattingPatternForNumber(List<NumberFormat> availableFormats,
String nationalNumber) {
for (NumberFormat numFormat : availableFormats) {
int size = numFormat.getLeadingDigitsPatternCount();
if (size == 0 || regexCache.getPatternForRegex(
// We always use the last leading_digits_pattern, as it is the most detailed.
numFormat.getLeadingDigitsPattern(size - 1)).matcher(nationalNumber).lookingAt()) {
Matcher m = regexCache.getPatternForRegex(numFormat.getPattern()).matcher(nationalNumber);
if (m.matches()) {
return numFormat;
}
}
}
return null;
}

/**
Expand Down Expand Up @@ -1970,22 +1979,6 @@ private String formatNsn(String number,
: formatNsnUsingPattern(number, formattingPattern, numberFormat, carrierCode);
}

NumberFormat chooseFormattingPatternForNumber(List<NumberFormat> availableFormats,
String nationalNumber) {
for (NumberFormat numFormat : availableFormats) {
int size = numFormat.getLeadingDigitsPatternCount();
if (size == 0 || regexCache.getPatternForRegex(
// We always use the last leading_digits_pattern, as it is the most detailed.
numFormat.getLeadingDigitsPattern(size - 1)).matcher(nationalNumber).lookingAt()) {
Matcher m = regexCache.getPatternForRegex(numFormat.getPattern()).matcher(nationalNumber);
if (m.matches()) {
return numFormat;
}
}
}
return null;
}

// Simple wrapper of formatNsnUsingPattern for the common case of no carrier code.
String formatNsnUsingPattern(String nationalNumber,
NumberFormat formattingPattern,
Expand Down
2 changes: 1 addition & 1 deletion pending_code_changes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@

- Decreased the number of invocations of chooseFormattingPatternForNumber in PhoneNumberUtil#formatInOriginalFormat
Loading