From fe5c18ee148728e2908767c2b3ae757e7a97e510 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Fri, 11 Nov 2016 22:57:52 +0300 Subject: [PATCH] Make 'Favorites' tool window lazy. --- .../favoritesTreeView/FavoritesManager.java | 50 +++++++++---------- .../impl/FavoritesViewToolWindowFactory.java | 5 ++ 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesManager.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesManager.java index f36504c8a840..d9e37b410c62 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesManager.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesManager.java @@ -28,10 +28,8 @@ import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; -import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.ui.InputValidator; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.*; @@ -61,7 +59,27 @@ public class FavoritesManager implements ProjectComponent, JDOMExternalizable { private final Project myProject; private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private final FavoritesViewSettings myViewSettings = new FavoritesViewSettings(); - private final Map myProviders = new HashMap<>(); + private Map myProviders; + + @NotNull + private Map getProviders() { + if (myProviders != null) return myProviders; + myProviders = new HashMap<>(); + if (!ApplicationManager.getApplication().isUnitTestMode()) { + final FavoritesListProvider[] providers = Extensions.getExtensions(EP_NAME, myProject); + for (FavoritesListProvider provider : providers) { + myProviders.put(provider.getListName(myProject), provider); + } + final MyRootsChangeAdapter myPsiTreeChangeAdapter = new MyRootsChangeAdapter(); + + PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeAdapter, myProject); + if (myName2FavoritesRoots.isEmpty()) { + myDescriptions.put(myProject.getName(), "auto-added"); + createNewList(myProject.getName()); + } + } + return myProviders; + } private void rootsChanged() { for (FavoritesListener listener : myListeners) { @@ -93,7 +111,7 @@ public class FavoritesManager implements ProjectComponent, JDOMExternalizable { @Override public boolean canClose(String inputString) { inputString = inputString.trim(); - if (myName2FavoritesRoots.keySet().contains(inputString) || myProviders.keySet().contains(inputString)) { + if (myName2FavoritesRoots.keySet().contains(inputString) || getProviders().keySet().contains(inputString)) { Messages.showErrorDialog(project, IdeBundle.message("error.favorites.list.already.exists", inputString.trim()), IdeBundle.message("title.unable.to.add.favorites.list")); return false; @@ -137,7 +155,7 @@ public class FavoritesManager implements ProjectComponent, JDOMExternalizable { for (String listName : myFavoritesRootsOrder) { result.add(new FavoritesListNode(myProject, listName, myDescriptions.get(listName))); } - ArrayList providers = new ArrayList<>(myProviders.values()); + ArrayList providers = new ArrayList<>(getProviders().values()); Collections.sort(providers); for (FavoritesListProvider provider : providers) { result.add(provider.createFavoriteListNode(myProject)); @@ -192,7 +210,7 @@ public class FavoritesManager implements ProjectComponent, JDOMExternalizable { } public synchronized Comparator getCustomComparator(@NotNull final String name) { - return myProviders.get(name); + return getProviders().get(name); } private Pair createPairForNode(AbstractTreeNode node) { @@ -417,24 +435,6 @@ public class FavoritesManager implements ProjectComponent, JDOMExternalizable { @Override public void projectOpened() { - if (!ApplicationManager.getApplication().isUnitTestMode()) { - StartupManager.getInstance(myProject).registerPostStartupActivity(new DumbAwareRunnable() { - @Override - public void run() { - final FavoritesListProvider[] providers = Extensions.getExtensions(EP_NAME, myProject); - for (FavoritesListProvider provider : providers) { - myProviders.put(provider.getListName(myProject), provider); - } - final MyRootsChangeAdapter myPsiTreeChangeAdapter = new MyRootsChangeAdapter(); - - PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeAdapter, myProject); - if (myName2FavoritesRoots.isEmpty()) { - myDescriptions.put(myProject.getName(), "auto-added"); - createNewList(myProject.getName()); - } - } - }); - } } @Override @@ -449,7 +449,7 @@ public class FavoritesManager implements ProjectComponent, JDOMExternalizable { @Nullable public FavoritesListProvider getListProvider(@Nullable String name) { - return myProviders.get(name); + return getProviders().get(name); } @Override diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/FavoritesViewToolWindowFactory.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/FavoritesViewToolWindowFactory.java index f774a2bc6816..2deb175a4641 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/FavoritesViewToolWindowFactory.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/FavoritesViewToolWindowFactory.java @@ -38,4 +38,9 @@ public class FavoritesViewToolWindowFactory implements ToolWindowFactory, DumbAw final Content content = contentManager.getFactory().createContent(panel, null, false); contentManager.addContent(content); } + + @Override + public boolean isDoNotActivateOnStart() { + return true; + } }