From abd1fcf50e16eff9d775607cbf3d4af6a5a23ab1 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Sat, 30 Jun 2012 00:10:29 +0400 Subject: [PATCH] drop in memory cache for key upon removeAllValues value, fileId request (fixes ClassNameCompletionTest.testAnnotationFiltering second run failjure) --- .../ChangeTrackingValueContainer.java | 41 +++++-------------- .../util/indexing/MemoryIndexStorage.java | 6 +-- .../indexing/UpdatableValueContainer.java | 2 - .../util/indexing/ValueContainerImpl.java | 1 - .../util/indexing/ValueContainerMap.java | 8 +--- 5 files changed, 13 insertions(+), 45 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/ChangeTrackingValueContainer.java b/platform/lang-impl/src/com/intellij/util/indexing/ChangeTrackingValueContainer.java index 660d759fcf48..1648f878066c 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/ChangeTrackingValueContainer.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/ChangeTrackingValueContainer.java @@ -49,11 +49,9 @@ class ChangeTrackingValueContainer extends UpdatableValueContainer if (merged != null) { merged.addValue(inputId, value); } - ValueContainerImpl added = myAdded; - if (added == null) { - myAdded = added = new ValueContainerImpl(); - } - added.addValue(inputId, value); // will flush the changes & caller should ensure exclusiveness to avoid intermediate visibility issues + + if (myAdded == null) myAdded = new ValueContainerImpl(); + myAdded.addValue(inputId, value); } @Override @@ -63,27 +61,10 @@ class ChangeTrackingValueContainer extends UpdatableValueContainer merged.removeAssociatedValue(inputId); } - ValueContainerImpl added = myAdded; - if (added != null) added.removeAssociatedValue(inputId); + if (myAdded != null) myAdded.removeAssociatedValue(inputId); - TIntHashSet invalidated = myInvalidated; - if (invalidated == null) { - invalidated = new TIntHashSet(1); - } - invalidated.add(inputId); - myInvalidated = invalidated; // volatile write - } - - @Override - public boolean removeValue(int inputId, Value value) { - ValueContainerImpl merged = myMerged; - if (merged != null) { - merged.removeValue(inputId, value); - } - ValueContainerImpl added = myAdded; - if (added != null) added.removeValue(inputId, value); - - return true; + if (myInvalidated == null) myInvalidated = new TIntHashSet(1); + myInvalidated.add(inputId); } @Override @@ -142,9 +123,8 @@ class ChangeTrackingValueContainer extends UpdatableValueContainer newMerged = ((ChangeTrackingValueContainer)fromDisk).getMergedData().copy(); } - TIntHashSet invalidated = myInvalidated; - if (invalidated != null) { - invalidated.forEach(new TIntProcedure() { + if (myInvalidated != null) { + myInvalidated.forEach(new TIntProcedure() { @Override public boolean execute(int inputId) { newMerged.removeAssociatedValue(inputId); @@ -153,9 +133,8 @@ class ChangeTrackingValueContainer extends UpdatableValueContainer }); } - ValueContainerImpl added = myAdded; - if (added != null) { - added.forEach(new ContainerAction() { + if (myAdded != null) { + myAdded.forEach(new ContainerAction() { @Override public boolean perform(final int id, final Value value) { newMerged.removeAssociatedValue(id); // enforcing "one-value-per-file for particular key" invariant diff --git a/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java b/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java index e52744970aa4..5f00aa52c9d1 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java @@ -150,10 +150,8 @@ public class MemoryIndexStorage implements IndexStorage getMemValueContainer(key).removeAssociatedValue(inputId); return; } - final ChangeTrackingValueContainer valueContainer = myMap.get(key); - if (valueContainer != null) { - valueContainer.dropMergedData(); - } + + myMap.remove(key); // myBackendStorage.removeAllValues(key, inputId); } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/UpdatableValueContainer.java b/platform/lang-impl/src/com/intellij/util/indexing/UpdatableValueContainer.java index ea2da7b3d218..789e9c18bc8e 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/UpdatableValueContainer.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/UpdatableValueContainer.java @@ -24,7 +24,5 @@ public abstract class UpdatableValueContainer extends ValueContainer{ public abstract void addValue(int inputId, T value); - public abstract boolean removeValue(int inputId, T value); - public abstract void removeAssociatedValue(int inputId); } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java index c7280faea5c1..0fc5ae8edbfa 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java @@ -97,7 +97,6 @@ class ValueContainerImpl extends UpdatableValueContainer implement } } - @Override public boolean removeValue(int inputId, Value value) { final Object input = getInput(value); if (input == null) { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerMap.java b/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerMap.java index ba3d72501fba..bf747a3fa9fe 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerMap.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerMap.java @@ -117,13 +117,7 @@ class ValueContainerMap extends PersistentHashMap