}
Object[] array = innerMap.get(iFieldType);
if (array == null) {
validValues = new ConcurrentHashMap<String, Boolean>(32); // use map as no concurrent Set
MutableDateTime dt = new MutableDateTime(0L, DateTimeZone.UTC);
Property property = dt.property(iFieldType);
int min = property.getMinimumValueOverall();
int max = property.getMaximumValueOverall();
if (max - min > 32) { // protect against invalid fields
return ~position;
}
maxLength = property.getMaximumTextLength(locale);
for (int i = min; i <= max; i++) {
property.set(i);
validValues.put(property.getAsShortText(locale), Boolean.TRUE);
validValues.put(property.getAsShortText(locale).toLowerCase(locale), Boolean.TRUE);
validValues.put(property.getAsShortText(locale).toUpperCase(locale), Boolean.TRUE);
validValues.put(property.getAsText(locale), Boolean.TRUE);
validValues.put(property.getAsText(locale).toLowerCase(locale), Boolean.TRUE);
validValues.put(property.getAsText(locale).toUpperCase(locale), Boolean.TRUE);
}
if ("en".equals(locale.getLanguage()) && iFieldType == DateTimeFieldType.era()) {
// hack to support for parsing "BCE" and "CE" if the language is English
validValues.put("BCE", Boolean.TRUE);
validValues.put("bce", Boolean.TRUE);