diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java index d6685573880f..595e8b09b3d3 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java @@ -60,6 +60,7 @@ import com.intellij.util.PatchedSoftReference; import com.intellij.util.PatchedWeakReference; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.indexing.FileBasedIndex; +import com.intellij.util.indexing.IndexingStamp; import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -605,7 +606,8 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF final IElementType contentElementType = getContentElementType(); if (!(contentElementType instanceof IStubFileElementType)) { final FileViewProvider viewProvider = getViewProvider(); - throw new AssertionError("A stub in a non-stub file '" + vFile +"'; isValid()=" + vFile.isValid() + + throw new AssertionError("A stub in a non-stub file '" + vFile +"'; isValid()=" + vFile.isValid() + + "; IndexStamp="+ IndexingStamp.getIndexStamp(vFile, StubUpdatingIndex.INDEX_ID) + "; Type: " + contentElementType + "; " + "Psi roots: " + viewProvider.getAllFiles() + "; " + " StubUpdatingIndex.canHaveStub(vFile)=" + StubUpdatingIndex.canHaveStub(vFile) + diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java index 7fe967d8856b..1b129166cf66 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java @@ -1573,16 +1573,12 @@ public class FileBasedIndex implements ApplicationComponent { ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { for (ID indexId : affectedIndices) { - IndexingStamp.update(file, indexId, -1L); + IndexingStamp.update(file, indexId, -2L); } } }); - iterateIndexableFiles(file, new Processor() { - public boolean process(final VirtualFile file) { - scheduleForUpdate(file); - return true; - } - }); + // the file is for sure not a dir and it was previously indexed by at least one index + scheduleForUpdate(file); } else { final InvalidationTask invalidator = new InvalidationTask(file) { @@ -1631,7 +1627,9 @@ public class FileBasedIndex implements ApplicationComponent { public void ensureAllInvalidateTasksCompleted() { final int size = getNumberOfPendingInvalidations(); - if (size == 0) return; + if (size == 0) { + return; + } final ProgressIndicator current = ProgressManager.getInstance().getProgressIndicator(); final ProgressIndicator indicator = current != null ? current : new EmptyProgressIndicator(); indicator.setText(""); diff --git a/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java b/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java index 72eec3aacfe7..bf87bb3ea348 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java @@ -142,11 +142,7 @@ public class IndexingStamp { public static boolean isFileIndexed(VirtualFile file, ID indexName, final long indexCreationStamp) { try { - if (file instanceof NewVirtualFile && file.isValid()) { - synchronized (myTimestampsCache) { - return myTimestampsCache.get(file).get(indexName) == indexCreationStamp; - } - } + return getIndexStamp(file, indexName) == indexCreationStamp; } catch (RuntimeException e) { final Throwable cause = e.getCause(); @@ -158,6 +154,15 @@ public class IndexingStamp { return false; } + public static long getIndexStamp(VirtualFile file, ID indexName) { + if (file instanceof NewVirtualFile && file.isValid()) { + synchronized (myTimestampsCache) { + return myTimestampsCache.get(file).get(indexName); + } + } + return 0L; + } + public static void update(final VirtualFile file, final ID indexName, final long indexCreationStamp) { try { if (file instanceof NewVirtualFile && file.isValid()) {