public void onChange()

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);
        }
    }