diff --git a/plugins/git4idea/src/git4idea/commands/GitTask.java b/plugins/git4idea/src/git4idea/commands/GitTask.java index d4c9e9bd8a22..bac23f90a71a 100644 --- a/plugins/git4idea/src/git4idea/commands/GitTask.java +++ b/plugins/git4idea/src/git4idea/commands/GitTask.java @@ -15,6 +15,7 @@ */ package git4idea.commands; +import com.intellij.concurrency.JobScheduler; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; @@ -32,8 +33,8 @@ import git4idea.GitVcs; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Timer; -import java.util.TimerTask; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -258,7 +259,7 @@ public class GitTask { // To minimize code duplication we use GitTaskDelegate. private abstract class BackgroundableTask extends Task.Backgroundable implements TaskExecution { - private GitTaskDelegate myDelegate; + private final GitTaskDelegate myDelegate; public BackgroundableTask(@Nullable final Project project, @NotNull GitHandler handler, @NotNull final String processTitle) { super(project, processTitle, true); @@ -308,7 +309,7 @@ public class GitTask { } private abstract class ModalTask extends Task.Modal implements TaskExecution { - private GitTaskDelegate myDelegate; + private final GitTaskDelegate myDelegate; public ModalTask(@Nullable final Project project, @NotNull GitHandler handler, @NotNull final String processTitle) { super(project, processTitle, true); @@ -338,11 +339,11 @@ public class GitTask { * If yes, kills the GitHandler. */ private static class GitTaskDelegate implements Disposable { - private GitHandler myHandler; + private final GitHandler myHandler; private ProgressIndicator myIndicator; - private TaskExecution myTask; - private Timer myTimer; - private Project myProject; + private final TaskExecution myTask; + private ScheduledFuture myTimer; + private final Project myProject; public GitTaskDelegate(Project project, GitHandler handler, TaskExecution task) { myProject = project; @@ -353,27 +354,26 @@ public class GitTask { public void run(ProgressIndicator indicator) { myIndicator = indicator; - myTimer = new Timer("Git task delegate"); - myTimer.schedule(new TimerTask() { - @Override - public void run() { + myTimer = JobScheduler.getScheduler().scheduleWithFixedDelay( + ()-> { if (myIndicator != null && myIndicator.isCanceled()) { try { if (myHandler != null) { myHandler.destroyProcess(); } - } finally { - Disposer.dispose(GitTaskDelegate.this); + } + finally { + Disposer.dispose(this); } } - } - }, 0, 200); + }, 0, 200, TimeUnit.MILLISECONDS); myTask.execute(indicator); } + @Override public void dispose() { if (myTimer != null) { - myTimer.cancel(); + myTimer.cancel(false); } } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/auth/SvnAuthenticationNotifier.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/auth/SvnAuthenticationNotifier.java index 38a953d31010..430ad73509cd 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/auth/SvnAuthenticationNotifier.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/auth/SvnAuthenticationNotifier.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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,6 +15,7 @@ */ package org.jetbrains.idea.svn.auth; +import com.intellij.concurrency.JobScheduler; import com.intellij.notification.NotificationType; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; @@ -65,7 +66,8 @@ import java.io.FilenameFilter; import java.net.*; import java.util.*; import java.util.List; -import java.util.Timer; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; public class SvnAuthenticationNotifier extends GenericNotifierImpl { private static final Logger LOG = Logger.getInstance(SvnAuthenticationNotifier.class); @@ -76,7 +78,7 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl myCopiesPassiveResults; - private Timer myTimer; + private ScheduledFuture myTimer; private volatile boolean myVerificationInProgress; public SvnAuthenticationNotifier(final SvnVcs svnVcs) { @@ -91,18 +93,13 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl