save memory — don't create options HashMap for each component config

This commit is contained in:
Vladimir Krivosheev
2015-07-17 15:34:05 +02:00
parent 8fcf420a67
commit b0970bc57c
4 changed files with 20 additions and 10 deletions
@@ -65,8 +65,8 @@ public class ProjectStateStorageManager extends StateStorageManagerImpl {
return fileSpec;
}
private static boolean isWorkspace(final Map options) {
return options != null && Boolean.parseBoolean((String)options.get(ProjectStoreImpl.OPTION_WORKSPACE));
private static boolean isWorkspace(@Nullable Map<String, String> options) {
return options != null && Boolean.parseBoolean(options.get(ProjectStoreImpl.OPTION_WORKSPACE));
}
@NotNull
@@ -22,8 +22,8 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.xmlb.annotations.MapAnnotation;
import com.intellij.util.xmlb.annotations.Property;
import com.intellij.util.xmlb.annotations.Transient;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
public class ComponentConfig {
@@ -39,7 +39,8 @@ public class ComponentConfig {
@Property(surroundWithTag = false)
@MapAnnotation(surroundWithTag = false, entryTagName = "option", keyAttributeName = "name", valueAttributeName = "value")
public Map<String,String> options = new HashMap<String, String>();
@Nullable
public Map<String, String> options;
@Transient
public PluginDescriptor pluginDescriptor;
@@ -269,12 +269,12 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
return myComponentsRegistry.getComponentByName(name);
}
protected boolean isComponentSuitable(Map<String, String> options) {
protected boolean isComponentSuitable(@Nullable Map<String, String> options) {
return !isTrue(options, "internal") || ApplicationManager.getApplication().isInternal();
}
private static boolean isTrue(Map<String, String> options, @NonNls @NotNull String option) {
return options != null && options.containsKey(option) && Boolean.valueOf(options.get(option)).booleanValue();
private static boolean isTrue(@Nullable Map<String, String> options, @NonNls @NotNull String option) {
return options != null && Boolean.parseBoolean(options.get(option));
}
@Override
@@ -389,7 +389,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
final Class<?> interfaceClass = Class.forName(config.getInterfaceClass(), true, loader);
final Class<?> implementationClass = Comparing.equal(config.getInterfaceClass(), config.getImplementationClass()) ?
interfaceClass : StringUtil.isEmpty(config.getImplementationClass()) ? null : Class.forName(config.getImplementationClass(), true, loader);
boolean overrides = Boolean.parseBoolean(config.options.get("overrides"));
boolean overrides = config.options != null && Boolean.parseBoolean(config.options.get("overrides"));
MutablePicoContainer picoContainer = getPicoContainer();
if (overrides) {
ComponentAdapter oldAdapter = picoContainer.getComponentAdapterOfType(interfaceClass);
@@ -17,6 +17,7 @@ package com.intellij.util.xmlb;
import com.intellij.util.ArrayUtil;
import com.intellij.util.xmlb.annotations.MapAnnotation;
import gnu.trove.THashMap;
import org.jdom.Attribute;
import org.jdom.Content;
import org.jdom.Element;
@@ -124,6 +125,7 @@ class MapBinding extends Binding implements MultiNodeBinding, MainBinding {
}
@Override
@Nullable
public Object deserialize(Object context, @NotNull Element element) {
if (myMapAnnotation == null || myMapAnnotation.surroundWithTag()) {
return deserialize(context, element.getChildren());
@@ -133,9 +135,12 @@ class MapBinding extends Binding implements MultiNodeBinding, MainBinding {
}
}
private Map deserialize(Object context, List<Element> childNodes) {
@Nullable
private Map deserialize(@Nullable Object context, @NotNull List<Element> childNodes) {
Map map = (Map)context;
map.clear();
if (map != null) {
map.clear();
}
for (Element childNode : childNodes) {
if (!childNode.getName().equals(getEntryAttributeName())) {
@@ -143,6 +148,10 @@ class MapBinding extends Binding implements MultiNodeBinding, MainBinding {
continue;
}
if (map == null) {
map = new THashMap();
}
//noinspection unchecked
map.put(deserializeKeyOrValue(childNode, getKeyAttributeName(), context, keyBinding, keyClass),
deserializeKeyOrValue(childNode, getValueAttributeName(), context, valueBinding, valueClass));