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 08a0b4c7a15e..bbb4c6a14fc3 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/auth/SvnAuthenticationNotifier.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/auth/SvnAuthenticationNotifier.java @@ -1,10 +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-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. 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; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProcessCanceledException; @@ -18,9 +16,7 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.NamedRunnable; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.impl.GenericNotifierImpl; -import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.ex.WindowManagerEx; @@ -30,7 +26,10 @@ import com.intellij.util.net.HttpConfigurable; import com.intellij.util.proxy.CommonProxy; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.svn.*; +import org.jetbrains.idea.svn.RootsToWorkingCopies; +import org.jetbrains.idea.svn.SvnConfiguration; +import org.jetbrains.idea.svn.SvnVcs; +import org.jetbrains.idea.svn.WorkingCopy; import org.jetbrains.idea.svn.api.ClientFactory; import org.jetbrains.idea.svn.api.Revision; import org.jetbrains.idea.svn.api.Target; @@ -43,11 +42,17 @@ import javax.swing.*; import java.awt.*; import java.io.File; import java.net.*; -import java.util.*; import java.util.List; +import java.util.*; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import static com.intellij.openapi.application.ApplicationManager.getApplication; +import static com.intellij.openapi.util.text.StringUtil.isEmptyOrSpaces; +import static com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier.showOverChangesView; +import static java.util.Collections.synchronizedMap; +import static org.jetbrains.idea.svn.SvnBundle.message; +import static org.jetbrains.idea.svn.SvnConfigurable.selectConfigurationDirectory; import static org.jetbrains.idea.svn.SvnUtil.isAuthError; public class SvnAuthenticationNotifier extends GenericNotifierImpl { @@ -66,7 +71,7 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl()); + myCopiesPassiveResults = synchronizedMap(new HashMap<>()); myVerificationInProgress = false; } @@ -74,9 +79,8 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl resultRef = new Ref<>(); - final Runnable checker = () -> { try { - final boolean result = - interactiveValidation(obj.myProject, obj.getUrl(), obj.getRealm(), obj.getKind()); - log("ask result for: " + obj.getUrl() + " is: " + result); + final boolean result = interactiveValidation(obj.myProject, obj.getUrl(), obj.getRealm(), obj.getKind()); + LOG.debug("ask result for: " + obj.getUrl() + " is: " + result); resultRef.set(result); if (result) { onStateChangedToSuccess(obj); @@ -107,10 +107,9 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl outdatedRequests = new LinkedList<>(); - final Collection keys = getAllCurrentKeys(); - for (Url key : keys) { + final List outdatedRequests = new ArrayList<>(); + for (Url key : getAllCurrentKeys()) { final Url commonURLAncestor = key.commonAncestorWith(obj.getUrl()); - if ((commonURLAncestor != null) && (! StringUtil.isEmptyOrSpaces(commonURLAncestor.getHost())) && - (! StringUtil.isEmptyOrSpaces(commonURLAncestor.getPath()))) { - //final AuthenticationRequest currObj = getObj(key); - //if ((currObj != null) && passiveValidation(myVcs.getProject(), key, true, currObj.getRealm(), currObj.getKind())) { - outdatedRequests.add(key); - //} + if (commonURLAncestor != null && !isEmptyOrSpaces(commonURLAncestor.getHost()) && !isEmptyOrSpaces(commonURLAncestor.getPath())) { + outdatedRequests.add(key); } } - log("on state changed "); - ApplicationManager.getApplication().invokeLater(() -> { + LOG.debug("on state changed "); + getApplication().invokeLater(() -> { for (Url key : outdatedRequests) { removeLazyNotificationByKey(key); } @@ -160,26 +154,18 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl VcsBalloonProblemNotifier - .showOverChangesView(project, "Authentication failed: " + e.getMessage(), MessageType.ERROR, new NamedRunnable( - SvnBundle.message("confirmation.title.clear.authentication.cache")) { - @Override - public void run() { - clearAuthenticationCache(project, null, configuration - .getConfigurationDirectory()); - } - }, new NamedRunnable( - SvnBundle.message("action.title.select.configuration.directory")) { - @Override - public void run() { - SvnConfigurable.selectConfigurationDirectory(configuration.getConfigurationDirectory(), - s -> configuration.setConfigurationDirParameters(false, s), project, null); - } - } - ), ModalityState.NON_MODAL, project.getDisposed()); + getApplication().invokeLater(() -> showOverChangesView( + project, "Authentication failed: " + e.getMessage(), MessageType.ERROR, + new NamedRunnable(message("confirmation.title.clear.authentication.cache")) { + @Override + public void run() { + clearAuthenticationCache(project, null, configuration.getConfigurationDirectory()); + } + }, new NamedRunnable(message("action.title.select.configuration.directory")) { + @Override + public void run() { + selectConfigurationDirectory(configuration.getConfigurationDirectory(), + s -> configuration.setConfigurationDirParameters(false, s), project, null); + } + } + ), ModalityState.NON_MODAL, project.getDisposed()); } public static void clearAuthenticationCache(@NotNull final Project project, final Component component, final String configDirPath) { if (configDirPath != null) { int result; if (component == null) { - result = Messages.showYesNoDialog(project, SvnBundle.message("confirmation.text.delete.stored.authentication.information"), - SvnBundle.message("confirmation.title.clear.authentication.cache"), + result = Messages.showYesNoDialog(project, message("confirmation.text.delete.stored.authentication.information"), + message("confirmation.title.clear.authentication.cache"), Messages.getWarningIcon()); } else { - result = Messages.showYesNoDialog(component, SvnBundle.message("confirmation.text.delete.stored.authentication.information"), - SvnBundle.message("confirmation.title.clear.authentication.cache"), + result = Messages.showYesNoDialog(component, message("confirmation.text.delete.stored.authentication.information"), + message("confirmation.title.clear.authentication.cache"), Messages.getWarningIcon()); } if (result == Messages.YES) { @@ -458,8 +421,7 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl