decodeNumberFormat static method

HWNumberFormat? decodeNumberFormat(
  1. DartObject? obj, {
  2. String? defaultLocale,
  3. String? resourcePrefix,
})

Decodes an HWNumberFormat, or null when obj is absent.

A string field the analyzer cannot evaluate decodes as empty so the validator reports it rather than the format silently changing.

Implementation

static HWNumberFormat? decodeNumberFormat(
  DartObject? obj, {
  String? defaultLocale,
  String? resourcePrefix,
}) {
  if (obj == null || obj.isNull) return null;

  final typeName = obj.type?.element?.name;
  switch (typeName) {
    case 'HWDecimalNumberFormat':
      return HWNumberFormat.decimal(
        minimumFractionDigits:
            getField(obj, 'minimumFractionDigits')?.toIntValue(),
        maximumFractionDigits:
            getField(obj, 'maximumFractionDigits')?.toIntValue(),
        useGrouping: getField(obj, 'useGrouping')?.toBoolValue() ?? true,
      );
    case 'HWPercentNumberFormat':
      return HWNumberFormat.percent(
        minimumFractionDigits:
            getField(obj, 'minimumFractionDigits')?.toIntValue(),
        maximumFractionDigits:
            getField(obj, 'maximumFractionDigits')?.toIntValue(),
      );
    case 'HWCurrencyNumberFormat':
      final currency = decodeCurrency(
        getField(obj, 'currency'),
        defaultLocale: defaultLocale,
        resourcePrefix: resourcePrefix,
      );
      if (currency == null) {
        // coverage:ignore-start
        throw GeneratorError('HWNumberFormat.currency has no currency');
        // coverage:ignore-end
      }
      return HWNumberFormat.currency(
        currency: currency,
        decimalDigits: getField(obj, 'decimalDigits')?.toIntValue(),
      );
    case 'HWCompactNumberFormat':
      return const HWNumberFormat.compact();
    case 'HWPatternNumberFormat':
      return HWNumberFormat.pattern(
        getField(obj, 'pattern')?.toStringValue() ?? '',
      );
  }
  throw GeneratorError('Unknown number format type: $typeName');
}