28
28
29
29
import java .io .BufferedReader ;
30
30
import java .io .IOException ;
31
+ import java .nio .file .attribute .FileTime ;
31
32
import java .time .Duration ;
33
+ import java .time .Instant ;
32
34
import java .util .HashSet ;
33
35
import java .util .List ;
34
36
import java .util .Map ;
35
37
import java .util .Map .Entry ;
36
38
import java .util .Set ;
37
39
import java .util .concurrent .ConcurrentHashMap ;
38
40
import java .util .concurrent .TimeUnit ;
39
- import java .util .concurrent .atomic .AtomicLong ;
40
41
import java .util .regex .Pattern ;
41
42
import java .util .stream .Collectors ;
42
43
@@ -120,9 +121,15 @@ public void watchFile(ISourceLocation projectRoot, ISourceLocation sourceFile) t
120
121
if (!isAlive () && !isInterrupted ()) {
121
122
start ();
122
123
}
123
- URIResolverRegistry .getInstance ().watch (sourceFile , false , ignored ->
124
- changedRoots .put (projectRoot , System .nanoTime ())
125
- );
124
+ reg .watch (sourceFile , false , ignored -> {
125
+ long lastModified = Long .MIN_VALUE ;
126
+ try {
127
+ lastModified = reg .lastModified (sourceFile );
128
+ } catch (IOException e ) {
129
+ logger .debug ("Cannot get last modified time of {}" , sourceFile );
130
+ }
131
+ changedRoots .put (projectRoot , lastModified );
132
+ });
126
133
}
127
134
128
135
private static final long UPDATE_DELAY = TimeUnit .SECONDS .toNanos (5 );
@@ -138,7 +145,7 @@ public void run() {
138
145
}
139
146
140
147
List <ISourceLocation > stabilizedRoots = changedRoots .entrySet ().stream ()
141
- .filter (e -> System . nanoTime ( ) - e .getValue () >= UPDATE_DELAY )
148
+ .filter (e -> FileTime . from ( Instant . now ()). to ( TimeUnit . NANOSECONDS ) - e .getValue () >= UPDATE_DELAY )
142
149
.map (Entry ::getKey )
143
150
.collect (Collectors .toList ());
144
151
0 commit comments