From 81a942f2ee0b59b0958cefddf6e5f77d8409806a Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 11 Oct 2011 12:14:45 +0200 Subject: [PATCH] try to stay with users selection as long as possible (IDEA-75364) --- .../DestinationFolderComboBox.java | 26 ++++++++++++++----- .../intellij/refactoring/PackageWrapper.java | 7 ++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java index 6074209d3a85..b88d498db4c5 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java @@ -111,6 +111,7 @@ public abstract class DestinationFolderComboBox extends ComboboxWithBrowseButton }); final VirtualFile initialSourceRoot = initialTargetDirectory != null ? fileIndex.getSourceRootForFile(initialTargetDirectory.getVirtualFile()) : null; + final VirtualFile[] selection = new VirtualFile[]{initialSourceRoot}; addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -125,7 +126,7 @@ public abstract class DestinationFolderComboBox extends ComboboxWithBrowseButton return; } } - setComboboxModel(getComboBox(), root, fileIndex, mySourceRoots, project, true, errorMessageUpdater); + setComboboxModel(getComboBox(), root, root, fileIndex, mySourceRoots, project, true, errorMessageUpdater); } }); @@ -134,14 +135,21 @@ public abstract class DestinationFolderComboBox extends ComboboxWithBrowseButton public void documentChanged(DocumentEvent e) { JComboBox comboBox = getComboBox(); DirectoryChooser.ItemWrapper selectedItem = (DirectoryChooser.ItemWrapper)comboBox.getSelectedItem(); - setComboboxModel(comboBox, selectedItem != null ? fileIndex.getSourceRootForFile(selectedItem.getDirectory().getVirtualFile()) : initialSourceRoot, fileIndex, mySourceRoots, project, false, errorMessageUpdater); + setComboboxModel(comboBox, selectedItem != null ? fileIndex.getSourceRootForFile(selectedItem.getDirectory().getVirtualFile()) : initialSourceRoot, selection[0], fileIndex, mySourceRoots, project, false, errorMessageUpdater); } }); - setComboboxModel(getComboBox(), initialSourceRoot, fileIndex, mySourceRoots, project, false, errorMessageUpdater); + setComboboxModel(getComboBox(), initialSourceRoot, selection[0], fileIndex, mySourceRoots, project, false, errorMessageUpdater); getComboBox().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - updateErrorMessage(errorMessageUpdater, fileIndex, getComboBox().getSelectedItem()); + Object selectedItem = getComboBox().getSelectedItem(); + updateErrorMessage(errorMessageUpdater, fileIndex, selectedItem); + if (selectedItem instanceof DirectoryChooser.ItemWrapper) { + PsiDirectory directory = ((DirectoryChooser.ItemWrapper)selectedItem).getDirectory(); + if (directory != null) { + selection[0] = fileIndex.getSourceRootForFile(directory.getVirtualFile()); + } + } } }); } @@ -189,6 +197,7 @@ public abstract class DestinationFolderComboBox extends ComboboxWithBrowseButton private void setComboboxModel(final JComboBox comboBox, final VirtualFile initialTargetDirectorySourceRoot, + final VirtualFile oldSelection, final ProjectFileIndex fileIndex, final VirtualFile[] sourceRoots, final Project project, @@ -203,17 +212,22 @@ public abstract class DestinationFolderComboBox extends ComboboxWithBrowseButton } final ArrayList items = new ArrayList(); DirectoryChooser.ItemWrapper initial = null; + DirectoryChooser.ItemWrapper oldOne = null; for (PsiDirectory targetDirectory : targetDirectories) { DirectoryChooser.ItemWrapper itemWrapper = new DirectoryChooser.ItemWrapper(targetDirectory, pathsToCreate.get(targetDirectory)); items.add(itemWrapper); - if (fileIndex.getSourceRootForFile(targetDirectory.getVirtualFile()) == initialTargetDirectorySourceRoot) { + final VirtualFile sourceRootForFile = fileIndex.getSourceRootForFile(targetDirectory.getVirtualFile()); + if (sourceRootForFile == initialTargetDirectorySourceRoot) { initial = itemWrapper; + } else if (sourceRootForFile == oldSelection) { + oldOne = itemWrapper; } } if (initialTargetDirectorySourceRoot == null) { items.add(null); } - final DirectoryChooser.ItemWrapper selection = initial != null || items.contains(null) || items.isEmpty() ? initial : items.get(0); + final DirectoryChooser.ItemWrapper selection = initial != null || items.contains(null) || items.isEmpty() ? initial + : oldOne != null ? oldOne : items.get(0); final ComboBoxModel model = comboBox.getModel(); if (model instanceof CollectionComboBoxModel) { boolean sameModel = model.getSize() == items.size(); diff --git a/java/openapi/src/com/intellij/refactoring/PackageWrapper.java b/java/openapi/src/com/intellij/refactoring/PackageWrapper.java index 1732e1f689d5..7fd5de5f05c5 100644 --- a/java/openapi/src/com/intellij/refactoring/PackageWrapper.java +++ b/java/openapi/src/com/intellij/refactoring/PackageWrapper.java @@ -15,6 +15,7 @@ */ package com.intellij.refactoring; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiManager; @@ -42,7 +43,11 @@ public class PackageWrapper { public PsiManager getManager() { return myManager; } public PsiDirectory[] getDirectories() { - final PsiPackage aPackage = JavaPsiFacade.getInstance(myManager.getProject()).findPackage(myQualifiedName); + String qName = myQualifiedName; + while (qName.endsWith(".")) { + qName = StringUtil.trimEnd(qName, "."); + } + final PsiPackage aPackage = JavaPsiFacade.getInstance(myManager.getProject()).findPackage(qName); if (aPackage != null) { return aPackage.getDirectories(); } else {