convertAllStrings method

Future<ConversionResult> convertAllStrings(
  1. List<NonLocalizedString> nonLocalizedStrings
)

Convert all non-localized strings to AppLocalizations calls

Implementation

Future<ConversionResult> convertAllStrings(
    List<NonLocalizedString> nonLocalizedStrings) async {
  if (verbose) {
    print('🔄 Starting automatic code conversion...');
    if (dryRun) {
      print('🔍 DRY RUN MODE - No files will be modified');
    }
  }

  final conversions = <CodeConversion>[];
  final failedConversions = <String>[];
  final filesModified = <String>{};

  // Group strings by file for efficient processing
  final stringsByFile = <String, List<NonLocalizedString>>{};
  for (final string in nonLocalizedStrings) {
    stringsByFile.putIfAbsent(string.filePath, () => []).add(string);
  }

  for (final entry in stringsByFile.entries) {
    final filePath = entry.key;
    final strings = entry.value;

    try {
      final result = await _convertFile(filePath, strings);
      conversions.addAll(result.conversions);
      if (result.conversions.isNotEmpty) {
        filesModified.add(filePath);
      }
    } catch (e) {
      failedConversions.add('$filePath: $e');
      if (verbose) {
        print('❌ Failed to convert $filePath: $e');
      }
    }
  }

  final result = ConversionResult(
    conversions: conversions,
    failedConversions: failedConversions,
    filesModified: filesModified.toList(),
    totalStringsProcessed: nonLocalizedStrings.length,
  );

  if (verbose) {
    print('✅ Code conversion completed:');
    print('   - Files modified: ${filesModified.length}');
    print('   - Strings converted: ${conversions.length}');
    print('   - Failed conversions: ${failedConversions.length}');
  }

  return result;
}