mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
save memory — don't create options HashMap for each component config
This commit is contained in:
+2
-2
@@ -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;
|
||||
|
||||
+4
-4
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user