less disk operations in integrate

This commit is contained in:
Eugene Zhuravlev
2012-03-20 18:25:59 +01:00
parent e21ab049dc
commit f1bd79a177
4 changed files with 48 additions and 20 deletions
@@ -1650,40 +1650,46 @@ public class Mappings {
if (delta.isDifferentiated()) {
for (DependencyContext.S c : delta.getChangedClasses()) {
myClassToSubclasses.remove(c);
final Collection<DependencyContext.S> subClasses = delta.myClassToSubclasses.get(c);
if (subClasses != null) {
myClassToSubclasses.put(c, subClasses);
myClassToSubclasses.replace(c, subClasses);
}
else {
myClassToSubclasses.remove(c);
}
myClassToSourceFile.remove(c);
final DependencyContext.S sourceFile = delta.myClassToSourceFile.get(c);
if (sourceFile != null) {
myClassToSourceFile.put(c, sourceFile);
}
else {
myClassToSourceFile.remove(c);
}
}
for (DependencyContext.S f : delta.getChangedFiles()) {
mySourceFileToClasses.remove(f);
final Collection<ClassRepr> classes = delta.mySourceFileToClasses.get(f);
if (classes != null) {
mySourceFileToClasses.put(f, classes);
mySourceFileToClasses.replace(f, classes);
}
else {
mySourceFileToClasses.remove(f);
}
mySourceFileToUsages.remove(f);
final Collection<UsageRepr.Cluster> clusters = delta.mySourceFileToUsages.get(f);
if (clusters != null) {
mySourceFileToUsages.put(f, clusters);
mySourceFileToUsages.replace(f, clusters);
}
else {
mySourceFileToUsages.remove(f);
}
mySourceFileToAnnotationUsages.remove(f);
final Collection<UsageRepr.Usage> usages = delta.mySourceFileToAnnotationUsages.get(f);
if (usages != null) {
mySourceFileToAnnotationUsages.put(f, usages);
mySourceFileToAnnotationUsages.replace(f, usages);
}
else {
mySourceFileToAnnotationUsages.remove(f);
}
}
}
@@ -1728,8 +1734,7 @@ public class Mappings {
changed |= past.addAll(now);
if (changed) {
myClassToClassDependency.remove(aClass);
myClassToClassDependency.put(aClass, past);
myClassToClassDependency.replace(aClass, past);
}
}
}
@@ -30,6 +30,7 @@ interface MultiMaplet<K, V> {
Collection<V> get(final K key);
void put(final K key, final V value);
void put(final K key, final Collection<V> value);
void replace(final K key, final Collection<V> value);
void putAll(MultiMaplet<K,V> m);
void replaceAll(MultiMaplet<K, V> m);
void remove(final K key);
@@ -66,6 +66,21 @@ class PersistentMultiMaplet<K, V> implements MultiMaplet<K, V> {
}
}
@Override
public void replace(K key, Collection<V> value) {
try {
if (value == null || value.isEmpty()) {
myMap.remove(key);
}
else {
myMap.put(key, value);
}
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void put(final K key, final Collection<V> value) {
try {
@@ -149,9 +164,7 @@ class PersistentMultiMaplet<K, V> implements MultiMaplet<K, V> {
@Override
public void replaceAll(MultiMaplet<K, V> m) {
for (Map.Entry<K, Collection<V>> entry : m.entrySet()) {
final K key = entry.getKey();
remove(key);
put(key, entry.getValue());
replace(entry.getKey(), entry.getValue());
}
}
@@ -72,6 +72,16 @@ class TransientMultiMaplet<K, V> implements MultiMaplet<K, V> {
}
}
@Override
public void replace(K key, Collection<V> value) {
if (value == null || value.isEmpty()) {
myMap.remove(key);
}
else {
myMap.put(key, value);
}
}
@Override
public void put(final K key, final V value) {
final Collection<V> x = constr.create();
@@ -111,8 +121,7 @@ class TransientMultiMaplet<K, V> implements MultiMaplet<K, V> {
@Override
public void replaceAll(MultiMaplet<K, V> m) {
for (Map.Entry<K, Collection<V>> e : m.entrySet()) {
remove(e.getKey());
put(e.getKey(), e.getValue());
replace(e.getKey(), e.getValue());
}
}