mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move: filter out nested dirs/files on actionPerformed, update should be fast (IDEA-111413)
This commit is contained in:
+10
-9
@@ -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);
|
||||
}
|
||||
|
||||
+11
-6
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user