in src/main/java/org/apache/commons/io/monitor/FileAlterationObserver.java [350:374]
private void checkAndFire(final FileEntry parentEntry, final FileEntry[] previousEntries, final File[] currentEntries) {
int c = 0;
final FileEntry[] actualEntries = currentEntries.length > 0 ? new FileEntry[currentEntries.length] : FileEntry.EMPTY_FILE_ENTRY_ARRAY;
for (final FileEntry previousEntry : previousEntries) {
while (c < currentEntries.length && comparator.compare(previousEntry.getFile(), currentEntries[c]) > 0) {
actualEntries[c] = createFileEntry(parentEntry, currentEntries[c]);
fireOnCreate(actualEntries[c]);
c++;
}
if (c < currentEntries.length && comparator.compare(previousEntry.getFile(), currentEntries[c]) == 0) {
fireOnChange(previousEntry, currentEntries[c]);
checkAndFire(previousEntry, previousEntry.getChildren(), listFiles(currentEntries[c]));
actualEntries[c] = previousEntry;
c++;
} else {
checkAndFire(previousEntry, previousEntry.getChildren(), FileUtils.EMPTY_FILE_ARRAY);
fireOnDelete(previousEntry);
}
}
for (; c < currentEntries.length; c++) {
actualEntries[c] = createFileEntry(parentEntry, currentEntries[c]);
fireOnCreate(actualEntries[c]);
}
parentEntry.setChildren(actualEntries);
}