cleanup: lazy initialization
authorAlexey Kudravtsev <cdr@intellij.com>
Fri, 12 Mar 2010 12:50:13 +0000 (15:50 +0300)
committerAlexey Kudravtsev <cdr@intellij.com>
Mon, 15 Mar 2010 10:35:31 +0000 (13:35 +0300)
platform/lang-api/src/com/intellij/psi/stubs/StubIndex.java
platform/lang-impl/src/com/intellij/packageDependencies/DefaultScopesProvider.java
platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java
platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java
platform/platform-api/src/com/intellij/openapi/vfs/newvfs/ManagingFS.java
platform/platform-resources-en/src/messages/IdeBundle.properties
plugins/groovy/src/org/jetbrains/plugins/groovy/actions/GroovyTemplatesFactory.java
plugins/svn4idea/src/org/jetbrains/idea/svn/history/MergeSourceDetailsAction.java

index 4b4034f373d691365b978ee77f2bd884117a6e54..c331e6e9441dfd1c8fd0c777b2b3d0e2979873d5 100644 (file)
@@ -29,13 +29,13 @@ import org.jetbrains.annotations.NotNull;
 import java.util.Collection;
 
 public abstract class StubIndex {
-  private static StubIndex ourInstance = CachedSingletonsRegistry.markCachedField(StubIndex.class);
+
+  private static class StubIndexHolder {
+    private static final StubIndex ourInstance = ApplicationManager.getApplication().getComponent(StubIndex.class);
+  }
 
   public static StubIndex getInstance() {
-    if (ourInstance == null) {
-      ourInstance = ApplicationManager.getApplication().getComponent(StubIndex.class);
-    }
-    return ourInstance;
+    return StubIndexHolder.ourInstance;
   }
 
   public abstract <Key, Psi extends PsiElement> Collection<Psi> get(
index 1e1f0d67afb520f45dcf19f736dbf6170f56a026..6a080f33fed47cdcc321cccbcf645dd00cf05995 100644 (file)
@@ -32,7 +32,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class DefaultScopesProvider implements CustomScopesProvider {
-  private static NamedScope myAllScope;
   private NamedScope myProblemsScope;
   private final Project myProject;
 
@@ -55,27 +54,28 @@ public class DefaultScopesProvider implements CustomScopesProvider {
     return list;
   }
 
-  public static NamedScope getAllScope() {
-    if (myAllScope == null) {
-      myAllScope = new NamedScope("All", new PackageSet() {
-        public boolean contains(final PsiFile file, final NamedScopesHolder holder) {
-          return true;
-        }
+  private static class NamedScopeHolder {
+    private static final NamedScope myAllScope = new NamedScope("All", new PackageSet() {
+      public boolean contains(final PsiFile file, final NamedScopesHolder holder) {
+        return true;
+      }
 
-        public PackageSet createCopy() {
-          return this;
-        }
+      public PackageSet createCopy() {
+        return this;
+      }
 
-        public String getText() {
-          return FilePatternPackageSet.SCOPE_FILE + ":*//*";
-        }
+      public String getText() {
+        return FilePatternPackageSet.SCOPE_FILE + ":*//*";
+      }
 
-        public int getNodePriority() {
-          return 0;
-        }
-      });
-    }
-    return myAllScope;
+      public int getNodePriority() {
+        return 0;
+      }
+    });
+  }
+
+  public static NamedScope getAllScope() {
+    return NamedScopeHolder.myAllScope;
   }
 
    public NamedScope getProblemsScope() {
@@ -100,4 +100,4 @@ public class DefaultScopesProvider implements CustomScopesProvider {
     }
     return myProblemsScope;
   }
-}
\ No newline at end of file
+}
index 61dbf0e6387977396170f7316790da12967fbe0f..4de538b569499f8eee0676cda8361bd748352509 100644 (file)
@@ -287,13 +287,12 @@ public class FileBasedIndex implements ApplicationComponent {
     }
   }
 
-  private static FileBasedIndex ourInstance = CachedSingletonsRegistry.markCachedField(FileBasedIndex.class);
-  public static FileBasedIndex getInstance() {
-    if (ourInstance == null) {
-      ourInstance = ApplicationManager.getApplication().getComponent(FileBasedIndex.class);
-    }
+  private static class FileBasedIndexHolder {
+    private static final FileBasedIndex ourInstance = ApplicationManager.getApplication().getComponent(FileBasedIndex.class);
+  }
 
-    return ourInstance;
+  public static FileBasedIndex getInstance() {
+    return FileBasedIndexHolder.ourInstance;
   }
 
   /**
index 9b8400aa8a1097c3e740940a0932b875aeb3d489..873acb6bbcc40acd800591c2b094287c4206b9c4 100644 (file)
@@ -17,7 +17,6 @@ package com.intellij.openapi.fileTypes;
 
 import com.intellij.openapi.application.Application;
 import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.CachedSingletonsRegistry;
 import com.intellij.openapi.vfs.VirtualFile;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
@@ -31,18 +30,22 @@ import java.util.List;
  */
 
 public abstract class FileTypeManager{
-  private static FileTypeManager ourInstance = CachedSingletonsRegistry.markCachedField(FileTypeManager.class);
+  private static class FileTypeManagerHolder {
+    private static final FileTypeManager ourInstance = createFileTypeManager();
+  }
+
   /**
    * Returns the singleton instance of the FileTypeManager component.
    *
    * @return the instace of FileTypeManager
    */
   public static FileTypeManager getInstance() {
-    if (ourInstance == null) {
-      Application app = ApplicationManager.getApplication();
-      ourInstance = app != null ? app.getComponent(FileTypeManager.class) : new MockFileTypeManager();
-    }
-    return ourInstance;
+    return FileTypeManagerHolder.ourInstance;
+  }
+
+  private static FileTypeManager createFileTypeManager() {
+    Application app = ApplicationManager.getApplication();
+    return app == null ? new MockFileTypeManager() : app.getComponent(FileTypeManager.class);
   }
 
   public abstract void registerFileType(@NotNull FileType type, @NotNull List<FileNameMatcher> defaultAssociations);
index bc3122889a535acb5c0f6fc905f8919e05207b68..9793edf8447dae5c439c7ff6356ca59a8ac07c13 100644 (file)
@@ -30,13 +30,13 @@ import java.io.DataOutputStream;
 import java.util.List;
 
 public abstract class ManagingFS implements FileSystemInterface {
-  private static ManagingFS ourInstance = CachedSingletonsRegistry.markCachedField(ManagingFS.class);
+
+  private static class ManagingFSHolder {
+    private static final ManagingFS ourInstance = ApplicationManager.getApplication().getComponent(ManagingFS.class);
+  }
 
   public static ManagingFS getInstance() {
-    if (ourInstance == null) {
-      ourInstance = ApplicationManager.getApplication().getComponent(ManagingFS.class);
-    }
-    return ourInstance;
+    return ManagingFSHolder.ourInstance;
   }
 
   @Nullable
index e45a14fc682fde58a6e3c1a225682a1b92efe939..c0cf915bbdad27e92be2df5f7a6d5f1f47713b02 100644 (file)
@@ -1,4 +1,3 @@
-error.cannot.show.in.external.browser=Cannot show \"{0}\" in external browser
 title.cannot.start.browser=Cannot start browser
 error.malformed.url=Malformed url: {0}
 error.cannot.start.browser=Cannot start browser: {0}
@@ -20,19 +19,15 @@ checkbox.transparent.native.to.ascii.conversion=Transparent native-to-ascii conv
 checkbox.autodetect.utf=Autodetect UTF-encoded files
 group.http.proxy=HTTP Proxy
 group.web.browser=Web Browser
-radio.use.system.default.browser=Use system default browser
-radio.use.specified.browser=Use
 group.general.options=General Options
 editbox.ignore.files.and.folders=Ignore files and folders:
 checkbox.confirm.application.exit=Confirm application exit
-checkbox.use.cyclic.buffer.in.console=Limit run/debug consoles output to:
 label.inactive.timeout.sec= sec.
 search.in.the.background=Search in the background
 checkbox.save.files.automatically=Save files automatically if application is idle for
 checkbox.save.files.on.frame.deactivation=Save files on frame deactivation
 checkbox.synchronize.files.on.frame.activation=Synchronize files on frame activation
 checkbox.reopen.last.project.on.startup=Reopen last project on startup
-label.kb= Kb.
 treenode.loading= loading...
 action.clear.list=_Clear List
 action.descriptor.action=Action: {0}
@@ -59,17 +54,11 @@ button.remove=&Remove
 button.remove.all=Remove &All
 button.move.up=Move &Up
 button.move.down=Move &Down
-column.bookmark=Bookmark
 column.description=Description
-title.project.elements.bookmarks=Project Elements Bookmarks
 bookmark.file.X.line.Y={0}, line {1}
 button.view.source=&View Source
-title.editor.bookmarks=Editor Bookmarks
-bookmark.method.at.line={0}, {1}{2}, line {3}
-action.show.bookmarks=_Show Bookmarks
 action.toggle.bookmark=Toggle _Bookmark
 action.toggle.bookmark.mnemonic=Toggle Bookmark With Mnemonic
-action.set.bookmark=Set _Bookmark
 progress.deleting=Deleting
 select.in.commander=Commander
 errortree.information=Information:
@@ -255,10 +244,7 @@ label.text.project.has.older.format=<html><body>The project ''{0}'' has an older
   Old versions of project files will be saved to: ''{1}''</body></html>
 message.text.unlock.read.only.files=<html><body>The following files are read only. IDEA will unlock them.<br>{0}</body></html>
 error.message.cannot.make.files.writable=Cannot make the following files writable:\n{0}
-label.text.project.was.succesfully.converted.old.version.was.saved.to.0=<html><body>Your project was succesfully converted. \
-  <br>Old versions of project files were saved to: ''{0}''</body></html>
 error.cannot.convert.project=Cannot convert project: {0}
-error.some.file.is.corrupted.message=<html><body>File ''{0}'' is corrupted: <br> {1} </body></html>
 message.files.doesn.t.exists.0.so.the.corresponding.modules.won.t.be.converted.do.you.want.to.continue=<html><body>The following files doesn''t exists: <br>\
   {0}The corresponding modules won''t be converted. Do you want to continue?</body></html>
 
@@ -273,7 +259,6 @@ message.purchase.or.upgrade=To purchase {0}, refer to {1}.<br>To upgrade from a
 message.expiration.date=Expiration date: {0}
 message.educational.license=1-Year Educational License. {0}
 message.open.source.project.license=Open Source Project License. {0}
-message.evaluation.expires=Evaluation expires: {0}
 message.non.commercial.use.only=Non-commercial use only
 message.personal.license=Personal License
 aboutbox.build.number=Build #{0}
@@ -281,7 +266,6 @@ aboutbox.build.date=Built on {0}
 aboutbox.jdk=JDK: {0}
 aboutbox.vm=VM: {0}
 aboutbox.vendor=Vendor: {0}
-message.license.you.will.need.upgrade=Your license key will expire on {0}.<br>You will need an upgrade to run {1}.<br>To learn more about upgrades, visit {2}
 title.warning=Warning
 message.upgrade.from.previous.required={0} requires an upgrade from previous versions.<br>You can purchase a license key from the JetBrains website at<br>{1}
 title.upgrade.needed=Upgrade Needed
@@ -305,7 +289,6 @@ title.unable.to.save.data=Unable to Save Data
 link.click.here.to.license.server.info=More info
 link.purchase.commercial.license=To purchase a commercial license, please visit
 license.panel.current.license.description=The license will expire on {0,date,MMMM dd, yyyy}
-license.panel.autodescovered.license.server.tile=Default license server
 license.panel.buildit.evaluation.expires.in=Remains {0} day(s)
 editbox.license.user.name=User name:
 editbox.license.license.key=License key:
@@ -314,7 +297,6 @@ radio.license.data=Enter license &data
 radio.evaluate=&Evaluate for free for 30 days
 radio.default.license.server=&Default License Server
 action.activate.tool.window=Activate {0} window
-action.change.splitter.orientations=Change Splitter O_rientations
 error.checkforupdates.connection.failed=Connection failed. Please check your network connection and try again.
 title.connection.error=Connection Error
 editbox.export.settings.to=Export settings to:
@@ -336,7 +318,6 @@ action.create.annotation.type=Create @interface
 prompt.enter.annotation.type.name=Enter a new @interface name:
 title.new.annotation.type=New @interface
 title.cannot.create.annotation.type=Cannot Create @interface
-progress.creating.annotation.type=Creating @interface {0}.{1}
 action.create.new.class=Create New Class
 action.create.new.filetype=Create New {0}
 action.description.create.new.file=Create New {0}
@@ -363,10 +344,8 @@ progress.creating.package=Creating package {0}.{1}
 command.create.directory=Create directory
 command.create.package=Create package
 action.create.new.enum=Create New Enum
-prompt.enter.new.enum.name=Enter a new enum name:
 title.new.enum=New Enum
 title.cannot.create.enum=Cannot Create Enum
-progress.creating.enum=Creating enum {0}.{1}
 command.create.enum=Create enum
 action.create.new.file=Create New File
 prompt.enter.new.file.name=Enter a new file name:
@@ -432,7 +411,6 @@ command.find.previous=Find Previous
 command.select.all=Select All
 message.no.targets.available=No targets available in this context
 title.popup.select.target=Select Target
-title.popup.select.subtarget=Select in {0}
 title.popup.recent.files=Recent Files
 action.split.vertically=Split _Vertically
 action.split.horizontally=Split Hori_zontally
@@ -452,8 +430,6 @@ action.toolwindow.hierarchy=Hierarch&y
 action.toolwindow.todo=TODO
 action.toolwindow.inspection=I&nspection
 action.toolwindow.favorites=Favorites
-action.unsplit=Un_split
-action.unsplit.all=U_nsplit All
 macro.classpath.entry=Entry in the classpath the element belongs to
 macro.project.classpath=Project's classpath
 macro.column.number=Column number
@@ -633,7 +609,6 @@ node.todo.found.items={0} (found {1} {1,choice,1#item|2#items})
 node.todo.items={0} ({1} {1, choice, 1#item|2#items})
 title.appearance=Appearance
 group.window.options= Window Options
-checkox.show.buttons.for.disabled.tool.windows=Show buttons for disabled tool windows
 checkbox.show.memory.indicator=Show memory indicator
 checkbox.show.tool.window.bars=Show tool window bars
 checkbox.show.tool.window.numbers=Show tool window numbers
@@ -656,10 +631,6 @@ checkbox.use.antialiased.font.in.editor=Use antialiased font
 # this string must start with "IDEA"
 idea.default.look.and.feel=IDEA (4.5 default)
 error.cannot.set.look.and.feel=Cannot set {0} look and feel
-action.add.customization.schema=Add customization scheme
-customizations.schema.default=default
-action.copy.customization.schema=Copy scheme
-action.remove.customization.schema=Remove customization scheme
 error.adding.action.without.icon.to.toolbar=You are adding an action without icon to the toolbar. The default icon will be added to this action.
 title.unable.to.add.action.without.icon.to.toolbar=Unable to add action without icon to the toolbar
 error.please.specify.new.name.for.schema=Please, specify new name for scheme ''{0}''.
@@ -670,13 +641,10 @@ action.choose.actions.to.add=Choose Actions To Add
 button.set.icon=&Set icon
 label.icon.path=Icon Path:
 button.edit.action.icon=Edit Action &Icon
-editbox.schema.name=Scheme Name:
-editbox.schema.description=Description:
 button.add.separator=Add &Separator
 button.move.up.u=Move &Up
 button.move.down.d=Move &Down
 button.add.action.after=Add a&fter...
-customization.schema.default.description=Default unmodified customization scheme
 title.custom.actions.schemas=Custom Actions Schemes
 title.customizations=Menus and Toolbars
 label.choosebyname.no.matches.found=(no matches found)
@@ -873,21 +841,12 @@ element.of.interface=of interface
 element.of.class=of class
 prompt.do.you.want.to.action_verb.the.method.from_class=Do you want to {0} the base {1,choice,1#method|2#methods}?
 jar.no.java.modules.in.project.error=There are no Java modules found in the project.\nOnly Java modules can be jarred.
-jar.no.java.modules.in.project.title=No Modules To Jar Found
 jar.build.progress=Building jar {0}...
-jar.build.success.message=Jar has been built in {0}
-jar.build.cancelled=Jar creation has been cancelled
 jar.build.error.title=Error Creating Jar
 jar.build.progress.title=Building Jar
-jar.build.processing.file.progress=Processing file {0} ...
-error.message.jar.build.cannot.create.temporary.file.in.0=Cannot create temporary file in ''{0}''
-jar.build.cannot.overwrite.error=Cannot overwrite file ''{0}''. Copy has been saved to ''{1}''.
-jar.build.module.presentable.name=Build Jars for module ''{0}''
 jar.build.path=Jar file &path:
 jar.build.main.class=Main &class:
 jar.build.dialog.title=Build Jars
-jar.build.save.title=Save Jar File
-jar.build.main.class.title=Choose Main Class
 jar.build.class.not.found=Class ''{0}'' not found
 help.not.found.error=Help not found for {0}
 help.not.found.title=Help Not Found
@@ -918,7 +877,6 @@ updates.check.period.on.startup=On every start
 updates.check.period.daily=Daily
 updates.check.period.weekly=Weekly
 updates.check.period.monthly=Monthly
-updates.current.build.unknown=N/A
 updates.last.check.never=Never
 updates.settings.caption.1=<html>$PRODUCT$ can automatically check for new and updated versions of itself, using your internet connection (when active).<html>
 updates.settings.check.now.button=Check  Now
@@ -942,14 +900,11 @@ jar.build.on.make=Build jars on &make
 jar.build.modules.to.jar=Choose Modules to Jar
 jar.build.module.0.jar.settings=Module ''{0}'' Jar Settings
 jar.build.include.in.jar.file=Include in jar file:
-jar.build.button=&Build
 search.textfield.title=&Search:
 select.in.scope=Scope
 scope.view.title=Scope
 select.in.title.project.view=Project View
 several.plugins.depend.on.0.continue.to.remove=Several plugins depend on {0}. Continue to remove?
-project.view.combo.label=View &as:
-
 child.tag.0.should.be.defined=''{0}'' child tag should be defined
 attribute.0.should.be.defined=''{0}'' attribute should be defined
 value.must.not.be.empty=Value must not be empty
@@ -1060,7 +1015,6 @@ plugin.deleted.status.tooltip=Plugin will be deleted on next startup
 plugin.outdated.version.status.tooltip=Plugin has newer version
 plugin.download.status.tooltip=Plugin will be activated on next startup
 plugin.is.already.installed.status.tooltip=Plugin is installed
-update.plugins.shutdown.action=Update and &Shutdown
 update.plugins.update.action=&Update
 fail.open.project.message=Unable to open project from ''{0}''
 disabled.plugins.warning.message=<li>Plugin <b>\"{0}\"</b> won''t be able to load because required {2, choice, 1#plugin|2#plugins} {1} {2, choice, 1#is|2#are} disabled.</li>
index 228fbddfeb8363d629be47caf7b82011a9cef472..960e458a0424404aa0359fd0b73212aeb44a46a2 100644 (file)
@@ -40,13 +40,12 @@ public class GroovyTemplatesFactory implements FileTemplateGroupDescriptorFactor
     }
   }
 
-  private static GroovyTemplatesFactory myInstance = null;
+  private static class GroovyTemplatesFactoryHolder {
+    private static final GroovyTemplatesFactory myInstance = new GroovyTemplatesFactory();
+  }
 
   public static GroovyTemplatesFactory getInstance() {
-    if (myInstance == null) {
-      myInstance = new GroovyTemplatesFactory();
-    }
-    return myInstance;
+    return GroovyTemplatesFactoryHolder.myInstance;
   }
 
   private final ArrayList<String> myCustomTemplates = new ArrayList<String>();
index e5a3dd32cebc7529aff5adf6a7e4aac7b2e8d1f1..3eba3a97499f6fc55fcc6b38c876b122142ccca4 100644 (file)
@@ -30,7 +30,6 @@ import javax.swing.*;
 import java.awt.event.KeyEvent;
 
 public class MergeSourceDetailsAction extends AnAction implements DumbAware {
-  private static Icon myIcon;
 
   @Override
   public void update(AnActionEvent e) {
@@ -39,11 +38,12 @@ public class MergeSourceDetailsAction extends AnAction implements DumbAware {
     e.getPresentation().setEnabled(enabled(e));
   }
 
+  private static class IconHolder {
+    private static final Icon myIcon = IconLoader.getIcon("/icons/mergeSourcesDetails.png");
+  }
+
   private Icon getIcon() {
-    if (myIcon == null) {
-      myIcon = IconLoader.getIcon("/icons/mergeSourcesDetails.png");
-    }
-    return myIcon;
+    return IconHolder.myIcon;
   }
 
   public void registerSelf(final JComponent comp) {