mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
drop in memory cache for key upon removeAllValues value, fileId request (fixes ClassNameCompletionTest.testAnnotationFiltering second run failjure)
This commit is contained in:
+10
-31
@@ -49,11 +49,9 @@ class ChangeTrackingValueContainer<Value> extends UpdatableValueContainer<Value>
|
||||
if (merged != null) {
|
||||
merged.addValue(inputId, value);
|
||||
}
|
||||
ValueContainerImpl<Value> added = myAdded;
|
||||
if (added == null) {
|
||||
myAdded = added = new ValueContainerImpl<Value>();
|
||||
}
|
||||
added.addValue(inputId, value); // will flush the changes & caller should ensure exclusiveness to avoid intermediate visibility issues
|
||||
|
||||
if (myAdded == null) myAdded = new ValueContainerImpl<Value>();
|
||||
myAdded.addValue(inputId, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,27 +61,10 @@ class ChangeTrackingValueContainer<Value> extends UpdatableValueContainer<Value>
|
||||
merged.removeAssociatedValue(inputId);
|
||||
}
|
||||
|
||||
ValueContainerImpl<Value> 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<Value> merged = myMerged;
|
||||
if (merged != null) {
|
||||
merged.removeValue(inputId, value);
|
||||
}
|
||||
ValueContainerImpl<Value> 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<Value> extends UpdatableValueContainer<Value>
|
||||
newMerged = ((ChangeTrackingValueContainer<Value>)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<Value> extends UpdatableValueContainer<Value>
|
||||
});
|
||||
}
|
||||
|
||||
ValueContainerImpl<Value> added = myAdded;
|
||||
if (added != null) {
|
||||
added.forEach(new ContainerAction<Value>() {
|
||||
if (myAdded != null) {
|
||||
myAdded.forEach(new ContainerAction<Value>() {
|
||||
@Override
|
||||
public boolean perform(final int id, final Value value) {
|
||||
newMerged.removeAssociatedValue(id); // enforcing "one-value-per-file for particular key" invariant
|
||||
|
||||
@@ -150,10 +150,8 @@ public class MemoryIndexStorage<Key, Value> implements IndexStorage<Key, Value>
|
||||
getMemValueContainer(key).removeAssociatedValue(inputId);
|
||||
return;
|
||||
}
|
||||
final ChangeTrackingValueContainer<Value> valueContainer = myMap.get(key);
|
||||
if (valueContainer != null) {
|
||||
valueContainer.dropMergedData();
|
||||
}
|
||||
|
||||
myMap.remove(key); //
|
||||
|
||||
myBackendStorage.removeAllValues(key, inputId);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,5 @@ public abstract class UpdatableValueContainer<T> extends ValueContainer<T>{
|
||||
|
||||
public abstract void addValue(int inputId, T value);
|
||||
|
||||
public abstract boolean removeValue(int inputId, T value);
|
||||
|
||||
public abstract void removeAssociatedValue(int inputId);
|
||||
}
|
||||
|
||||
@@ -97,7 +97,6 @@ class ValueContainerImpl<Value> extends UpdatableValueContainer<Value> implement
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeValue(int inputId, Value value) {
|
||||
final Object input = getInput(value);
|
||||
if (input == null) {
|
||||
|
||||
@@ -117,13 +117,7 @@ class ValueContainerMap<Key, Value> extends PersistentHashMap<Key, ValueContaine
|
||||
final int idCount = DataInputOutputUtil.readSINT(in);
|
||||
for (int i = 0; i < idCount; i++) {
|
||||
final int id = DataInputOutputUtil.readSINT(in);
|
||||
if (id < 0) {
|
||||
valueContainer.removeValue(-id, value);
|
||||
valueContainer.setNeedsCompacting(true);
|
||||
}
|
||||
else {
|
||||
valueContainer.addValue(id, value);
|
||||
}
|
||||
valueContainer.addValue(id, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user