Esempio n. 1
0
  public static void flushCache(@Nullable VirtualFile finishedFile) {
    if (finishedFile == null || !myFinishedFiles.offer(finishedFile)) {
      VirtualFile[] files = null;
      synchronized (myFinishedFiles) {
        int size = myFinishedFiles.size();
        if ((finishedFile == null && size > 0) || size == CAPACITY) {
          files = myFinishedFiles.toArray(new VirtualFile[size]);
          myFinishedFiles.clear();
        }
      }

      if (files != null) {
        for (VirtualFile file : files) {
          synchronized (getStripedLock(file)) {
            Timestamps timestamp = myTimestampsCache.remove(file);
            if (timestamp == null) continue;
            try {
              if (timestamp.isDirty() && file.isValid()) {
                final DataOutputStream sink = Timestamps.PERSISTENCE.writeAttribute(file);
                timestamp.writeToStream(sink);
                sink.close();
              }
            } catch (IOException e) {
              throw new RuntimeException(e);
            }
          }
        }
      }
      if (finishedFile != null) myFinishedFiles.offer(finishedFile);
    }
  }
Esempio n. 2
0
 @Override
 protected void onDropFromCache(final VirtualFile key, final Timestamps value) {
   try {
     if (value.isDirty()) {
       final DataOutputStream sink = Timestamps.PERSISTENCE.writeAttribute(key);
       value.writeToStream(sink);
       sink.close();
     }
   } catch (InvalidVirtualFileAccessException ignored /*ok to ignore it here*/) {
   } catch (IOException e) {
     throw new RuntimeException(e);
   }
 }