From f1bd79a177749e38377ec73a161e2a785e06a008 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 20 Mar 2012 18:25:59 +0100 Subject: [PATCH] less disk operations in integrate --- .../ether/dependencyView/Mappings.java | 35 +++++++++++-------- .../ether/dependencyView/MultiMaplet.java | 1 + .../dependencyView/PersistentMultiMaplet.java | 19 ++++++++-- .../dependencyView/TransientMultiMaplet.java | 13 +++++-- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index 71918d2578b9..7ff64fdb13bc 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -1650,40 +1650,46 @@ public class Mappings { if (delta.isDifferentiated()) { for (DependencyContext.S c : delta.getChangedClasses()) { - myClassToSubclasses.remove(c); - final Collection 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 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 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 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); } } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java index a7152b3684dc..15a2875086e3 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java @@ -30,6 +30,7 @@ interface MultiMaplet { Collection get(final K key); void put(final K key, final V value); void put(final K key, final Collection value); + void replace(final K key, final Collection value); void putAll(MultiMaplet m); void replaceAll(MultiMaplet m); void remove(final K key); diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java index f1d288696244..0ac8cdfc1168 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java @@ -66,6 +66,21 @@ class PersistentMultiMaplet implements MultiMaplet { } } + @Override + public void replace(K key, Collection 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 value) { try { @@ -149,9 +164,7 @@ class PersistentMultiMaplet implements MultiMaplet { @Override public void replaceAll(MultiMaplet m) { for (Map.Entry> entry : m.entrySet()) { - final K key = entry.getKey(); - remove(key); - put(key, entry.getValue()); + replace(entry.getKey(), entry.getValue()); } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/TransientMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/TransientMultiMaplet.java index 7a5f2b85eb90..9a2792e15558 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/TransientMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/TransientMultiMaplet.java @@ -72,6 +72,16 @@ class TransientMultiMaplet implements MultiMaplet { } } + @Override + public void replace(K key, Collection 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 x = constr.create(); @@ -111,8 +121,7 @@ class TransientMultiMaplet implements MultiMaplet { @Override public void replaceAll(MultiMaplet m) { for (Map.Entry> e : m.entrySet()) { - remove(e.getKey()); - put(e.getKey(), e.getValue()); + replace(e.getKey(), e.getValue()); } }