in tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MessagesSourceImpl.java [98:175]
public void checkForUpdates()
{
if (tracker != null)
{
final Set<MessagesTrackingInfo> changedResources = tracker.getChangedResourcesInfo();
if (!changedResources.isEmpty() && logger.isInfoEnabled())
{
logger.info("Changed message file(s): {}", changedResources.stream()
.map(MessagesTrackingInfo::getResource)
.map(Resource::toString)
.collect(Collectors.joining(", ")));
}
boolean applicationLevelChange = false;
for (MessagesTrackingInfo info : changedResources)
{
final String className = info.getClassName();
// An application-level file was changed, so we need to invalidate everything.
if (className == null || !multipleClassLoaders)
{
invalidate();
applicationLevelChange = true;
break;
}
else
{
final Iterator<Entry<MultiKey, Messages>> messagesByBundleIdAndSelectorIterator =
messagesByBundleIdAndSelector.entrySet().iterator();
while (messagesByBundleIdAndSelectorIterator.hasNext())
{
final Entry<MultiKey, Messages> entry = messagesByBundleIdAndSelectorIterator.next();
if (className.equals(entry.getKey().getValues()[0]))
{
messagesByBundleIdAndSelectorIterator.remove();
}
}
final Iterator<Entry<MultiKey, Map<String, String>>> cookedPropertiesIterator =
cookedProperties.entrySet().iterator();
while (cookedPropertiesIterator.hasNext())
{
final Entry<MultiKey, Map<String, String>> entry = cookedPropertiesIterator.next();
if (className.equals(entry.getKey().getValues()[0]))
{
cookedPropertiesIterator.remove();
}
}
final String resourceFile = info.getResource().getFile();
final Iterator<Entry<Resource, Map<String, String>>> rawPropertiesIterator = rawProperties.entrySet().iterator();
while (rawPropertiesIterator.hasNext())
{
final Entry<Resource, Map<String, String>> entry = rawPropertiesIterator.next();
if (resourceFile.equals(entry.getKey().getFile()))
{
rawPropertiesIterator.remove();
}
}
}
}
if (!changedResources.isEmpty() && !applicationLevelChange)
{
fireInvalidationEvent(changedResources.stream()
.filter(Objects::nonNull)
.map(ClassNameHolder::getClassName)
.filter(Objects::nonNull)
.collect(Collectors.toList()));
}
}
}