Commit aa9a7b18 authored by Anna Kozlova's avatar Anna Kozlova
Browse files

move: filter out nested dirs/files on actionPerformed, update should be fast (IDEA-111413)

parent e887cc36
Showing with 21 additions and 15 deletions
+21 -15
......@@ -36,14 +36,6 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHandler {
@Override
public boolean canMove(PsiElement[] elements, PsiElement targetContainer) {
final PsiElement[] srcElements = adjustForMove(null, elements, targetContainer);
assert srcElements != null;
return super.canMove(srcElements, targetContainer);
}
@Override
public PsiElement adjustTargetForMove(DataContext dataContext, PsiElement targetContainer) {
if (targetContainer instanceof PsiPackage) {
......@@ -60,6 +52,11 @@ public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHan
@Override
public PsiElement[] adjustForMove(Project project, PsiElement[] sourceElements, PsiElement targetElement) {
sourceElements = super.adjustForMove(project, sourceElements, targetElement);
if (sourceElements == null) {
return null;
}
Set<PsiElement> result = new LinkedHashSet<PsiElement>();
for (PsiElement sourceElement : sourceElements) {
result.add(sourceElement instanceof PsiClass ? sourceElement.getContainingFile() : sourceElement);
......@@ -70,6 +67,10 @@ public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHan
@Override
public void doMove(final Project project, PsiElement[] elements, PsiElement targetContainer, MoveCallback callback) {
elements = adjustForMove(project, elements, targetContainer);
if (elements == null) {
return;
}
MoveFilesOrDirectoriesUtil
.doMove(project, elements, new PsiElement[]{targetContainer}, callback, new Function<PsiElement[], PsiElement[]>() {
@Override
......@@ -89,7 +90,7 @@ public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHan
adjustedElements.add(containingFile);
continue;
}
}
}
}
adjustedElements.add(element);
}
......
......@@ -50,11 +50,6 @@ public class MoveFilesOrDirectoriesHandler extends MoveHandlerDelegate {
}
}
PsiElement[] filteredElements = PsiTreeUtil.filterAncestors(elements);
if (filteredElements.length != elements.length) {
// there are nested dirs
return false;
}
return super.canMove(elements, targetContainer);
}
......@@ -72,13 +67,23 @@ public class MoveFilesOrDirectoriesHandler extends MoveHandlerDelegate {
doMove(project, elements, targetContainer, null);
}
@Nullable
@Override
public PsiElement[] adjustForMove(Project project, PsiElement[] sourceElements, PsiElement targetElement) {
return PsiTreeUtil.filterAncestors(sourceElements);
}
@Override
public void doMove(final Project project, final PsiElement[] elements, final PsiElement targetContainer, @Nullable final MoveCallback callback) {
if (!LOG.assertTrue(targetContainer == null || targetContainer instanceof PsiDirectory || targetContainer instanceof PsiDirectoryContainer,
"container: " + targetContainer + "; elements: " + Arrays.toString(elements) + "; working handler: " + toString())) {
return;
}
MoveFilesOrDirectoriesUtil.doMove(project, adjustForMove(project, elements, targetContainer), new PsiElement[] {targetContainer}, callback);
final PsiElement[] adjustedElements = adjustForMove(project, elements, targetContainer);
if (adjustedElements != null) {
MoveFilesOrDirectoriesUtil.doMove(project, adjustedElements, new PsiElement[] {targetContainer}, callback);
}
}
@Override
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment