revert "CloudGitRemoteDetector should be lazy"
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Fri, 24 Jul 2015 14:09:41 +0000 (16:09 +0200)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Fri, 24 Jul 2015 14:12:31 +0000 (16:12 +0200)
platform/dvcs-impl/src/com/intellij/dvcs/repo/VcsRepositoryManager.java
plugins/git4idea/remote-servers-git/src/META-INF/remote-servers-git.xml
plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/importProject/CloudGitRemoteDetector.java
plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java

index fe71129caa4ef24f8e60c99646a26f5f514d49a6..62a069125c2afab636010a347d6ad636eb0428c8 100644 (file)
@@ -59,7 +59,7 @@ public class VcsRepositoryManager {
     return ServiceManager.getService(project, VcsRepositoryManager.class);
   }
 
-  static final class MyStartUpActivity implements StartupActivity, DumbAware {
+  public static final class MyStartUpActivity implements StartupActivity, DumbAware {
     @Override
     public void runActivity(@NotNull final Project project) {
       if (!project.isDefault() && !ApplicationManager.getApplication().isUnitTestMode()) {
index 56683712177892dcb8f61e146018187c1fe96c07..8900c7821740ab51c2b69dedd80b390fb2a6c333 100644 (file)
@@ -7,7 +7,12 @@
 
   <extensions defaultExtensionNs="com.intellij">
     <projectStructureDetector implementation="com.intellij.remoteServer.util.importProject.CloudGitProjectStructureDetector"/>
-    <postStartupActivity implementation="com.intellij.remoteServer.util.importProject.CloudGitRemoteDetector$MyStartUpActivity"/>
-    <projectService serviceImplementation="com.intellij.remoteServer.util.importProject.CloudGitRemoteDetector"/>
   </extensions>
+
+  <project-components>
+    <component>
+      <implementation-class>com.intellij.remoteServer.util.importProject.CloudGitRemoteDetector</implementation-class>
+    </component>
+  </project-components>
+
 </idea-plugin>
index b92a232231016629c741b9ae1137f55661e830e2..f5bc8f14b51001f7841409e3231fdce3965ebde1 100644 (file)
@@ -15,6 +15,7 @@
  */
 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;
@@ -28,12 +29,10 @@ 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.ServiceManager;
+import com.intellij.openapi.components.AbstractProjectComponent;
 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;
@@ -62,15 +61,20 @@ import java.util.Map;
 /**
  * @author michael.golubev
  */
-public class CloudGitRemoteDetector {
-  private final Project myProject;
+public class CloudGitRemoteDetector extends AbstractProjectComponent implements GitRepositoryChangeListener {
+
+  private final GitRepositoryManager myRepositoryManager;
+  private final RunManagerEx myRunManager;
 
   private final CloudNotifier myNotifier;
 
   private final List<CloudTypeDelegate> myDelegates;
 
-  public CloudGitRemoteDetector(@NotNull Project project) {
-    myProject = project;
+  public CloudGitRemoteDetector(Project project, GitRepositoryManager repositoryManager, RunManager runManager) {
+    super(project);
+    myRepositoryManager = repositoryManager;
+    myRunManager = (RunManagerEx)runManager;
+
     myNotifier = new CloudNotifier("Git remotes detector");
 
     myDelegates = new ArrayList<CloudTypeDelegate>();
@@ -79,36 +83,22 @@ public class CloudGitRemoteDetector {
     }
   }
 
-  private static CloudGitRemoteDetector getInstance() {
-    return ServiceManager.getService(CloudGitRemoteDetector.class);
-  }
-
-  static final class MyStartUpActivity implements StartupActivity, DumbAware {
-    @Override
-    public void runActivity(@NotNull final Project project) {
-      if (project.isDefault()) {
-        return;
-      }
+  @Override
+  public void projectOpened() {
+    myProject.getMessageBus().connect().subscribe(GitRepository.GIT_REPO_CHANGE, this);
 
-      project.getMessageBus().connect().subscribe(GitRepository.GIT_REPO_CHANGE, new GitRepositoryChangeListener() {
-        @Override
-        public void repositoryChanged(@NotNull GitRepository repository) {
-          getInstance().repositoryChanged(repository);
-        }
-      });
+    myRunManager.addRunManagerListener(new RunManagerAdapter() {
 
-      RunManagerEx.getInstanceEx(project).addRunManagerListener(new RunManagerAdapter() {
-        @Override
-        public void runConfigurationAdded(@NotNull RunnerAndConfigurationSettings settings) {
-          getInstance().onRunConfigurationAddedOrChanged(settings);
-        }
+      @Override
+      public void runConfigurationAdded(@NotNull RunnerAndConfigurationSettings settings) {
+        onRunConfigurationAddedOrChanged(settings);
+      }
 
-        @Override
-        public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) {
-          getInstance().onRunConfigurationAddedOrChanged(settings);
-        }
-      });
-    }
+      @Override
+      public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) {
+        onRunConfigurationAddedOrChanged(settings);
+      }
+    });
   }
 
   private void onRunConfigurationAddedOrChanged(RunnerAndConfigurationSettings settings) {
@@ -118,7 +108,8 @@ public class CloudGitRemoteDetector {
     }
   }
 
-  private void repositoryChanged(@NotNull GitRepository repository) {
+  @Override
+  public void repositoryChanged(@NotNull GitRepository repository) {
     for (CloudTypeDelegate delegate : myDelegates) {
       delegate.repositoryChanged(repository);
     }
@@ -157,7 +148,7 @@ public class CloudGitRemoteDetector {
 
     private boolean hasRunConfig4Repository(GitRepository repository) {
       List<RunConfiguration> runConfigurations
-        = RunManagerEx.getInstanceEx(myProject).getConfigurationsList(DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(getCloudType()));
+        = myRunManager.getConfigurationsList(DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(getCloudType()));
 
       VirtualFile repositoryRoot = repository.getRoot();
 
@@ -193,7 +184,7 @@ public class CloudGitRemoteDetector {
         return;
       }
 
-      GitRepository repository = GitRepositoryManager.getInstance(myProject).getRepositoryForRoot(contentRoot);
+      GitRepository repository = myRepositoryManager.getRepositoryForRoot(contentRoot);
       if (repository == null) {
         return;
       }
index 02669817a4c2e1cc0405ff3aeb3c60018a3c0242..b581f9f00ea596488c04c7d88edf4e5bbdbbb41c 100644 (file)
@@ -18,7 +18,6 @@ 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;
@@ -28,6 +27,7 @@ import org.jetbrains.annotations.NotNull;
 import java.util.List;
 
 public class GitRepositoryManager extends AbstractRepositoryManager<GitRepository> {
+
   @NotNull private final GitPlatformFacade myPlatformFacade;
   @NotNull private final Project myProject;
 
@@ -38,10 +38,6 @@ public class GitRepositoryManager extends AbstractRepositoryManager<GitRepositor
     myPlatformFacade = platformFacade;
   }
 
-  public static GitRepositoryManager getInstance(@NotNull Project project) {
-    return ServiceManager.getService(project, GitRepositoryManager.class);
-  }
-
   @Override
   public boolean isSyncEnabled() {
     return myPlatformFacade.getSettings(myProject).getSyncSetting() == DvcsSyncSettings.Value.SYNC &&