in src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java [164:191]
public void onChange(@NotNull List<ResourceChange> list) {
for (final ResourceChange change : list) {
Runnable eventTask = () -> {
String path = change.getPath();
writeLock.lock();
try {
final boolean removed = internalMap.remove(path) != null;
logger.debug("Detected script change for {} - removed entry from the cache.", path);
if ( !removed && change.getType() == ChangeType.REMOVED ) {
final String prefix = path + "/";
final Set<String> removal = new HashSet<>();
for(final Map.Entry<String, SoftReference<CachedScript>> entry : internalMap.entrySet()) {
if ( entry.getKey().startsWith(prefix) ) {
removal.add(entry.getKey());
}
}
for(final String key : removal) {
internalMap.remove(key);
logger.debug("Detected removal for {} - removed entry {} from the cache.", path, key);
}
}
} finally {
writeLock.unlock();
}
};
threadPool.execute(eventTask);
}
}