mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
svn: Fix access to "RepositoryBrowserDialog.getRepositoryBrowser()" after dialog disposal (IDEA-223635)
"SvnCloneDialogExtension" extends "DialogWrapper". And so "VcsCloneDialog" (or "FlatWelcomeFrame" if there are no open projects) is registered as owner window of "SvnCloneDialogExtension" - see "DialogWrapperPeerImpl". Because of this "SvnCloneDialogExtension" is disposed together with "VcsCloneDialog" before "SvnCloneDialogExtension.doClone()" is called. Previously access to "getRepositoryBrowser()" in "SvnCloneDialogExtension.doClone()" (after dialog disposal) just led to new "RepositoryBrowserComponent" creation. And so "doClone()" did nothing as new "RepositoryBrowserComponent" had no selection. Now we only allow one "RepositoryBrowserComponent" instance per "RepositoryBrowserDialog". And could access its state (particularly, selected node) after dialog disposal. GitOrigin-RevId: 35a995b2341eaebcebf83c8385b1687e701c3a74
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a2397a44b7
commit
f472d80029
@@ -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 org.jetbrains.idea.svn.dialogs;
|
||||
|
||||
import com.intellij.CommonBundle;
|
||||
@@ -63,6 +63,7 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.util.ArrayUtil.isEmpty;
|
||||
import static com.intellij.util.ui.JBUI.size;
|
||||
import static org.jetbrains.idea.svn.SvnUtil.createUrl;
|
||||
import static org.jetbrains.idea.svn.SvnUtil.getRelativeUrl;
|
||||
|
||||
@@ -72,7 +73,7 @@ public class RepositoryBrowserDialog extends DialogWrapper {
|
||||
|
||||
private final Project myProject;
|
||||
protected final SvnVcs myVCS;
|
||||
private RepositoryBrowserComponent myRepositoryBrowser;
|
||||
@NotNull private final RepositoryBrowserComponent myRepositoryBrowser;
|
||||
|
||||
private final DeleteAction myDeleteAction;
|
||||
private AnAction copyUrlAction;
|
||||
@@ -95,6 +96,10 @@ public class RepositoryBrowserDialog extends DialogWrapper {
|
||||
myShowFiles = showFiles;
|
||||
myProject = project;
|
||||
myVCS = SvnVcs.getInstance(project);
|
||||
|
||||
myRepositoryBrowser = new RepositoryBrowserComponent(myVCS);
|
||||
myRepositoryBrowser.setPreferredSize(size(300, 300));
|
||||
|
||||
setTitle("SVN Repository Browser");
|
||||
setResizable(true);
|
||||
setOKButtonText(CommonBundle.getCloseButtonText());
|
||||
@@ -279,23 +284,17 @@ public class RepositoryBrowserDialog extends DialogWrapper {
|
||||
.clear()
|
||||
.appendText(SvnBundle.message("repository.browser.no.locations.added.info"))
|
||||
.appendSecondaryText(SvnBundle.message("repository.browser.add.location.action.description"), SimpleTextAttributes.LINK_ATTRIBUTES,
|
||||
e -> addLocation(myRepositoryBrowser));
|
||||
e -> addLocation(getRepositoryBrowser()));
|
||||
return panel;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected RepositoryBrowserComponent getRepositoryBrowser() {
|
||||
if (myRepositoryBrowser == null) {
|
||||
myRepositoryBrowser = new RepositoryBrowserComponent(SvnVcs.getInstance(myProject));
|
||||
myRepositoryBrowser.setPreferredSize(new Dimension(300, 300));
|
||||
}
|
||||
return myRepositoryBrowser;
|
||||
}
|
||||
|
||||
public void disposeRepositoryBrowser() {
|
||||
if (myRepositoryBrowser != null) {
|
||||
Disposer.dispose(myRepositoryBrowser);
|
||||
myRepositoryBrowser = null;
|
||||
}
|
||||
Disposer.dispose(myRepositoryBrowser);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -661,7 +660,7 @@ public class RepositoryBrowserDialog extends DialogWrapper {
|
||||
doCopy(src, dst, myMove, message);
|
||||
|
||||
final CopyMoveReloadHelper sourceReloader = myMove ? new MoveSourceReloader(node) : CopyMoveReloadHelper.EMPTY;
|
||||
final TargetReloader destinationReloader = new TargetReloader(dialog, node, rootNode, myRepositoryBrowser);
|
||||
final TargetReloader destinationReloader = new TargetReloader(dialog, node, rootNode, getRepositoryBrowser());
|
||||
|
||||
sourceReloader.doSynthetic();
|
||||
destinationReloader.doSynthetic();
|
||||
@@ -1141,7 +1140,7 @@ public class RepositoryBrowserDialog extends DialogWrapper {
|
||||
private void showDiffEditorResults(final Collection<Change> changes, String sourceTitle, String targetTitle) {
|
||||
final String title = SvnBundle.message("repository.browser.compare.title", sourceTitle, targetTitle);
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
final ChangeListViewerDialog dlg = new ChangeListViewerDialog(myRepositoryBrowser, myProject, changes);
|
||||
final ChangeListViewerDialog dlg = new ChangeListViewerDialog(getRepositoryBrowser(), myProject, changes);
|
||||
dlg.markChangesInAir(true);
|
||||
dlg.setTitle(title);
|
||||
dlg.show();
|
||||
|
||||
Reference in New Issue
Block a user