@@ -40,6 +40,7 @@ public class DirectoryWatcher extends Thread {
4040 private List <FileChangeListener > listeners = new ArrayList <FileChangeListener >();
4141
4242 private Map <File , Long > lastModifiedMap = new ConcurrentHashMap <File , Long >();
43+ private Map <File , Collection <String >> directoryToExtensionsMap = new ConcurrentHashMap <File , Collection <String >>();
4344 private Map <File , Long > directoryWatch = new ConcurrentHashMap <File , Long >();
4445 private boolean active = true ;
4546 private long sleepTime = 3000 ;
@@ -91,9 +92,20 @@ public void addWatchFile(File fileToWatch) {
9192 * @param fileExtensions The extensions
9293 */
9394 public void addWatchDirectory (File dir , List <String > fileExtensions ) {
95+ trackDirectoryExtensions (dir , fileExtensions );
9496 cacheFilesForDirectory (dir , fileExtensions , false );
9597 }
9698
99+ protected void trackDirectoryExtensions (File dir , List <String > fileExtensions ) {
100+ Collection <String > existingExtensions = directoryToExtensionsMap .get (dir );
101+ if (existingExtensions == null ) {
102+ directoryToExtensionsMap .put (dir , fileExtensions );
103+ }
104+ else {
105+ existingExtensions .addAll (fileExtensions );
106+ }
107+ }
108+
97109 /**
98110 * Adds a directory to watch for the given file and extensions.
99111 *
@@ -109,6 +121,7 @@ public void addWatchDirectory(File dir, String extension) {
109121 else {
110122 fileExtensions .add (extension );
111123 }
124+ trackDirectoryExtensions (dir , fileExtensions );
112125 cacheFilesForDirectory (dir , fileExtensions , false );
113126 }
114127
@@ -168,6 +181,10 @@ private void checkForNewFiles() {
168181 final Long currentTimestamp = directoryWatch .get (directory );
169182
170183 if (currentTimestamp < directory .lastModified ()) {
184+ Collection <String > extensions = directoryToExtensionsMap .get (directory );
185+ if (extensions == null ) {
186+ extensions = this .extensions ;
187+ }
171188 cacheFilesForDirectory (directory , extensions , true );
172189 }
173190 }
0 commit comments