470 if (!key.equals(realKey)) { 471 map.put(realKey, value); 472 } 473 } 474 realKeys[index] = realKey; 475 eraNames[index++] = value; 476 } 477 for (int i = 0; i < eraNames.length; i++) { 478 if (eraNames[i] == null) { 479 map.put(realKeys[i], null); 480 } 481 } 482 } 483 484 private void handleDateTimeFormatPatterns(String[] patternKeys, Map<String, Object> myMap, Map<String, Object> parentsMap, 485 CalendarType calendarType, String name) { 486 String calendarPrefix = calendarType.keyElementName(); 487 for (String k : patternKeys) { 488 if (myMap.containsKey(calendarPrefix + k)) { 489 int len = patternKeys.length; 490 List<String> rawPatterns = new ArrayList<>(); 491 List<String> patterns = new ArrayList<>(); 492 for (int i = 0; i < len; i++) { 493 String key = calendarPrefix + patternKeys[i]; 494 String pattern = (String) myMap.remove(key); 495 if (pattern == null) { 496 pattern = (String) parentsMap.remove(key); 497 } 498 if (pattern != null) { 499 rawPatterns.add(i, pattern); 500 patterns.add(i, translateDateFormatLetters(calendarType, pattern)); 501 } 502 } 503 if (patterns.isEmpty()) { 504 return; 505 } 506 String key = calendarPrefix + name; 507 if (!rawPatterns.equals(patterns)) { 508 myMap.put("cldr." + key, rawPatterns.toArray(new String[len])); 509 } 510 myMap.put(key, patterns.toArray(new String[len])); 511 break; 512 } 513 } 514 } 515 516 private String translateDateFormatLetters(CalendarType calendarType, String cldrFormat) { 517 String pattern = cldrFormat; 518 int length = pattern.length(); 519 boolean inQuote = false; 520 StringBuilder jrePattern = new StringBuilder(length); 521 int count = 0; 522 char lastLetter = 0; 523 524 for (int i = 0; i < length; i++) { 525 char c = pattern.charAt(i); 526 527 if (c == '\'') { 528 // '' is treated as a single quote regardless of being | 470 if (!key.equals(realKey)) { 471 map.put(realKey, value); 472 } 473 } 474 realKeys[index] = realKey; 475 eraNames[index++] = value; 476 } 477 for (int i = 0; i < eraNames.length; i++) { 478 if (eraNames[i] == null) { 479 map.put(realKeys[i], null); 480 } 481 } 482 } 483 484 private void handleDateTimeFormatPatterns(String[] patternKeys, Map<String, Object> myMap, Map<String, Object> parentsMap, 485 CalendarType calendarType, String name) { 486 String calendarPrefix = calendarType.keyElementName(); 487 for (String k : patternKeys) { 488 if (myMap.containsKey(calendarPrefix + k)) { 489 int len = patternKeys.length; 490 List<String> rawPatterns = new ArrayList<>(len); 491 List<String> patterns = new ArrayList<>(len); 492 for (int i = 0; i < len; i++) { 493 String key = calendarPrefix + patternKeys[i]; 494 String pattern = (String) myMap.remove(key); 495 if (pattern == null) { 496 pattern = (String) parentsMap.remove(key); 497 } 498 rawPatterns.add(i, pattern); 499 if (pattern != null) { 500 patterns.add(i, translateDateFormatLetters(calendarType, pattern)); 501 } else { 502 patterns.add(i, null); 503 } 504 } 505 // If patterns is empty or has any nulls, discard patterns. 506 if (patterns.isEmpty()) { 507 return; 508 } 509 for (String p : patterns) { 510 if (p == null) { 511 return; 512 } 513 } 514 String key = calendarPrefix + name; 515 if (!rawPatterns.equals(patterns)) { 516 myMap.put("java.time." + key, rawPatterns.toArray(new String[len])); 517 } 518 myMap.put(key, patterns.toArray(new String[len])); 519 break; 520 } 521 } 522 } 523 524 private String translateDateFormatLetters(CalendarType calendarType, String cldrFormat) { 525 String pattern = cldrFormat; 526 int length = pattern.length(); 527 boolean inQuote = false; 528 StringBuilder jrePattern = new StringBuilder(length); 529 int count = 0; 530 char lastLetter = 0; 531 532 for (int i = 0; i < length; i++) { 533 char c = pattern.charAt(i); 534 535 if (c == '\'') { 536 // '' is treated as a single quote regardless of being |