memory optimization
authorAlexey Kudravtsev <cdr@intellij.com>
Mon, 28 Jun 2010 14:36:41 +0000 (18:36 +0400)
committerAlexey Kudravtsev <cdr@intellij.com>
Wed, 30 Jun 2010 10:14:17 +0000 (14:14 +0400)
13 files changed:
java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java
platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateManagerImpl.java
platform/lang-impl/src/com/intellij/openapi/options/colors/pages/CustomColorsPage.java
platform/platform-api/src/com/intellij/openapi/actionSystem/AnAction.java
platform/platform-api/src/com/intellij/openapi/actionSystem/CustomShortcutSet.java
platform/platform-api/src/com/intellij/openapi/actionSystem/Shortcut.java
platform/platform-api/src/com/intellij/openapi/options/StreamProvider.java
platform/platform-impl/src/com/intellij/openapi/components/impl/stores/StateStorageManagerImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java
platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeymapImpl.java
platform/platform-impl/src/com/intellij/openapi/options/SchemesManagerFactoryImpl.java
xml/impl/src/com/intellij/psi/impl/source/xml/XmlTagValueImpl.java
xml/openapi/src/com/intellij/psi/xml/XmlText.java

index 25f2a3e6f3f90178d0d40a90a6578c1d0b2ec728..d1dfb59d57af9421be3c317191de7e91adff7456 100644 (file)
@@ -35,7 +35,7 @@ import javax.swing.*;
 import java.util.*;
 
 public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColorSettingsPage {
-  private static final AttributesDescriptor[] ourDescriptors = new AttributesDescriptor[] {
+  private static final AttributesDescriptor[] ourDescriptors = {
     new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.keyword"), SyntaxHighlighterColors.KEYWORD),
     new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.number"), SyntaxHighlighterColors.NUMBER),
 
@@ -82,8 +82,6 @@ public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColor
     new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.annotation.attribute.name"), CodeInsightColors.ANNOTATION_ATTRIBUTE_NAME_ATTRIBUTES)
   };
 
-  private static final ColorDescriptor[] ourColorDescriptors = new ColorDescriptor[0];
-
   @NonNls private static final Map<String, TextAttributesKey> ourTags = new HashMap<String, TextAttributesKey>();
   static {
     ourTags.put("field", CodeInsightColors.INSTANCE_FIELD_ATTRIBUTES);
@@ -135,7 +133,7 @@ public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColor
 
   @NotNull
   public ColorDescriptor[] getColorDescriptors() {
-    return ourColorDescriptors;
+    return ColorDescriptor.EMPTY_ARRAY;
   }
 
   @NotNull
index d0f28ce7a50cb99d6801820297faefb1243590c5..a3ff15a6dee0f970e1e7a2d0fdf2b0b480fa0889 100644 (file)
@@ -63,6 +63,7 @@ import java.util.*;
  * _inside_, not outside of the read action
  */
 public class FileTemplateManagerImpl extends FileTemplateManager implements ExportableComponent, JDOMExternalizable {
+  private static final FileTemplateManagerImpl[] EMPTY_ARRAY = new FileTemplateManagerImpl[0];
   private static final Logger LOG = Logger.getInstance("#com.intellij.ide.fileTemplates.impl.FileTemplateManagerImpl");
   @NonNls private static final String DEFAULT_TEMPLATE_EXTENSION = "ft";
   @NonNls private static final String TEMPLATES_DIR = "fileTemplates";
@@ -137,7 +138,7 @@ public class FileTemplateManagerImpl extends FileTemplateManager implements Expo
     myPatternsManager = patternsManager;
     myCodeTemplatesManager = codeTemplatesManager;
     myJ2eeTemplatesManager = j2eeTemplatesManager;
-    myChildren = internalTemplatesManager == null ? new FileTemplateManagerImpl[0] : new FileTemplateManagerImpl[]{internalTemplatesManager,patternsManager,codeTemplatesManager,j2eeTemplatesManager};
+    myChildren = internalTemplatesManager == null ? EMPTY_ARRAY : new FileTemplateManagerImpl[]{internalTemplatesManager,patternsManager,codeTemplatesManager,j2eeTemplatesManager};
 
     if (ApplicationManager.getApplication().isUnitTestMode() && defaultTemplatesDirName.equals(INTERNAL_DIR)) {
       for (String tname : Arrays.asList("Class", "AnnotationType", "Enum", "Interface")) {
index aa5ac7a023516f1fd8a81463a98d8ec73a7df656..3149ba45c3a2bab18890acbc7bcb4e0596b8d6ec 100644 (file)
@@ -32,8 +32,7 @@ import javax.swing.*;
 import java.util.Map;
 
 public class CustomColorsPage implements ColorSettingsPage {
-  private static final ColorDescriptor[] COLORS = new ColorDescriptor[0];
-  private static final AttributesDescriptor[] ATTRS = new AttributesDescriptor[] {
+  private static final AttributesDescriptor[] ATTRS = {
     new AttributesDescriptor(OptionsBundle.message("options.custom.attribute.descriptor.keyword1"), CustomHighlighterColors.CUSTOM_KEYWORD1_ATTRIBUTES),
     new AttributesDescriptor(OptionsBundle.message("options.custom.attribute.descriptor.keyword2"), CustomHighlighterColors.CUSTOM_KEYWORD2_ATTRIBUTES),
     new AttributesDescriptor(OptionsBundle.message("options.custom.attribute.descriptor.keyword3"), CustomHighlighterColors.CUSTOM_KEYWORD3_ATTRIBUTES),
@@ -46,7 +45,7 @@ public class CustomColorsPage implements ColorSettingsPage {
     new AttributesDescriptor(OptionsBundle.message("options.custom.attribute.descriptor.invalid.string.escape"), CustomHighlighterColors.CUSTOM_INVALID_STRING_ESCAPE),
   };
 
-  @NonNls private final static SyntaxTable SYNTAX_TABLE = new SyntaxTable();
+  @NonNls private static final SyntaxTable SYNTAX_TABLE = new SyntaxTable();
   static {
     SYNTAX_TABLE.setLineComment("#");
     SYNTAX_TABLE.setStartComment("/*");
@@ -81,7 +80,7 @@ public class CustomColorsPage implements ColorSettingsPage {
 
   @NotNull
   public ColorDescriptor[] getColorDescriptors() {
-    return COLORS;
+    return ColorDescriptor.EMPTY_ARRAY;
   }
 
   @NotNull
index c45a1d6f4c0f756f305a7584070fa592251436ca..737598ea17a70fdbb5a0905c02e0cf75b8224f3c 100644 (file)
@@ -67,7 +67,7 @@ public abstract class AnAction {
   private boolean myEnabledInModalContext;
 
 
-  private static final ShortcutSet ourEmptyShortcutSet = new CustomShortcutSet(new Shortcut[0]);
+  private static final ShortcutSet ourEmptyShortcutSet = new CustomShortcutSet();
   private boolean myIsDefaultIcon = true;
   private boolean myWorksInInjected;
 
index ce284244cec9971605a1d065a47ddb6e108e5dda..9f23aae2131982cb9e8197effe8a8a9651196c0f 100644 (file)
@@ -39,10 +39,10 @@ public final class CustomShortcutSet implements ShortcutSet {
    * @param shortcuts keyboard shortcuts
    */
   public CustomShortcutSet(Shortcut... shortcuts){
-    myShortcuts = (Shortcut[])shortcuts.clone();
+    myShortcuts = shortcuts.length == 0 ? Shortcut.EMPTY_ARRAY : shortcuts.clone();
   }
 
   public Shortcut[] getShortcuts(){
-    return (Shortcut[])myShortcuts.clone();
+    return myShortcuts.length == 0 ? Shortcut.EMPTY_ARRAY : myShortcuts.clone();
   }
 }
\ No newline at end of file
index 019aec6fda04894c42610d10ed6df5e8e66931f6..f62581cd05f6a23d5d0ce80a2ea36a2a5fb41c0e 100644 (file)
@@ -23,6 +23,7 @@ import com.intellij.openapi.keymap.KeymapUtil;
  * @see ShortcutSet
  */
 public abstract class Shortcut {
+  public static final Shortcut[] EMPTY_ARRAY = new Shortcut[0];
   Shortcut(){
   }
 
index e62ecf0d4c3aea9e09a317a9c71b47f21d2e0ccc..ae1e9747972ab06e024772cba6e5fc0ca95835e6 100644 (file)
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.io.InputStream;
 
 public interface StreamProvider {
+  StreamProvider[] EMPTY_ARRAY = new StreamProvider[0];
   StreamProvider DEFAULT = new StreamProvider(){
     public void saveContent(final String fileSpec, final InputStream content, final long size, final RoamingType roamingType, boolean async) throws IOException {
 
index cfda7c873e1bd82eaebea3042f4ffdcf79df5b7a..54d6b8b5250a1845e940e5acb86b54e7605fee5d 100644 (file)
@@ -332,7 +332,7 @@ public abstract class StateStorageManagerImpl implements StateStorageManager, Di
   public StreamProvider[] getStreamProviders(RoamingType type) {
     synchronized (myStreamProviders) {
       final Collection<StreamProvider> providers = myStreamProviders.get(type);
-      return providers.toArray(new StreamProvider[providers.size()]);
+      return providers.isEmpty() ? EMPTY_ARRAY : providers.toArray(new StreamProvider[providers.size()]);
     }
   }
 
index e1ee5da5922c3cd47b158d397e6aec4a66a23adc..54b6f64bd217da38c15bab48acb1457ad84f571d 100644 (file)
@@ -450,7 +450,7 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList
         }
       }
 
-      myCachedVisible = visible.toArray(new FoldRegion[visible.size()]);
+      myCachedVisible = visible.isEmpty() ? FoldRegion.EMPTY_ARRAY : visible.toArray(new FoldRegion[visible.size()]);
 
       Arrays.sort(myCachedVisible, BY_END_OFFSET_REVERSE);
 
index 9fd40c39fac4252d897004eebc28d497f5cc0869..1991b02eb89ebfb681b6070313f3f8cee49c19fd 100644 (file)
@@ -516,7 +516,7 @@ public class KeymapImpl implements Keymap, ExternalizableScheme {
         return ourEmptyShortcutsArray;
       }
     }
-    return shortcuts.toArray(new Shortcut[shortcuts.size()]);
+    return shortcuts.isEmpty() ? ourEmptyShortcutsArray : shortcuts.toArray(new Shortcut[shortcuts.size()]);
   }
 
   private KeymapManagerEx getKeymapManager() {
index 56b185c6fa5332fe7108ba111273b183caafcc23..a7d0e33cc23c8d1ca17e9370e2ef89de79625225 100644 (file)
@@ -43,9 +43,9 @@ public class SchemesManagerFactoryImpl extends SchemesManagerFactory implements
 
     if (baseDirPath != null) {
 
-      SchemesManagerImpl<T, E> manager = new SchemesManagerImpl<T,E>(fileSpec, processor, roamingType,
-                                                          ((ApplicationImpl)ApplicationManager.getApplication()).getStateStore().getStateStorageManager().getStreamProviders(roamingType),
-                                                          new File(baseDirPath));
+      StreamProvider[] providers =
+        ((ApplicationImpl)ApplicationManager.getApplication()).getStateStore().getStateStorageManager().getStreamProviders(roamingType);
+      SchemesManagerImpl<T, E> manager = new SchemesManagerImpl<T,E>(fileSpec, processor, roamingType, providers, new File(baseDirPath));
       myRegisteredManagers.add(manager);
       return manager;
     }
index a271935d4d9a0b11c5ad14f7a605112eea0353b5..a8fa5265c569437bbbdce2114058298db9906cae 100644 (file)
@@ -55,7 +55,7 @@ public class XmlTagValueImpl implements XmlTagValue{
     for (final XmlTagChild element : myElements) {
       if (element instanceof XmlText) textElementsList.add((XmlText)element);
     }
-    return myTextElements = ContainerUtil.toArray(textElementsList, new XmlText[textElementsList.size()]);
+    return myTextElements = textElementsList.isEmpty() ? XmlText.EMPTY_ARRAY : ContainerUtil.toArray(textElementsList, new XmlText[textElementsList.size()]);
   }
 
   @NotNull
index 608daedbd34ad6e7101478866553107bb537cf23..4c9a84d38b1a0783812239ae1fa6c549ab1c8bc3 100644 (file)
@@ -36,4 +36,5 @@ public interface XmlText extends XmlTagChild {
 
   @Nullable
   XmlText split(int displayIndex);
+  XmlText[] EMPTY_ARRAY = new XmlText[0];
 }