diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java index 29844fb0e1c5..e0772bc3e4fc 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java @@ -69,6 +69,10 @@ public abstract class VirtualFileSystemEntry extends NewVirtualFile { private volatile VirtualDirectoryImpl myParent; private volatile int myFlags; private volatile int myId; + + static { + assert (~ALL_FLAGS_MASK) == LocalTimeCounter.TIME_MASK; + } public VirtualFileSystemEntry(int nameId, VirtualDirectoryImpl parent, int id, @PersistentFS.Attributes int attributes) { myParent = parent; diff --git a/platform/util/src/com/intellij/util/LocalTimeCounter.java b/platform/util/src/com/intellij/util/LocalTimeCounter.java index 1cfbdb7e4df0..41b09b723197 100644 --- a/platform/util/src/com/intellij/util/LocalTimeCounter.java +++ b/platform/util/src/com/intellij/util/LocalTimeCounter.java @@ -18,12 +18,14 @@ package com.intellij.util; import java.util.concurrent.atomic.AtomicLong; public class LocalTimeCounter { + /** + * VirtualFile.modificationStamp is kept modulo this mask, and is compared with other stamps. Let's avoid accidental stamp inequalities + * by normalizing all of them. + */ + public static final int TIME_MASK = 0x00ffffff; private static final AtomicLong ourCurrentTime = new AtomicLong(); - private LocalTimeCounter() { - } - public static long currentTime() { - return ourCurrentTime.incrementAndGet(); + return TIME_MASK & (int)ourCurrentTime.incrementAndGet(); } } \ No newline at end of file