diff --git a/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileContainerImpl.java b/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileContainerImpl.java index e16a28933aca..fa799ed3dbf8 100644 --- a/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileContainerImpl.java +++ b/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileContainerImpl.java @@ -25,13 +25,11 @@ import com.intellij.openapi.vfs.*; import com.intellij.util.EventDispatcher; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.descriptors.*; +import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * @author nik @@ -129,9 +127,9 @@ public class ConfigFileContainerImpl extends SimpleModificationTracker implement return myMetaDataProvider; } - public void updateDescriptors(final MultiValuesMap descriptorsMap) { - Set toDelete = new HashSet(myConfigFiles.values()); - Set added = new HashSet(); + public void updateDescriptors(@NotNull MultiValuesMap descriptorsMap) { + Set toDelete = myConfigFiles.isEmpty() ? Collections.emptySet() : new HashSet(myConfigFiles.values()); + Set added = null; for (Map.Entry> entry : descriptorsMap.entrySet()) { ConfigFileMetaData metaData = entry.getKey(); @@ -139,8 +137,7 @@ public class ConfigFileContainerImpl extends SimpleModificationTracker implement final Collection oldDescriptors = myConfigFiles.get(metaData); if (oldDescriptors != null) { for (ConfigFile descriptor : oldDescriptors) { - if (newDescriptors.contains(descriptor.getInfo())) { - newDescriptors.remove(descriptor.getInfo()); + if (newDescriptors.remove(descriptor.getInfo())) { toDelete.remove(descriptor); } } @@ -149,6 +146,9 @@ public class ConfigFileContainerImpl extends SimpleModificationTracker implement final ConfigFileImpl configFile = new ConfigFileImpl(this, configuration); Disposer.register(this, configFile); myConfigFiles.put(metaData, configFile); + if (added == null) { + added = new THashSet(); + } added.add(configFile); } } @@ -159,9 +159,11 @@ public class ConfigFileContainerImpl extends SimpleModificationTracker implement } myCachedConfigFiles = null; - for (ConfigFile configFile : added) { - incModificationCount(); - myDispatcher.getMulticaster().configFileAdded(configFile); + if (added != null) { + for (ConfigFile configFile : added) { + incModificationCount(); + myDispatcher.getMulticaster().configFileAdded(configFile); + } } for (ConfigFile configFile : toDelete) { incModificationCount();