Skip to content

Commit 583a91e

Browse files
committed
Analyze new files as modified files
IntelliJ do a lot of file changes on save, leading to an existing file being considered as new by the watcher. So even new files are now analyzed to invalidate potential classes inside.
1 parent 1fe6c1f commit 583a91e

File tree

3 files changed

+25
-21
lines changed

3 files changed

+25
-21
lines changed

src/license/THIRD-PARTY.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# Please fill the missing licenses for dependencies :
1414
#
1515
#
16-
#Fri Nov 24 15:15:14 CET 2017
16+
#Wed Nov 29 15:23:13 CET 2017
1717
classworlds--classworlds--1.1-alpha-2=
1818
commons-collections--commons-collections--3.1=
1919
dom4j--dom4j--1.6.1=

src/main/java/org/seedstack/maven/WatchMojo.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME)
5757
@Execute(phase = LifecyclePhase.PROCESS_CLASSES)
5858
public class WatchMojo extends AbstractExecutableMojo {
59-
public static final int LIVE_RELOAD_PORT = 35729;
59+
private static final int LIVE_RELOAD_PORT = 35729;
6060
private DirectoryWatcher directoryWatcher;
6161
private Thread watcherThread;
6262
private List<String> compileSourceRoots;
@@ -165,9 +165,9 @@ private void refresh(Set<FileEvent> fileEvents) {
165165
Set<File> compiledFilesToRemove = new HashSet<>();
166166
Set<File> compiledFilesToUpdate = new HashSet<>();
167167

168-
boolean newFiles = analyzeEvents(fileEvents, compiledFilesToRemove, compiledFilesToUpdate);
168+
analyzeEvents(fileEvents, compiledFilesToRemove, compiledFilesToUpdate);
169169

170-
if (newFiles || !compiledFilesToRemove.isEmpty() || !compiledFilesToUpdate.isEmpty()) {
170+
if (!compiledFilesToRemove.isEmpty() || !compiledFilesToUpdate.isEmpty()) {
171171
getLog().info("Source changes detected");
172172

173173
try {
@@ -213,9 +213,8 @@ private void refresh(Set<FileEvent> fileEvents) {
213213
}
214214
}
215215

216-
private boolean analyzeEvents(Set<FileEvent> fileEvents, Set<File> compiledFilesToRemove,
216+
private void analyzeEvents(Set<FileEvent> fileEvents, Set<File> compiledFilesToRemove,
217217
Set<File> compiledFilesToUpdate) throws MojoExecutionException {
218-
boolean newFiles = false;
219218
for (FileEvent fileEvent : fileEvents) {
220219
File changedFile = fileEvent.getFile();
221220
if (!changedFile.isDirectory()) {
@@ -226,17 +225,15 @@ private boolean analyzeEvents(Set<FileEvent> fileEvents, Set<File> compiledFiles
226225
if (canonicalChangedFile.startsWith(sourceRootPath + File.separator)
227226
&& canonicalChangedFile.endsWith(".java")) {
228227
if (fileEvent.getKind() == FileEvent.Kind.CREATE) {
229-
if (changedFile.length() > 0) {
230-
// ignore empty files (not relevant for app refresh)
231-
getLog().info("NEW: " + canonicalChangedFile);
232-
newFiles = true;
233-
}
228+
getLog().debug("NEW: " + canonicalChangedFile);
229+
compiledFilesToUpdate.add(resolveCompiledFile(sourceRootPath,
230+
canonicalChangedFile));
234231
} else if (fileEvent.getKind() == FileEvent.Kind.MODIFY) {
235-
getLog().info("MODIFIED: " + canonicalChangedFile);
232+
getLog().debug("MODIFIED: " + canonicalChangedFile);
236233
compiledFilesToUpdate.add(resolveCompiledFile(sourceRootPath,
237234
canonicalChangedFile));
238235
} else if (fileEvent.getKind() == FileEvent.Kind.DELETE) {
239-
getLog().info("DELETED: " + canonicalChangedFile);
236+
getLog().debug("DELETED: " + canonicalChangedFile);
240237
compiledFilesToRemove.add(resolveCompiledFile(sourceRootPath,
241238
canonicalChangedFile));
242239
}
@@ -248,7 +245,6 @@ private boolean analyzeEvents(Set<FileEvent> fileEvents, Set<File> compiledFiles
248245
}
249246
}
250247
}
251-
return newFiles;
252248
}
253249

254250
private File resolveCompiledFile(String sourceRootPath, String changedFilePath) {
@@ -268,7 +264,9 @@ private void removeFiles(Set<File> compiledFilesToRemove) throws MojoExecutionEx
268264
private Set<String> analyzeClasses(Set<File> classFiles) throws MojoExecutionException {
269265
Set<String> classNamesToInvalidate = new HashSet<>();
270266
for (File file : classFiles) {
271-
classNamesToInvalidate.addAll(collectClassNames(file));
267+
if (file.exists() && file.length() > 0) {
268+
classNamesToInvalidate.addAll(collectClassNames(file));
269+
}
272270
}
273271
return classNamesToInvalidate;
274272
}

src/main/java/org/seedstack/maven/watcher/DirectoryWatcher.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,21 @@ public void run() {
131131
File file = path.toFile();
132132

133133
if (!file.isDirectory()) {
134-
if (event.kind() == ENTRY_CREATE && isReallyCreatedOrModified(file)) {
134+
if (event.kind() == ENTRY_CREATE) {
135135
log.debug("New file: " + path);
136-
fileEvents.add(new FileEvent(FileEvent.Kind.CREATE, file));
137-
} else if (event.kind() == ENTRY_MODIFY && isReallyCreatedOrModified(file)) {
136+
if (isReallyCreatedOrModified(file)) {
137+
fileEvents.add(new FileEvent(FileEvent.Kind.CREATE, file));
138+
}
139+
} else if (event.kind() == ENTRY_MODIFY) {
138140
log.debug("File modified: " + path);
139-
fileEvents.add(new FileEvent(FileEvent.Kind.MODIFY, file));
140-
} else if (event.kind() == ENTRY_DELETE && isReallyDeleted(file)) {
141+
if (isReallyCreatedOrModified(file)) {
142+
fileEvents.add(new FileEvent(FileEvent.Kind.MODIFY, file));
143+
}
144+
} else if (event.kind() == ENTRY_DELETE) {
141145
log.debug("File deleted: " + path);
142-
fileEvents.add(new FileEvent(FileEvent.Kind.DELETE, file));
146+
if (isReallyDeleted(file)) {
147+
fileEvents.add(new FileEvent(FileEvent.Kind.DELETE, file));
148+
}
143149
}
144150
}
145151

0 commit comments

Comments
 (0)