mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
move everything preserving source root on multiselection (IDEA-160969)
This commit is contained in:
+16
-2
@@ -18,6 +18,7 @@ package com.intellij.refactoring.move.moveClassesOrPackages;
|
||||
import com.intellij.CommonBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -34,6 +35,7 @@ import com.intellij.psi.impl.file.JavaDirectoryServiceImpl;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.refactoring.BaseRefactoringProcessor;
|
||||
import com.intellij.refactoring.JavaRefactoringSettings;
|
||||
import com.intellij.refactoring.MoveDestination;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.move.MoveCallback;
|
||||
import com.intellij.refactoring.move.MoveHandlerDelegate;
|
||||
@@ -218,16 +220,28 @@ public class JavaMoveClassesOrPackagesHandler extends MoveHandlerDelegate {
|
||||
PsiPackage aPackage,
|
||||
boolean searchInComments,
|
||||
boolean searchForTextOccurences) {
|
||||
final MoveDestination destination = createDestination(aPackage, targetDirectory);
|
||||
try {
|
||||
for (PsiDirectory dir: directories) {
|
||||
MoveFilesOrDirectoriesUtil.checkIfMoveIntoSelf(dir, targetDirectory);
|
||||
MoveFilesOrDirectoriesUtil.checkIfMoveIntoSelf(dir, WriteAction.compute(() -> destination.getTargetDirectory(dir)));
|
||||
}
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
Messages.showErrorDialog(project, e.getMessage(), RefactoringBundle.message("cannot.move"));
|
||||
return null;
|
||||
}
|
||||
return new MoveDirectoryWithClassesProcessor(project, directories, targetDirectory, searchInComments, searchForTextOccurences, true, callback);
|
||||
return new MoveDirectoryWithClassesProcessor(project, directories, null, searchInComments, searchForTextOccurences, true, callback) {
|
||||
@Override
|
||||
public TargetDirectoryWrapper getTargetDirectory(PsiDirectory dir) {
|
||||
final PsiDirectory targetDirectory = destination.getTargetDirectory(dir);
|
||||
return new TargetDirectoryWrapper(targetDirectory);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTargetName() {
|
||||
return targetDirectory.getName();
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
dlg.show();
|
||||
|
||||
+16
-10
@@ -218,16 +218,7 @@ public class MoveClassesOrPackagesToNewDirectoryDialog extends MoveDialogBase {
|
||||
PsiPackage aPackage,
|
||||
boolean searchInComments,
|
||||
boolean searchForTextOccurences) {
|
||||
final VirtualFile sourceRoot = ProjectRootManager.getInstance(project).getFileIndex().getSourceRootForFile(directory.getVirtualFile());
|
||||
if (sourceRoot == null) {
|
||||
Messages.showErrorDialog(project, RefactoringBundle.message("destination.directory.does.not.correspond.to.any.package"),
|
||||
RefactoringBundle.message("cannot.move"));
|
||||
return null;
|
||||
}
|
||||
final JavaRefactoringFactory factory = JavaRefactoringFactory.getInstance(project);
|
||||
final MoveDestination destination = myPreserveSourceRoot.isSelected() && myPreserveSourceRoot.isVisible()
|
||||
? factory.createSourceFolderPreservingMoveDestination(aPackage.getQualifiedName())
|
||||
: factory.createSourceRootMoveDestination(aPackage.getQualifiedName(), sourceRoot);
|
||||
final MoveDestination destination = createDestination(aPackage, directory);
|
||||
|
||||
MoveClassesOrPackagesProcessor processor = createMoveClassesOrPackagesProcessor(myDirectory.getProject(), myElementsToMove, destination,
|
||||
searchInComments, searchForTextOccurences, myMoveCallback);
|
||||
@@ -239,6 +230,21 @@ public class MoveClassesOrPackagesToNewDirectoryDialog extends MoveDialogBase {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected MoveDestination createDestination(PsiPackage aPackage, PsiDirectory directory) {
|
||||
final Project project = aPackage.getProject();
|
||||
final VirtualFile sourceRoot = ProjectRootManager.getInstance(project).getFileIndex().getSourceRootForFile(directory.getVirtualFile());
|
||||
if (sourceRoot == null) {
|
||||
Messages.showErrorDialog(project, RefactoringBundle.message("destination.directory.does.not.correspond.to.any.package"),
|
||||
RefactoringBundle.message("cannot.move"));
|
||||
return null;
|
||||
}
|
||||
|
||||
final JavaRefactoringFactory factory = JavaRefactoringFactory.getInstance(project);
|
||||
return myPreserveSourceRoot.isSelected() && myPreserveSourceRoot.isVisible()
|
||||
? factory.createSourceFolderPreservingMoveDestination(aPackage.getQualifiedName())
|
||||
: factory.createSourceRootMoveDestination(aPackage.getQualifiedName(), sourceRoot);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMovePropertySuffix() {
|
||||
return "ClassWithTarget";
|
||||
|
||||
Reference in New Issue
Block a user