mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
allow to move packages without java files out of source roots (IDEA-66580 )
This commit is contained in:
+26
-1
@@ -34,6 +34,7 @@ import com.intellij.refactoring.JavaRefactoringSettings;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.move.MoveCallback;
|
||||
import com.intellij.refactoring.move.MoveHandlerDelegate;
|
||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import com.intellij.refactoring.util.RadioUpDownListener;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
@@ -131,8 +132,13 @@ public class MoveClassesOrPackagesHandlerBase extends MoveHandlerDelegate {
|
||||
processor.run();
|
||||
}
|
||||
else {
|
||||
final boolean containsJava = hasJavaFiles(directories[0]);
|
||||
if (!containsJava) {
|
||||
MoveFilesOrDirectoriesUtil.doMove(project, new PsiElement[] {directories[0]}, new PsiElement[]{targetContainer}, callback);
|
||||
return;
|
||||
}
|
||||
final MoveClassesOrPackagesToNewDirectoryDialog dlg =
|
||||
new MoveClassesOrPackagesToNewDirectoryDialog(directories[0], new PsiElement[2], false, callback) {
|
||||
new MoveClassesOrPackagesToNewDirectoryDialog(directories[0], new PsiElement[0], false, callback) {
|
||||
@Override
|
||||
protected void performRefactoring(Project project,
|
||||
final PsiDirectory targetDirectory,
|
||||
@@ -161,6 +167,25 @@ public class MoveClassesOrPackagesHandlerBase extends MoveHandlerDelegate {
|
||||
MoveClassesOrPackagesImpl.doMove(project, elements, targetContainer, callback);
|
||||
}
|
||||
|
||||
public static boolean hasJavaFiles(PsiDirectory directory) {
|
||||
final boolean [] containsJava = new boolean[]{false};
|
||||
directory.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
@Override
|
||||
public void visitElement(PsiElement element) {
|
||||
if (containsJava[0]) return;
|
||||
if (element instanceof PsiFile || element instanceof PsiDirectory) {
|
||||
super.visitElement(element);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitJavaFile(PsiJavaFile file) {
|
||||
containsJava[0] = true;
|
||||
}
|
||||
});
|
||||
return containsJava[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement adjustTargetForMove(DataContext dataContext, PsiElement targetContainer) {
|
||||
if (targetContainer instanceof PsiPackage) {
|
||||
|
||||
+2
@@ -24,6 +24,7 @@ import com.intellij.psi.impl.file.JavaDirectoryServiceImpl;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.refactoring.copy.JavaCopyFilesOrDirectoriesHandler;
|
||||
import com.intellij.refactoring.move.MoveCallback;
|
||||
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesHandlerBase;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -41,6 +42,7 @@ public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHan
|
||||
for (PsiElement element : srcElements) {
|
||||
if (element instanceof PsiDirectory) {
|
||||
allJava &= JavaCopyFilesOrDirectoriesHandler.hasPackages((PsiDirectory)element);
|
||||
allJava &= MoveClassesOrPackagesHandlerBase.hasJavaFiles((PsiDirectory)element);
|
||||
}
|
||||
else if (element instanceof PsiFile) {
|
||||
allJava &= element instanceof PsiJavaFile && !JspPsiUtil.isInJspFile(element) &&
|
||||
|
||||
Reference in New Issue
Block a user