build/BuildMetadataFromXml.php
private static function setPossibleLengths($lengths, $localOnlyLengths, PhoneNumberDesc $parentDesc = null, PhoneNumberDesc $desc)
    {
        // We clear these fields since the metadata tends to inherit from the parent element for other
        // fields (via a mergeFrom).
        $desc->clearPossibleLength();
        $desc->clearPossibleLengthLocalOnly();

        // Only add the lengths to this sub-type if they aren't exactly the same as the possible
        // lengths in the general desc (for metadata size reasons).
        if ($parentDesc === null || !self::arePossibleLengthsEqual($lengths, $parentDesc)) {
            foreach ($lengths as $length) {
                if ($parentDesc === null || in_array($length, $parentDesc->getPossibleLength())) {
                    $desc->addPossibleLength($length);
                } else {
                    // We shouldn't have possible lengths defined in a child element that are not covered by
                    // the general description. We check this here even though the general description is
                    // derived from child elements because it is only derived from a subset, and we need to
                    // ensure *all* child elements have a valid possible length.
                    throw new \RuntimeException("Out-of-range possible length found ({$length}), parent lengths " . implode(',', $parentDesc->getPossibleLength()));
                }
            }
        }
        // We check that the local-only length isn't also a normal possible length (only relevant for
        // the general-desc, since within elements such as fixed-line we would throw an exception if we
        // saw this) before adding it to the collection of possible local-only lengths.
        foreach ($localOnlyLengths as $length) {
            if (!in_array($length, $lengths)) {
                // We check it is covered by either of the possible length sets of the parent
                // PhoneNumberDesc, because for example 7 might be a valid localOnly length for mobile, but
                // a valid national length for fixedLine, so the generalDesc would have the 7 removed from
                // localOnly.
                if ($parentDesc === null
                    || in_array($length, $parentDesc->getPossibleLength())
                    || in_array($length, $parentDesc->getPossibleLengthLocalOnly())
                ) {
                    $desc->addPossibleLengthLocalOnly($length);
                } else {
                    throw new \RuntimeException("Out-of-range local-only possible length found ({$length}), parent length {$parentDesc->getPossibleLengthLocalOnly()}");
                }
            }
        }
    }
private static function setPossibleLengths($lengths, $localOnlyLengths, PhoneNumberDesc $parentDesc = null, PhoneNumberDesc $desc)
    {
        // We clear these fields since the metadata tends to inherit from the parent element for other
        // fields (via a mergeFrom).
        $desc->clearPossibleLength();
        $desc->clearPossibleLengthLocalOnly();

        // Only add the lengths to this sub-type if they aren't exactly the same as the possible
        // lengths in the general desc (for metadata size reasons).
        if ($parentDesc === null || !self::arePossibleLengthsEqual($lengths, $parentDesc)) {
            foreach ($lengths as $length) {
                if ($parentDesc === null || in_array($length, $parentDesc->getPossibleLength())) {
                    $desc->addPossibleLength($length);
                } else {
                    // We shouldn't have possible lengths defined in a child element that are not covered by
                    // the general description. We check this here even though the general description is
                    // derived from child elements because it is only derived from a subset, and we need to
                    // ensure *all* child elements have a valid possible length.
                    throw new \RuntimeException("Out-of-range possible length found ({$length}), parent lengths " . implode(',', $parentDesc->getPossibleLength()));
                }
            }
        }
        // We check that the local-only length isn't also a normal possible length (only relevant for
        // the general-desc, since within elements such as fixed-line we would throw an exception if we
        // saw this) before adding it to the collection of possible local-only lengths.
        foreach ($localOnlyLengths as $length) {
            if (!in_array($length, $lengths)) {
                // We check it is covered by either of the possible length sets of the parent
                // PhoneNumberDesc, because for example 7 might be a valid localOnly length for mobile, but
                // a valid national length for fixedLine, so the generalDesc would have the 7 removed from
                // localOnly.
                if ($parentDesc === null
                    || in_array($length, $parentDesc->getPossibleLength())
                    || in_array($length, $parentDesc->getPossibleLengthLocalOnly())
                ) {
                    $desc->addPossibleLengthLocalOnly($length);
                } else {
                    throw new \RuntimeException("Out-of-range local-only possible length found ({$length}), parent length {$parentDesc->getPossibleLengthLocalOnly()}");
                }
            }
        }
    }
private static function setPossibleLengths ( $ lengths , $ localOnlyLengths , PhoneNumberDesc $ parentDesc = null , PhoneNumberDesc $ desc ) { // We clear these fields since the metadata tends to inherit from the parent element for other // fields (via a mergeFrom). $ desc -> clearPossibleLength ( ) ; $ desc -> clearPossibleLengthLocalOnly ( ) ; // Only add the lengths to this sub-type if they aren't exactly the same as the possible // lengths in the general desc (for metadata size reasons). if ( $ parentDesc === null || ! self :: arePossibleLengthsEqual ( $ lengths , $ parentDesc ) ) { foreach ( $ lengths as $ length ) { if ( $ parentDesc === null || in_array ( $ length , $ parentDesc -> getPossibleLength ( ) ) ) { $ desc -> addPossibleLength ( $ length ) ; } else { // We shouldn't have possible lengths defined in a child element that are not covered by // the general description. We check this here even though the general description is // derived from child elements because it is only derived from a subset, and we need to // ensure *all* child elements have a valid possible length. throw new \ RuntimeException ( "Out-of-range possible length found ({$length}), parent lengths " . implode ( ',' , $ parentDesc -> getPossibleLength ( ) ) ) ; } } } // We check that the local-only length isn't also a normal possible length (only relevant for // the general-desc, since within elements such as fixed-line we would throw an exception if we // saw this) before adding it to the collection of possible local-only lengths. foreach ( $ localOnlyLengths as $ length ) { if ( ! in_array ( $ length , $ lengths ) ) { // We check it is covered by either of the possible length sets of the parent // PhoneNumberDesc, because for example 7 might be a valid localOnly length for mobile, but // a valid national length for fixedLine, so the generalDesc would have the 7 removed from // localOnly. if ( $ parentDesc === null || in_array ( $ length , $ parentDesc -> getPossibleLength ( ) ) || in_array ( $ length , $ parentDesc -> getPossibleLengthLocalOnly ( ) ) ) { $ desc -> addPossibleLengthLocalOnly ( $ length ) ; } else { throw new \ RuntimeException ( "Out-of-range local-only possible length found ({$length}), parent length {$parentDesc->getPossibleLengthLocalOnly()}" ) ; } } } }
Sets the possible length fields in the metadata from the sets of data passed in. Checks that
the length is covered by the "parent" phone number description element if one is present, and
if the lengths are exactly the same as this, they are not filled in for efficiency reasons.

@param array $lengths
@param array $localOnlyLengths
@param PhoneNumberDesc $parentDesc
@param PhoneNumberDesc $desc
Sets the possible length fields in the metadata from the sets of data passed in . Checks that the length is covered by the parent phone number description element if one is present and if the lengths are exactly the same as this they are not filled in for efficiency reasons .