Skip to content

Commit 024063d

Browse files
committed
fix for GRAILS-9273 "DirectoryWatcher: files are incorrectly considered "new" if their extension wasn't watched for that directory"
1 parent 745eee5 commit 024063d

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

grails-core/src/main/groovy/org/codehaus/groovy/grails/compiler/DirectoryWatcher.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)