From 9b40336fc64280a9920efc27f2b80f858b531262 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 24 Jul 2015 15:43:39 +0200 Subject: [PATCH] CloudGitRemoteDetector should be lazy --- .../dvcs/repo/VcsRepositoryManager.java | 2 +- .../src/META-INF/remote-servers-git.xml | 9 +-- .../importProject/CloudGitRemoteDetector.java | 67 +++++++++++-------- .../git4idea/repo/GitRepositoryManager.java | 8 ++- 4 files changed, 47 insertions(+), 39 deletions(-) diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/repo/VcsRepositoryManager.java b/platform/dvcs-impl/src/com/intellij/dvcs/repo/VcsRepositoryManager.java index 62a069125c2a..fe71129caa4e 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/repo/VcsRepositoryManager.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/repo/VcsRepositoryManager.java @@ -59,7 +59,7 @@ public class VcsRepositoryManager { return ServiceManager.getService(project, VcsRepositoryManager.class); } - public static final class MyStartUpActivity implements StartupActivity, DumbAware { + static final class MyStartUpActivity implements StartupActivity, DumbAware { @Override public void runActivity(@NotNull final Project project) { if (!project.isDefault() && !ApplicationManager.getApplication().isUnitTestMode()) { diff --git a/plugins/git4idea/remote-servers-git/src/META-INF/remote-servers-git.xml b/plugins/git4idea/remote-servers-git/src/META-INF/remote-servers-git.xml index 8900c7821740..566837121778 100644 --- a/plugins/git4idea/remote-servers-git/src/META-INF/remote-servers-git.xml +++ b/plugins/git4idea/remote-servers-git/src/META-INF/remote-servers-git.xml @@ -7,12 +7,7 @@ + + - - - - com.intellij.remoteServer.util.importProject.CloudGitRemoteDetector - - - diff --git a/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/importProject/CloudGitRemoteDetector.java b/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/importProject/CloudGitRemoteDetector.java index 704ced7f3d05..b92a23223101 100644 --- a/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/importProject/CloudGitRemoteDetector.java +++ b/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/importProject/CloudGitRemoteDetector.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,6 @@ */ package com.intellij.remoteServer.util.importProject; -import com.intellij.execution.RunManager; import com.intellij.execution.RunManagerAdapter; import com.intellij.execution.RunManagerEx; import com.intellij.execution.RunnerAndConfigurationSettings; @@ -29,10 +28,12 @@ import com.intellij.ide.util.projectWizard.ImportFromSourcesProvider; import com.intellij.ide.wizard.Step; import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; -import com.intellij.openapi.components.AbstractProjectComponent; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; +import com.intellij.openapi.startup.StartupActivity; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; @@ -61,20 +62,15 @@ import java.util.Map; /** * @author michael.golubev */ -public class CloudGitRemoteDetector extends AbstractProjectComponent implements GitRepositoryChangeListener { - - private final GitRepositoryManager myRepositoryManager; - private final RunManagerEx myRunManager; +public class CloudGitRemoteDetector { + private final Project myProject; private final CloudNotifier myNotifier; private final List myDelegates; - public CloudGitRemoteDetector(Project project, GitRepositoryManager repositoryManager, RunManager runManager) { - super(project); - myRepositoryManager = repositoryManager; - myRunManager = (RunManagerEx)runManager; - + public CloudGitRemoteDetector(@NotNull Project project) { + myProject = project; myNotifier = new CloudNotifier("Git remotes detector"); myDelegates = new ArrayList(); @@ -83,22 +79,36 @@ public class CloudGitRemoteDetector extends AbstractProjectComponent implements } } - @Override - public void projectOpened() { - myProject.getMessageBus().connect().subscribe(GitRepository.GIT_REPO_CHANGE, this); + private static CloudGitRemoteDetector getInstance() { + return ServiceManager.getService(CloudGitRemoteDetector.class); + } - myRunManager.addRunManagerListener(new RunManagerAdapter() { - - @Override - public void runConfigurationAdded(@NotNull RunnerAndConfigurationSettings settings) { - onRunConfigurationAddedOrChanged(settings); + static final class MyStartUpActivity implements StartupActivity, DumbAware { + @Override + public void runActivity(@NotNull final Project project) { + if (project.isDefault()) { + return; } - @Override - public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) { - onRunConfigurationAddedOrChanged(settings); - } - }); + project.getMessageBus().connect().subscribe(GitRepository.GIT_REPO_CHANGE, new GitRepositoryChangeListener() { + @Override + public void repositoryChanged(@NotNull GitRepository repository) { + getInstance().repositoryChanged(repository); + } + }); + + RunManagerEx.getInstanceEx(project).addRunManagerListener(new RunManagerAdapter() { + @Override + public void runConfigurationAdded(@NotNull RunnerAndConfigurationSettings settings) { + getInstance().onRunConfigurationAddedOrChanged(settings); + } + + @Override + public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) { + getInstance().onRunConfigurationAddedOrChanged(settings); + } + }); + } } private void onRunConfigurationAddedOrChanged(RunnerAndConfigurationSettings settings) { @@ -108,8 +118,7 @@ public class CloudGitRemoteDetector extends AbstractProjectComponent implements } } - @Override - public void repositoryChanged(@NotNull GitRepository repository) { + private void repositoryChanged(@NotNull GitRepository repository) { for (CloudTypeDelegate delegate : myDelegates) { delegate.repositoryChanged(repository); } @@ -148,7 +157,7 @@ public class CloudGitRemoteDetector extends AbstractProjectComponent implements private boolean hasRunConfig4Repository(GitRepository repository) { List runConfigurations - = myRunManager.getConfigurationsList(DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(getCloudType())); + = RunManagerEx.getInstanceEx(myProject).getConfigurationsList(DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(getCloudType())); VirtualFile repositoryRoot = repository.getRoot(); @@ -184,7 +193,7 @@ public class CloudGitRemoteDetector extends AbstractProjectComponent implements return; } - GitRepository repository = myRepositoryManager.getRepositoryForRoot(contentRoot); + GitRepository repository = GitRepositoryManager.getInstance(myProject).getRepositoryForRoot(contentRoot); if (repository == null) { return; } diff --git a/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java b/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java index 557e3504cc7a..02669817a4c2 100644 --- a/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java +++ b/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package git4idea.repo; import com.intellij.dvcs.branch.DvcsSyncSettings; import com.intellij.dvcs.repo.AbstractRepositoryManager; import com.intellij.dvcs.repo.VcsRepositoryManager; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import git4idea.GitPlatformFacade; import git4idea.GitUtil; @@ -27,7 +28,6 @@ import org.jetbrains.annotations.NotNull; import java.util.List; public class GitRepositoryManager extends AbstractRepositoryManager { - @NotNull private final GitPlatformFacade myPlatformFacade; @NotNull private final Project myProject; @@ -38,6 +38,10 @@ public class GitRepositoryManager extends AbstractRepositoryManager