diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java b/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java index f2aa9eadcc5a..1072a9399067 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java @@ -41,16 +41,14 @@ import com.intellij.psi.impl.file.PsiPackageBase; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.BaseRefactoringProcessor; import com.intellij.refactoring.RefactoringBundle; -import com.intellij.util.ArrayUtil; import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; -import java.util.Comparator; import java.util.List; +import java.util.Optional; /** * @author yole @@ -87,14 +85,13 @@ public abstract class DirectoryAsPackageRenameHandlerBase= 1) { - element = directories[0]; - } + PsiDirectory[] directories = ((PsiDirectoryContainer)element).getDirectories(GlobalSearchScope.moduleScope(module)); + Optional directoryWithPackage = Arrays.stream(directories).filter(directory -> getPackage(directory) != null).findFirst(); + return directoryWithPackage.orElse(null); } } return element; diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameHandlerRegistry.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameHandlerRegistry.java index d831cfa3a0dd..d7d684104c29 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameHandlerRegistry.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameHandlerRegistry.java @@ -73,14 +73,10 @@ public class RenameHandlerRegistry { public RenameHandler getRenameHandler(DataContext dataContext) { final Map availableHandlers = new TreeMap<>(); for (RenameHandler renameHandler : Extensions.getExtensions(RenameHandler.EP_NAME)) { - if (renameHandler.isRenaming(dataContext)) { - availableHandlers.put(getHandlerTitle(renameHandler), renameHandler); - } + checkHandler(renameHandler, dataContext, availableHandlers); } for (RenameHandler renameHandler : myHandlers) { - if (renameHandler.isRenaming(dataContext)) { - availableHandlers.put(getHandlerTitle(renameHandler), renameHandler); - } + checkHandler(renameHandler, dataContext, availableHandlers); } if (availableHandlers.size() == 1) return availableHandlers.values().iterator().next(); for (Iterator> iterator = availableHandlers.entrySet().iterator(); iterator.hasNext(); ) { @@ -103,6 +99,15 @@ public class RenameHandlerRegistry { return myDefaultElementRenameHandler.isRenaming(dataContext) ? myDefaultElementRenameHandler : null; } + private static void checkHandler(RenameHandler renameHandler, DataContext dataContext, Map availableHandlers) { + if (renameHandler.isRenaming(dataContext)) { + String title = getHandlerTitle(renameHandler); + if (!availableHandlers.containsKey(title)) { + availableHandlers.put(title, renameHandler); + } + } + } + private static String getHandlerTitle(RenameHandler renameHandler) { return renameHandler instanceof TitledHandler ? StringUtil.capitalize(((TitledHandler)renameHandler).getActionTitle().toLowerCase()) : renameHandler.toString(); }