Source:
public static StringResourceData parse(@NotNull LocalResourceRepository repository) { Collection<String> keyCollection = repository.getItemsOfType(ResourceType.STRING); List<String> keys = Lists.newArrayList(keyCollection); Collections.sort(keys); final Set<String> untranslatableKeys = Sets.newHashSet(); final Set<Locale> localeSet = Sets.newTreeSet(new Comparator<Locale>() { @Override public int compare(Locale o1, Locale o2) { return LocaleMenuAction.getLocaleLabel(o1, true).compareTo(LocaleMenuAction.getLocaleLabel(o2, true)); } }); Map<String,String> defaultValuesMap = Maps.newHashMap(); Map<Pair<String,Locale>, String> translationsMap = Maps.newHashMap(); for (String key : keys) { List<ResourceItem> items = repository.getResourceItem(ResourceType.STRING, key); if (items == null) { continue; } for (ResourceItem item : items) { if (item instanceof PsiResourceItem) { XmlTag tag = ((PsiResourceItem) item).getTag(); if (tag != null && String.valueOf(tag.getAttributeValue("translatable")).equals("false")) { untranslatableKeys.add(key); } } FolderConfiguration config = item.getConfiguration(); LanguageQualifier languageQualifier = config.getLanguageQualifier(); if (languageQualifier == null) { ResourceValue value = item.getResourceValue(false); defaultValuesMap.put(key, value == null ? "" : value.getRawXmlValue()); } else { RegionQualifier regionQualifier = config.getRegionQualifier(); Locale locale = regionQualifier == null ? Locale.create(languageQualifier) : Locale.create(languageQualifier, regionQualifier); localeSet.add(locale); ResourceValue value = item.getResourceValue(false); translationsMap.put(Pair.create(key, locale), value == null ? "" : value.getRawXmlValue()); } } } return new StringResourceData( keys, Lists.newArrayList(untranslatableKeys), Lists.newArrayList(localeSet), defaultValuesMap, translationsMap); }

Target:
public static StringResourceData parse(@NotNull LocalResourceRepository repository) { Collection<String> keyCollection = repository.getItemsOfType(ResourceType.STRING); List<String> keys = Lists.newArrayList(keyCollection); Collections.sort(keys); final Set<String> untranslatableKeys = Sets.newHashSet(); final Set<Locale> localeSet = Sets.newTreeSet(new Comparator<Locale>() { @Override public int compare(Locale o1, Locale o2) { return LocaleMenuAction.getLocaleLabel(o1, true).compareTo(LocaleMenuAction.getLocaleLabel(o2, true)); } }); Map<String,String> defaultValuesMap = Maps.newHashMap(); Map<Pair<String,Locale>, String> translationsMap = Maps.newHashMap(); for (String key : keys) { List<ResourceItem> items = repository.getResourceItem(ResourceType.STRING, key); if (items == null) { continue; } for (ResourceItem item : items) { if (item instanceof PsiResourceItem) { XmlTag tag = ((PsiResourceItem) item).getTag(); if (tag != null && String.valueOf(tag.getAttributeValue((SdkConstants.ATTR_TRANSLATABLE))).equals(SdkConstants.VALUE_FALSE)) { untranslatableKeys.add(key); } } FolderConfiguration config = item.getConfiguration(); LanguageQualifier languageQualifier = config.getLanguageQualifier(); if (languageQualifier == null) { ResourceValue value = item.getResourceValue(false); defaultValuesMap.put(key, value == null ? "" : value.getRawXmlValue()); } else { RegionQualifier regionQualifier = config.getRegionQualifier(); Locale locale = regionQualifier == null ? Locale.create(languageQualifier) : Locale.create(languageQualifier, regionQualifier); localeSet.add(locale); ResourceValue value = item.getResourceValue(false); translationsMap.put(Pair.create(key, locale), value == null ? "" : value.getRawXmlValue()); } } } return new StringResourceData( keys, Lists.newArrayList(untranslatableKeys), Lists.newArrayList(localeSet), defaultValuesMap, translationsMap); }