NotificationsManager as service
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Wed, 7 Aug 2019 16:45:04 +0000 (18:45 +0200)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Thu, 8 Aug 2019 05:06:11 +0000 (08:06 +0300)
GitOrigin-RevId: c2ad160275a8f662e73b62c22a7ad23b61a15ece

18 files changed:
platform/configuration-store-impl/src/ProjectSaveSessionProducerManager.kt
platform/core-api/src/com/intellij/openapi/components/ComponentManager.java
platform/platform-api/src/com/intellij/notification/NotificationsManager.java
platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java
platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java
platform/platform-resources/src/META-INF/PlatformExtensions.xml
platform/platform-resources/src/componentSets/Platform.xml
platform/platform-resources/src/componentSets/PlatformLangComponents.xml
plugins/git4idea/resources/META-INF/plugin.xml
plugins/git4idea/src/git4idea/GitVcs.java
plugins/git4idea/src/git4idea/annotate/GitAnnotationProvider.java
plugins/git4idea/src/git4idea/diff/GitDiffProvider.java
plugins/git4idea/src/git4idea/history/GitHistoryProvider.java
plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java
plugins/git4idea/src/git4idea/roots/GitIntegrationEnabler.java
plugins/git4idea/src/git4idea/util/GitVcsConsoleWriter.java
plugins/git4idea/src/git4idea/vfs/GitVFSListener.java
plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java

index d440edf6f10f2860c0fcbeac66d37a622fc4710b..326704d683bdf99aef1d2d1a6ec653dd7b8fd827 100644 (file)
@@ -3,6 +3,7 @@ package com.intellij.configurationStore
 
 import com.intellij.notification.Notifications
 import com.intellij.notification.NotificationsManager
+import com.intellij.openapi.application.ApplicationManager
 import com.intellij.openapi.application.runWriteAction
 import com.intellij.openapi.components.impl.stores.SaveSessionAndFile
 import com.intellij.openapi.project.Project
@@ -80,8 +81,8 @@ internal class ProjectSaveSessionProducerManager(private val project: Project) :
   }
 
   private fun getUnableToSaveNotifications(): Array<out UnableToSaveProjectNotification> {
-    return NotificationsManager.getNotificationsManager()
-      .getNotificationsOfType(UnableToSaveProjectNotification::class.java, project)
+    val notificationManager = ApplicationManager.getApplication().getService(NotificationsManager::class.java, false) ?: return emptyArray()
+    return notificationManager.getNotificationsOfType(UnableToSaveProjectNotification::class.java, project)
   }
 }
 
index ffa6c420765261a90fbced053c8a5cccdfbd7c1e..51d21edc7881aac69f771a5f02c1cfa860ce32ba 100644 (file)
@@ -98,6 +98,11 @@ public interface ComponentManager extends UserDataHolder, Disposable, AreaInstan
   Condition<?> getDisposed();
 
   @ApiStatus.Internal
