prefer first applicable titled handler; ensure available if directory corresponds to known package (IDEA-170012)

This commit is contained in:
Anna.Kozlova
2017-03-22 10:47:03 +01:00
parent 836c498178
commit c4a2da99c5
2 changed files with 16 additions and 14 deletions
@@ -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<T extends PsiDirectory
return false;
}
private static PsiElement adjustForRename(DataContext dataContext, PsiElement element) {
private PsiElement adjustForRename(DataContext dataContext, PsiElement element) {
if (element instanceof PsiDirectoryContainer) {
final Module module = LangDataKeys.MODULE.getData(dataContext);
if (module != null) {
final PsiDirectory[] directories = ((PsiDirectoryContainer)element).getDirectories(GlobalSearchScope.moduleScope(module));
if (directories.length >= 1) {
element = directories[0];
}
PsiDirectory[] directories = ((PsiDirectoryContainer)element).getDirectories(GlobalSearchScope.moduleScope(module));
Optional<PsiDirectory> directoryWithPackage = Arrays.stream(directories).filter(directory -> getPackage(directory) != null).findFirst();
return directoryWithPackage.orElse(null);
}
}
return element;
@@ -73,14 +73,10 @@ public class RenameHandlerRegistry {
public RenameHandler getRenameHandler(DataContext dataContext) {
final Map<String, RenameHandler> 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<Map.Entry<String, RenameHandler>> 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<String, RenameHandler> 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();
}