From c2b9a6ecb3a9c03e261e872cb2d3007845b3cdbf Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 29 Nov 2013 13:23:53 +0400 Subject: [PATCH] do not try to merge stubs if version changed: take three --- .../api/indexer/CompilerOutputBaseIndex.java | 2 +- .../testSrc/com/intellij/index/StringIndex.java | 2 +- .../com/intellij/psi/stubs/StubIndexImpl.java | 6 +++--- .../intellij/psi/stubs/StubUpdatingIndex.java | 17 +++++++++++++---- .../util/indexing/FileBasedIndexImpl.java | 4 ++-- .../intellij/util/indexing/IndexingStamp.java | 7 ++++++- .../intellij/util/indexing/MapReduceIndex.java | 6 +++--- .../intellij/util/indexing/UpdatableIndex.java | 3 +-- .../util/xml/stubs/builder/DomStubBuilder.java | 2 +- 9 files changed, 31 insertions(+), 18 deletions(-) diff --git a/java/java-impl/src/com/intellij/compilerOutputIndex/api/indexer/CompilerOutputBaseIndex.java b/java/java-impl/src/com/intellij/compilerOutputIndex/api/indexer/CompilerOutputBaseIndex.java index 6eb9fc8c789d..cf4de2562378 100644 --- a/java/java-impl/src/com/intellij/compilerOutputIndex/api/indexer/CompilerOutputBaseIndex.java +++ b/java/java-impl/src/com/intellij/compilerOutputIndex/api/indexer/CompilerOutputBaseIndex.java @@ -149,7 +149,7 @@ public abstract class CompilerOutputBaseIndex { } public final void update(final int id, final ClassNode inputData) { - final Boolean result = myIndex.update(id, inputData, true).compute(); + final Boolean result = myIndex.update(id, inputData).compute(); if (result == Boolean.FALSE) throw new RuntimeException(); } diff --git a/java/java-tests/testSrc/com/intellij/index/StringIndex.java b/java/java-tests/testSrc/com/intellij/index/StringIndex.java index cc9e7001a446..a12f58fbf137 100644 --- a/java/java-tests/testSrc/com/intellij/index/StringIndex.java +++ b/java/java-tests/testSrc/com/intellij/index/StringIndex.java @@ -33,7 +33,7 @@ public class StringIndex { } public void update(final String path, @Nullable String content, @Nullable String oldContent) throws StorageException { - myIndex.update(path.hashCode(), toInput(path, content), true).compute(); + myIndex.update(path.hashCode(), toInput(path, content)).compute(); } @Nullable diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java index 5f887b115d03..2ac9de02385e 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java @@ -429,7 +429,7 @@ public class StubIndexImpl extends StubIndex implements ApplicationComponent, Pe public Collection call() throws Exception { return oldValues.keySet(); } - }, true); + }, null); } catch (StorageException e) { LOG.info(e); @@ -446,8 +446,8 @@ public class StubIndexImpl extends StubIndex implements ApplicationComponent, Pe public void updateWithMap(final int inputId, @NotNull final Map newData, @NotNull Callable> oldKeysGetter, - boolean merge) throws StorageException { - super.updateWithMap(inputId, newData, oldKeysGetter, merge); + Void input) throws StorageException { + super.updateWithMap(inputId, newData, oldKeysGetter, input); } } diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java index 22730e2cfdc9..05c88a40b5ed 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java @@ -301,7 +301,7 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi protected void updateWithMap(final int inputId, @NotNull final Map newData, @NotNull Callable> oldKeysGetter, - boolean merge) + FileContent content) throws StorageException { checkNameStorage(); @@ -324,8 +324,17 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi try { getWriteLock().lock(); - final Map oldData = - merge ? readOldData(inputId) : Collections.emptyMap(); + VirtualFile file = content.getFile(); + ID stubId = IndexInfrastructure.getStubId(INDEX_ID, file.getFileType()); + IndexingStamp.State state = IndexingStamp.getIndexingState(file, stubId); + + final Map oldData; + if (state == IndexingStamp.State.INDEX_VERSION_CHANGED) { + oldData = Collections.emptyMap(); + } + else { + oldData = readOldData(inputId); + } final Map> oldStubTree; try { oldStubTree = getStubTree(oldData); @@ -334,7 +343,7 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi throw new StorageException(e); } - super.updateWithMap(inputId, newData, oldKeysGetter, merge); + super.updateWithMap(inputId, newData, oldKeysGetter, content); updateStubIndices(getAffectedIndices(oldStubTree, newStubTree), inputId, oldStubTree, newStubTree); } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index 1b5fb3b76568..e006e448f294 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -1575,7 +1575,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { final int inputId = Math.abs(getFileId(vFile)); try { - getIndex(requestedIndexId).update(inputId, newFc, true).compute(); + getIndex(requestedIndexId).update(inputId, newFc).compute(); } catch (ProcessCanceledException pce) { myLastIndexedDocStamps.getAndSet(document, requestedIndexId, previousDocStamp); throw pce; @@ -1793,7 +1793,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { assert index != null; // important: no hard referencing currentFC to avoid OOME, the methods introduced for this purpose! - final Computable update = index.update(inputId, currentFC, merge); + final Computable update = index.update(inputId, currentFC); final FileType fileType = file.getFileType(); scheduleUpdate(indexId, 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 3230539f7b6f..c65b16974457 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java @@ -57,7 +57,12 @@ public class IndexingStamp { if (id != null) { long stamp = IndexInfrastructure.getIndexCreationStamp(id); if (myIndexStamps == null) myIndexStamps = new TObjectLongHashMap>(5, 0.98f); - myIndexStamps.put(id, stamp <= dominatingIndexStamp ? stamp : INDEX_VERSION_CHANGED_STAMP); + if (stamp <= dominatingIndexStamp) { + myIndexStamps.put(id, stamp); + } + else { + myIndexStamps.put(id, INDEX_VERSION_CHANGED_STAMP); + } } } } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/MapReduceIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/MapReduceIndex.java index 439770324875..5a9fb41ba121 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/MapReduceIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/MapReduceIndex.java @@ -203,7 +203,7 @@ public class MapReduceIndex implements UpdatableIndex update(final int inputId, @Nullable final Input content, final boolean merge) { + public final Computable update(final int inputId, @Nullable final Input content) { assert myInputsIndex != null; final Map data = content != null ? myIndexer.map(content) : Collections.emptyMap(); @@ -225,7 +225,7 @@ public class MapReduceIndex implements UpdatableIndex oldKeys = myInputsIndex.get(inputId); return oldKeys == null? Collections.emptyList() : oldKeys; } - }, merge); + }, content); } catch (StorageException ex) { exRef.set(ex); } @@ -246,7 +246,7 @@ public class MapReduceIndex implements UpdatableIndex newData, @NotNull Callable> oldKeysGetter, - boolean merge) throws StorageException { + Input input) throws StorageException { getWriteLock().lock(); try { try { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java index 78704703a0d1..589db0f47e58 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java @@ -32,9 +32,8 @@ public interface UpdatableIndex extends AbstractIndex update(int inputId, @Nullable Input content, boolean merge); + Computable update(int inputId, @Nullable Input content); Lock getReadLock(); diff --git a/xml/dom-impl/src/com/intellij/util/xml/stubs/builder/DomStubBuilder.java b/xml/dom-impl/src/com/intellij/util/xml/stubs/builder/DomStubBuilder.java index acdeb94e9e57..0a0ced19c2f6 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/stubs/builder/DomStubBuilder.java +++ b/xml/dom-impl/src/com/intellij/util/xml/stubs/builder/DomStubBuilder.java @@ -83,7 +83,7 @@ public class DomStubBuilder implements BinaryFileStubBuilder { @Override public int getStubVersion() { - int version = 11; + int version = 16; DomFileDescription[] descriptions = Extensions.getExtensions(DomFileDescription.EP_NAME); for (DomFileDescription description : descriptions) { version += description.getStubVersion();