Skip to content

Commit c559ec4

Browse files
andreibastunjhoeller
authored andcommitted
Refactor ReloadableResourceBundleMessageSource
This change allows subclasses to reuse collecting and merging algorithm when overriding getMergedProperties method.
1 parent 341ac76 commit c559ec4

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

Diff for: spring-context/src/main/java/org/springframework/context/support/ReloadableResourceBundleMessageSource.java

+24-11
Original file line numberDiff line numberDiff line change
@@ -257,29 +257,42 @@ protected PropertiesHolder getMergedProperties(Locale locale) {
257257
return mergedHolder;
258258
}
259259

260-
Properties mergedProps = newProperties();
261-
long latestTimestamp = -1;
260+
List<PropertiesHolder> holders = collectPropertiesToMerge(locale);
261+
262+
mergedHolder = merge(holders);
263+
PropertiesHolder existing = this.cachedMergedProperties.putIfAbsent(locale, mergedHolder);
264+
if (existing != null) {
265+
mergedHolder = existing;
266+
}
267+
return mergedHolder;
268+
}
269+
270+
protected List<PropertiesHolder> collectPropertiesToMerge(Locale locale) {
262271
String[] basenames = StringUtils.toStringArray(getBasenameSet());
272+
List<PropertiesHolder> holders = new ArrayList<>(basenames.length);
263273
for (int i = basenames.length - 1; i >= 0; i--) {
264274
List<String> filenames = calculateAllFilenames(basenames[i], locale);
265275
for (int j = filenames.size() - 1; j >= 0; j--) {
266276
String filename = filenames.get(j);
267277
PropertiesHolder propHolder = getProperties(filename);
268278
if (propHolder.getProperties() != null) {
269-
mergedProps.putAll(propHolder.getProperties());
270-
if (propHolder.getFileTimestamp() > latestTimestamp) {
271-
latestTimestamp = propHolder.getFileTimestamp();
272-
}
279+
holders.add(propHolder);
273280
}
274281
}
275282
}
283+
return holders;
284+
}
276285

277-
mergedHolder = new PropertiesHolder(mergedProps, latestTimestamp);
278-
PropertiesHolder existing = this.cachedMergedProperties.putIfAbsent(locale, mergedHolder);
279-
if (existing != null) {
280-
mergedHolder = existing;
286+
protected PropertiesHolder merge(List<PropertiesHolder> holders) {
287+
Properties mergedProps = newProperties();
288+
long latestTimestamp = -1;
289+
for (PropertiesHolder holder : holders) {
290+
mergedProps.putAll(holder.getProperties());
291+
if (holder.getFileTimestamp() > latestTimestamp) {
292+
latestTimestamp = holder.getFileTimestamp();
293+
}
281294
}
282-
return mergedHolder;
295+
return new PropertiesHolder(mergedProps, latestTimestamp);
283296
}
284297

285298
/**

0 commit comments

Comments
 (0)