+  default <T> T getService(@NotNull Class<T> serviceClass) {
+    return getService(serviceClass, true);
+  }
+
+  @ApiStatus.Internal
   default <T> T getService(@NotNull Class<T> serviceClass, boolean isCreate) {
     // default impl to keep backward compatibility
     //noinspection unchecked
index 0cad3403cee38c0d75dfbbed04cd144866d642ae..f0a38970605826e323a1aca053551b7116e4cd7f 100644 (file)
@@ -1,19 +1,4 @@
-/*
- * Copyright 2000-2009 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.notification;
 
 import com.intellij.openapi.application.ApplicationManager;
@@ -21,15 +6,12 @@ import com.intellij.openapi.project.Project;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-/**
- * @author spleaner
- */
 public abstract class NotificationsManager {
   public static NotificationsManager getNotificationsManager() {
-    return ApplicationManager.getApplication().getComponent(NotificationsManager.class);
+    return ApplicationManager.getApplication().getService(NotificationsManager.class);
   }
 
-  public abstract void expire(@NotNull final Notification notification);
+  public abstract void expire(@NotNull Notification notification);
 
   @NotNull
   public abstract <T extends Notification> T[] getNotificationsOfType(@NotNull Class<T> klass, @Nullable Project project);
index f0169311550dbdc2503ce5442c98c2fc15dc589b..47155305b0fc44c694a730950a9abd94b26f6cc0 100644 (file)
@@ -1,18 +1,4 @@
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.execution;
 
 import com.intellij.CommonBundle;
@@ -53,7 +39,6 @@ public abstract class ExecutableValidator {
   private static final NotificationGroup ourNotificationGroup = new NotificationGroup("External Executable Critical Failures",
                                                                               STICKY_BALLOON, true);
   @NotNull protected final Project myProject;
-  @NotNull protected final NotificationsManager myNotificationManager;
 
   @NotNull private final String myNotificationErrorTitle;
   @NotNull private final String myNotificationErrorDescription;
@@ -69,7 +54,6 @@ public abstract class ExecutableValidator {
     myProject = project;
     myNotificationErrorTitle = notificationErrorTitle;
     myNotificationErrorDescription = notificationErrorDescription;
-    myNotificationManager = NotificationsManager.getNotificationsManager();
   }
 
   protected abstract String getCurrentExecutable();
@@ -142,11 +126,11 @@ public abstract class ExecutableValidator {
     }
 
     LOG.info("Executable is not valid: " + getCurrentExecutable());
-    if (myNotificationManager.getNotificationsOfType(notification.getClass(), myProject).length == 0) { // show only once
+    if (NotificationsManager.getNotificationsManager().getNotificationsOfType(notification.getClass(), myProject).length == 0) { // show only once
       notification.notify(myProject.isDefault() ? null : myProject);
     }
   }
-  
+
   @NotNull
   protected String prepareDescription(@NotNull String description, boolean appendFixIt) {
     StringBuilder result = new StringBuilder();
index ef7626863d1616c41b0aa7a4c2e99909358b05e6..f60e4d9dfa10e32a10a3f5920530a4445b6be7fd 100644 (file)
@@ -78,7 +78,6 @@ public final class NotificationsManagerImpl extends NotificationsManager {
 
   public NotificationsManagerImpl() {
     MessageBusConnection connection = ApplicationManager.getApplication().getMessageBus().connect();
-    connection.subscribe(Notifications.TOPIC, new MyNotificationListener(null));
     connection.subscribe(ProjectManager.TOPIC, new ProjectManagerListener() {
       @Override
       public void projectClosed(@NotNull Project project) {
@@ -1042,9 +1041,14 @@ public final class NotificationsManagerImpl extends NotificationsManager {
     }
   }
 
-  private static class MyNotificationListener implements Notifications {
+  static class MyNotificationListener implements Notifications {
     private final Project myProject;
 
+    @SuppressWarnings("unused")
+    MyNotificationListener() {
+      myProject = null;
+    }
+
     private MyNotificationListener(@Nullable Project project) {
       myProject = project;
     }
index 0e3b8e2183364a515cae71d2d532b921c817fc08..e92978a2325a4d0650fbc3e1ea47728b103a2853 100644 (file)
     <applicationService serviceInterface="com.intellij.openapi.editor.EditorFactory"
                         serviceImplementation="com.intellij.openapi.editor.impl.EditorFactoryImpl"/>
 
+    <applicationService serviceInterface="com.intellij.notification.NotificationsManager"
+                        serviceImplementation="com.intellij.notification.impl.NotificationsManagerImpl"/>
+
     <projectService serviceInterface="com.intellij.execution.RunManager" serviceImplementation="com.intellij.execution.impl.RunManagerImpl"/>
     <projectService serviceImplementation="com.intellij.execution.impl.IprRunManagerImpl"/>
 
index 862e4c163101133ead1ded7293f9def355b845c2..c7a4778f806c8270ec7a81b18e27cb5f901b07ae 100644 (file)
     </component>
 
     <component>
-      <interface-class>com.intellij.notification.NotificationsManager</interface-class>
-      <implementation-class>com.intellij.notification.impl.NotificationsManagerImpl</implementation-class>
-    </component>
-
-    <component>
       <implementation-class>com.intellij.openapi.util.FoundationLoader</implementation-class>
       <headless-implementation-class/>
     </component>
index 3e39b0aedd1b6b0aa2209b0e8ccbd66d23796bb8..8b25baf9adcdf6e0e7b9fd60f924339444ea205e 100644 (file)
@@ -29,6 +29,8 @@
     <listener class="com.intellij.openapi.wm.impl.WindowDressing" topic="com.intellij.openapi.project.ProjectManagerListener" activeInHeadlessMode="false"/>
     <listener class="com.intellij.openapi.editor.impl.EditorLastActionTracker$MyAnActionListener" topic="com.intellij.openapi.actionSystem.ex.AnActionListener"/>
     <listener class="com.intellij.diagnostic.IdeaFreezeReporter" topic="com.intellij.diagnostic.IdePerformanceListener" activeInTestMode="false" activeInHeadlessMode="false"/>
+
+    <listener class="com.intellij.notification.impl.NotificationsManagerImpl$MyNotificationListener" topic="com.intellij.notification.Notifications"/>
   </applicationListeners>
   <projectListeners>
     <listener class="com.intellij.ide.bookmarks.BookmarkManager$BookmarkManagerPsiDocumentManagerListener" topic="com.intellij.psi.PsiDocumentListener" activeInTestMode="false"/>
index b40e6616fa8fca24f64632fbd3adeb224fdfa3d5..d99407ccddcfef6aa6a5c7e26601f9e1a0ec3c5c 100644 (file)
     <projectService serviceImplementation="git4idea.ui.branch.GitBranchManager"/>
     <projectService serviceImplementation="git4idea.branch.GitBranchIncomingOutgoingManager"/>
     <projectService serviceImplementation="git4idea.annotate.GitAnnotationProvider"/>
-    <projectService serviceImplementation="git4idea.diff.GitDiffProvider"/>
     <projectService serviceImplementation="git4idea.checkin.GitCheckinEnvironment"/>
     <projectService serviceImplementation="git4idea.status.GitChangeProvider"/>
-    <projectService serviceImplementation="git4idea.history.GitHistoryProvider"/>
-    <projectService serviceImplementation="git4idea.rollback.GitRollbackEnvironment"/>
     <projectService serviceImplementation="git4idea.config.GitVcsSettings" configurationSchemaKey="versionControl.git"/>
     <projectService serviceImplementation="git4idea.config.GitRebaseSettings"/>
     <projectService serviceImplementation="git4idea.config.GitSharedSettings" />
     <projectService serviceImplementation="git4idea.config.GitExecutableValidator"/>
-    <projectService serviceImplementation="git4idea.util.GitVcsConsoleWriter"/>
     <projectService serviceInterface="git4idea.branch.GitBrancher"
                     serviceImplementation="git4idea.branch.GitBrancherImpl"/>
     <projectService serviceImplementation="git4idea.GitUserRegistry" />
index 5f8c617ac76762c3db7bb3bff0ad1b027379075a..ea082fee1edec97446b1218e6fa83dcfc7bb8486 100644 (file)
@@ -38,7 +38,6 @@ import git4idea.changes.GitOutgoingChangesProvider;
 import git4idea.checkin.GitCheckinEnvironment;
 import git4idea.checkin.GitCommitAndPushExecutor;
 import git4idea.checkout.GitCheckoutProvider;
-import git4idea.commands.Git;
 import git4idea.config.GitExecutableManager;
 import git4idea.config.GitExecutableValidator;
 import git4idea.config.GitVcsSettings;
@@ -71,8 +70,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
 /**
  * Git VCS implementation
  */
-public class GitVcs extends AbstractVcs<CommittedChangeList> {
-
+public final class GitVcs extends AbstractVcs<CommittedChangeList> {
   public static final String NAME = "Git";
   public static final String ID = "git";
 
@@ -81,14 +79,7 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
 
   @Nullable private final ChangeProvider myChangeProvider;
   @Nullable private final GitCheckinEnvironment myCheckinEnvironment;
-  private final RollbackEnvironment myRollbackEnvironment;
-  @NotNull private final GitExecutableManager myExecutableManager;
   private final GitUpdateEnvironment myUpdateEnvironment;
-  private final GitAnnotationProvider myAnnotationProvider;
-  private final DiffProvider myDiffProvider;
-  private final GitHistoryProvider myHistoryProvider;
-  @NotNull private final Git myGit;
-  private final GitVcsConsoleWriter myVcsConsoleWriter;
   private final RevisionSelector myRevSelector;
   private final GitCommittedChangeListProvider myCommittedChangeListProvider;
 
@@ -106,33 +97,19 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
     return ObjectUtils.notNull((GitVcs)ProjectLevelVcsManager.getInstance(project).findVcsByName(NAME));
   }
 
-  public GitVcs(@NotNull Project project, @NotNull Git git,
-                @NotNull GitVcsConsoleWriter vcsConsoleWriter,
-                @NotNull final GitAnnotationProvider gitAnnotationProvider,
-                @NotNull final GitDiffProvider gitDiffProvider,
-                @NotNull final GitHistoryProvider gitHistoryProvider,
-                @NotNull final GitRollbackEnvironment gitRollbackEnvironment,
-                @NotNull final GitVcsSettings gitProjectSettings,
-                @NotNull GitExecutableManager executableManager) {
+  public GitVcs(@NotNull Project project) {
     super(project, NAME);
-    myGit = git;
-    myVcsConsoleWriter = vcsConsoleWriter;
-    myChangeProvider = project.isDefault() ? null : ServiceManager.getService(project, GitChangeProvider.class);
+
+    myChangeProvider = project.isDefault() ? null : project.getService(GitChangeProvider.class);
     myCheckinEnvironment = project.isDefault() ? null : ServiceManager.getService(project, GitCheckinEnvironment.class);
-    myAnnotationProvider = gitAnnotationProvider;
-    myDiffProvider = gitDiffProvider;
-    myHistoryProvider = gitHistoryProvider;
-    myRollbackEnvironment = gitRollbackEnvironment;
-    myExecutableManager = executableManager;
     myRevSelector = new GitRevisionSelector();
-    myUpdateEnvironment = new GitUpdateEnvironment(myProject, gitProjectSettings);
+    myUpdateEnvironment = new GitUpdateEnvironment(myProject, GitVcsSettings.getInstance(project));
     myCommittedChangeListProvider = new GitCommittedChangeListProvider(myProject);
     myOutgoingChangesProvider = new GitOutgoingChangesProvider(myProject);
     myCommitAndPushExecutor = myCheckinEnvironment != null ? new GitCommitAndPushExecutor() : null;
     myExecutableValidator = new GitExecutableValidator(myProject);
   }
 
-
   public ReadWriteLock getCommandLock() {
     return myCommandLock;
   }
@@ -172,18 +149,18 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
   @Override
   @NotNull
   public RollbackEnvironment createRollbackEnvironment() {
-    return myRollbackEnvironment;
+    return myProject.getService(GitRollbackEnvironment.class);
   }
 
   @Override
   @NotNull
   public GitHistoryProvider getVcsHistoryProvider() {
-    return myHistoryProvider;
+    return myProject.getService(GitHistoryProvider.class);
   }
 
   @Override
   public GitHistoryProvider getVcsBlockHistoryProvider() {
-    return myHistoryProvider;
+    return myProject.getService(GitHistoryProvider.class);
   }
 
   @Override
@@ -201,13 +178,13 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
   @Override
   @NotNull
   public AnnotationProviderEx getAnnotationProvider() {
-    return myAnnotationProvider;
+    return myProject.getService(GitAnnotationProvider.class);
   }
 
   @Override
   @NotNull
   public DiffProvider getDiffProvider() {
-    return myDiffProvider;
+    return myProject.getService(GitDiffProvider.class);
   }
 
   @Override
@@ -254,10 +231,10 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
   protected void activate() {
     ApplicationManager.getApplication().executeOnPooledThread(
       () -> ProgressManager.getInstance().executeProcessUnderProgress(
-        () -> myExecutableManager.testGitExecutableVersionValid(myProject), new EmptyProgressIndicator()));
+        () -> GitExecutableManager.getInstance().testGitExecutableVersionValid(myProject), new EmptyProgressIndicator()));
 
     if (myVFSListener == null) {
-      myVFSListener = GitVFSListener.createInstance(this, myGit, myVcsConsoleWriter);
+      myVFSListener = GitVFSListener.createInstance(this);
     }
     ServiceManager.getService(myProject, VcsUserRegistry.class); // make sure to read the registry before opening commit dialog
 
@@ -323,7 +300,7 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
    */
   @NotNull
   public GitVersion getVersion() {
-    return myExecutableManager.getVersion(myProject);
+    return GitExecutableManager.getInstance().getVersion(myProject);
   }
 
   /**
@@ -332,7 +309,7 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
    */
   @Deprecated
   public void showCommandLine(final String cmdLine) {
-    myVcsConsoleWriter.showCommandLine(cmdLine);
+    GitVcsConsoleWriter.getInstance(myProject).showCommandLine(cmdLine);
   }
 
   @Override
@@ -384,7 +361,7 @@ public class GitVcs extends AbstractVcs<CommittedChangeList> {
   public void enableIntegration() {
     Runnable task = () -> {
       Collection<VcsRoot> roots = ServiceManager.getService(myProject, VcsRootDetector.class).detect();
-      new GitIntegrationEnabler(this, myGit).enable(roots);
+      new GitIntegrationEnabler(this).enable(roots);
     };
     BackgroundTaskUtil.executeOnPooledThread(myProject, task);
   }
index 33be61b84c76e8f5876615156fd5d0f0848abe45..574364927664e4927d66cc806e5e53157aa1491d 100644 (file)
@@ -2,6 +2,7 @@
 package git4idea.annotate;
 
 import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.components.Service;
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.diagnostic.Attachment;
 import com.intellij.openapi.diagnostic.Logger;
@@ -48,7 +49,8 @@ import org.jetbrains.annotations.Nullable;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 
-public class GitAnnotationProvider implements AnnotationProviderEx {
+@Service
+public final class GitAnnotationProvider implements AnnotationProviderEx {
   private final Project myProject;
   @NonNls private static final String SUBJECT_KEY = "summary";
   @NonNls private static final String FILENAME_KEY = "filename";
@@ -379,7 +381,7 @@ public class GitAnnotationProvider implements AnnotationProviderEx {
   }
 
   @NotNull
-  private CachedData cacheData(@NotNull GitFileAnnotation annotation) {
+  private static CachedData cacheData(@NotNull GitFileAnnotation annotation) {
     return new CachedData(annotation.getLines());
   }
 
index eb61bf7cd218757f5fde56290f243ecdc57eef09..566e10386886e5bf75c7f8f9eeb733737bd403f0 100644 (file)
@@ -1,6 +1,7 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package git4idea.diff;
 
+import com.intellij.openapi.components.Service;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.vcs.CommittedChangesProvider;
@@ -33,7 +34,8 @@ import java.util.Collections;
 /**
  * Git diff provider
  */
-public class GitDiffProvider implements DiffProvider, DiffMixin {
+@Service
+public final class GitDiffProvider implements DiffProvider, DiffMixin {
   /**
    * The context project
    */
index 36ca6b5d60869b22b3416699662c6c343064fcbb..b18fe835c1de6bb8179ce5ed5f1992696cb5275d 100644 (file)
@@ -3,6 +3,7 @@ package git4idea.history;
 
 import com.intellij.openapi.actionSystem.ActionManager;
 import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.components.Service;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.text.StringUtil;
@@ -37,9 +38,10 @@ import static com.intellij.util.containers.ContainerUtil.getFirstItem;
 /**
  * Git history provider implementation
  */
-public class GitHistoryProvider implements VcsHistoryProviderEx,
-                                           VcsCacheableHistorySessionFactory<Boolean, VcsAbstractHistorySession>,
-                                           VcsBaseRevisionAdviser {
+@Service
+public final class GitHistoryProvider implements VcsHistoryProviderEx,
+                                                 VcsCacheableHistorySessionFactory<Boolean, VcsAbstractHistorySession>,
+                                                 VcsBaseRevisionAdviser {
   private static final Logger LOG = Logger.getInstance(GitHistoryProvider.class.getName());
 
   @NotNull private final Project myProject;
index 66301abc76c80ed4f447f163ab4e9b50b76fb49f..71581a83c439ac746e3547cfadbc768b2cbd3b90 100644 (file)
@@ -3,6 +3,7 @@ package git4idea.rollback;
 
 import com.intellij.dvcs.DvcsUtil;
 import com.intellij.openapi.application.AccessToken;
+import com.intellij.openapi.components.Service;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.vcs.FilePath;
 import com.intellij.openapi.vcs.VcsException;
@@ -26,7 +27,8 @@ import org.jetbrains.annotations.NotNull;
 import java.io.File;
 import java.util.*;
 
-public class GitRollbackEnvironment implements RollbackEnvironment {
+@Service
+public final class GitRollbackEnvironment implements RollbackEnvironment {
   @NotNull private final Project myProject;
 
   public GitRollbackEnvironment(@NotNull Project project) {
index 7ae8efc628f1208ba2a31cb92709bdb6ed3daf6e..fbdbe4ba499dcc382e794a22623d908b2c74af86 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package git4idea.roots;
 
 import com.intellij.openapi.diagnostic.Logger;
@@ -11,23 +11,17 @@ import git4idea.commands.Git;
 import git4idea.commands.GitCommandResult;
 import org.jetbrains.annotations.NotNull;
 
-public class GitIntegrationEnabler extends VcsIntegrationEnabler {
-
+public final class GitIntegrationEnabler extends VcsIntegrationEnabler {
   private static final Logger LOG = Logger.getInstance(GitIntegrationEnabler.class);
 
-  @NotNull private final Git myGit;
-  @NotNull private final GitVcs myVcs;
-
-  public GitIntegrationEnabler(@NotNull GitVcs vcs, @NotNull Git git) {
+  public GitIntegrationEnabler(@NotNull GitVcs vcs) {
     super(vcs);
-    myVcs = vcs;
-    myGit = git;
   }
 
   @Override
   protected boolean initOrNotifyError(@NotNull final VirtualFile projectDir) {
     VcsNotifier vcsNotifier = VcsNotifier.getInstance(myProject);
-    GitCommandResult result = myGit.init(myProject, projectDir);
+    GitCommandResult result = Git.getInstance().init(myProject, projectDir);
     if (result.success()) {
       refreshVcsDir(projectDir, GitUtil.DOT_GIT);
       vcsNotifier.notifySuccess("Created Git repository in " + projectDir.getPresentableUrl());
index 674982e1679e5aad5ebb76a0ceb15a97ede429c9..9371b0ae22652e1f88b0f21a49f765fc8dbbbffb 100644 (file)
@@ -1,8 +1,8 @@
-// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package git4idea.util;
 
 import com.intellij.execution.ui.ConsoleViewContentType;
-import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.components.Service;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vcs.ProjectLevelVcsManager;
@@ -11,10 +11,11 @@ import org.jetbrains.annotations.NotNull;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
-public class GitVcsConsoleWriter {
+@Service
+public final class GitVcsConsoleWriter {
   @NotNull
   public static GitVcsConsoleWriter getInstance(@NotNull Project project) {
-    return ServiceManager.getService(project, GitVcsConsoleWriter.class);
+    return project.getService(GitVcsConsoleWriter.class);
   }
 
   private static final int MAX_CONSOLE_OUTPUT_SIZE = 10000;
index 6d912aa3f9bfe97d97187fe7cbe543f14fcd324e..a57e8ca1293d0766e7e2ae7f5f52398894729ce7 100644 (file)
@@ -33,20 +33,14 @@ import static com.intellij.util.containers.ContainerUtil.map;
 import static com.intellij.util.containers.ContainerUtil.map2Map;
 
 public class GitVFSListener extends VcsVFSListener {
-  private final Git myGit;
-  private final GitVcsConsoleWriter myVcsConsoleWriter;
 
-  private GitVFSListener(@NotNull GitVcs vcs, @NotNull Git git, @NotNull GitVcsConsoleWriter vcsConsoleWriter) {
+  private GitVFSListener(@NotNull GitVcs vcs) {
     super(vcs);
-    myGit = git;
-    myVcsConsoleWriter = vcsConsoleWriter;
   }
 
   @NotNull
-  public static GitVFSListener createInstance(@NotNull GitVcs vcs,
-                                              @NotNull Git git,
-                                              @NotNull GitVcsConsoleWriter vcsConsoleWriter) {
-    GitVFSListener listener = new GitVFSListener(vcs, git, vcsConsoleWriter);
+  public static GitVFSListener createInstance(@NotNull GitVcs vcs) {
+    GitVFSListener listener = new GitVFSListener(vcs);
     listener.installListeners();
     return listener;
   }
@@ -92,10 +86,10 @@ public class GitVFSListener extends VcsVFSListener {
           List<VirtualFile> files = e.getValue();
           pi.setText(root.getPresentableUrl());
           try {
-            retainedFiles.addAll(myGit.untrackedFiles(myProject, root, files));
+            retainedFiles.addAll(Git.getInstance().untrackedFiles(myProject, root, files));
           }
           catch (VcsException ex) {
-            myVcsConsoleWriter.showMessage(ex.getMessage());
+            GitVcsConsoleWriter.getInstance(myProject).showMessage(ex.getMessage());
           }
         }
         addedFiles.retainAll(retainedFiles);
@@ -222,7 +216,7 @@ public class GitVFSListener extends VcsVFSListener {
           RefreshVFsSynchronously.refreshFiles(toRefresh);
         }
         catch (VcsException ex) {
-          myVcsConsoleWriter.showMessage(ex.getMessage());
+          GitVcsConsoleWriter.getInstance(myProject).showMessage(ex.getMessage());
         }
       }
     });
@@ -257,7 +251,7 @@ public class GitVFSListener extends VcsVFSListener {
       GitLineHandler h = new GitLineHandler(myProject, root, GitCommand.MV);
       h.addParameters("-f");
       h.addRelativePaths(VcsUtil.getFilePath(info.myOldPath), VcsUtil.getFilePath(info.myNewPath));
-      myGit.runCommand(h);
+      Git.getInstance().runCommand(h);
       toRefresh.add(new File(info.myOldPath));
       toRefresh.add(new File(info.myNewPath));
     }
@@ -289,7 +283,7 @@ public class GitVFSListener extends VcsVFSListener {
             executor.execute(e.getKey(), e.getValue());
           }
           catch (final VcsException ex) {
-            myVcsConsoleWriter.showMessage(ex.getMessage());
+            GitVcsConsoleWriter.getInstance(myProject).showMessage(ex.getMessage());
           }
         }
         RefreshVFsSynchronously.refreshFiles(executor.getFilesToRefresh());
@@ -306,7 +300,7 @@ public class GitVFSListener extends VcsVFSListener {
   public void waitForAllEventsProcessedInTestMode() {
     assert ApplicationManager.getApplication().isUnitTestMode();
     ((ChangeListManagerImpl)myChangeListManager).waitEverythingDoneInTestMode();
-    ((ExternallyAddedFilesProcessorImpl)myExternalFilesProcessor).waitForEventsProcessedInTestMode();
+    myExternalFilesProcessor.waitForEventsProcessedInTestMode();
   }
 
 }
index a33a52195e5c95cb4e78f80a4f712f365166ec3a..5e07ab05fdc1633f6873ca2fe65070f3471749ee 100644 (file)
@@ -1,24 +1,11 @@
-/*
- * Copyright 2000-2012 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package org.jetbrains.idea.svn.commandLine;
 
 import com.intellij.execution.ExecutableValidator;
 import com.intellij.execution.process.ProcessOutput;
 import com.intellij.notification.Notification;
 import com.intellij.notification.NotificationType;
+import com.intellij.notification.NotificationsManager;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.util.Version;
 import com.intellij.openapi.util.registry.Registry;
@@ -34,8 +21,7 @@ import org.jetbrains.idea.svn.api.CmdVersionClient;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class SvnExecutableChecker extends ExecutableValidator {
-
+public final class SvnExecutableChecker extends ExecutableValidator {
   private static final Logger LOG = Logger.getInstance(SvnExecutableChecker.class);
 
   public static final String SVN_EXECUTABLE_LOCALE_REGISTRY_KEY = "svn.executable.locale";
@@ -77,7 +63,8 @@ public class SvnExecutableChecker extends ExecutableValidator {
   }
 
   public void expireAll() {
-    for (Notification notification : myNotificationManager.getNotificationsOfType(ExecutableNotValidNotification.class, myProject)) {
+    for (Notification notification : NotificationsManager.getNotificationsManager()
+      .getNotificationsOfType(ExecutableNotValidNotification.class, myProject)) {
       notification.expire();
     }
   }