allow to move packages without java files out of source roots (IDEA-66580 )

This commit is contained in:
anna
2011-03-31 20:51:16 +02:00
parent b866f1d9f2
commit 0d21845e37
2 changed files with 28 additions and 1 deletions
@@ -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) {
@@ -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) &&