move: convert nested classes to the top level files even for multiple classes selected

EA-81558 - assert: PsiJavaDirectoryImpl.checkAdd
This commit is contained in:
Anna.Kozlova
2016-04-19 19:05:54 +02:00
parent dcee197878
commit aeab53aa69
8 changed files with 20 additions and 4 deletions
@@ -98,7 +98,7 @@ public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHan
if (topLevelClass != null) {
elements[i] = topLevelClass;
final PsiFile containingFile = obtainContainingFile(topLevelClass, elements);
if (containingFile != null && !adjustedElements.contains(containingFile)) {
if (containingFile != null) {
adjustedElements.add(containingFile);
continue;
}
@@ -0,0 +1,5 @@
package t;
class MyClass {
public static class F1 {}
public static class F2 {}
}
@@ -0,0 +1,5 @@
package s;
class MyClass {
public static class F1 {}
public static class F2 {}
}
@@ -48,6 +48,10 @@ public class MoveClassAndFileTest extends RefactoringTestCase {
doTest("leavePackageLocalClass", "t", "txt2move.txt", "s.MyClass");
}
public void testNestedClassesInFile() throws Exception {
doTest("nestedClassesInFile", "t", null, "s.MyClass.F1", "s.MyClass.F2");
}
private void doTest(String testName, String newPackageName, String fileNameNearFirstClass, String... classNames) throws Exception {
String root = JavaTestUtil.getJavaTestDataPath() + "/refactoring/moveClassAndFile/" + testName;
@@ -64,18 +68,20 @@ public class MoveClassAndFileTest extends RefactoringTestCase {
}
private void performAction(String newPackageName, String fileName, String... classNames) {
final PsiElement[] elements = new PsiElement[classNames.length + 1];
final PsiElement[] elements = new PsiElement[classNames.length + (fileName != null ? 1 : 0)];
for(int i = 0; i < classNames.length; i++){
String className = classNames[i];
elements[i] = myJavaFacade.findClass(className, GlobalSearchScope.projectScope(getProject()));
assertNotNull("Class " + className + " not found", elements[i]);
}
elements[classNames.length] = elements[0].getContainingFile().getContainingDirectory().findFile(fileName);
if (fileName != null) {
elements[classNames.length] = elements[0].getContainingFile().getContainingDirectory().findFile(fileName);
}
PsiPackage aPackage = JavaPsiFacade.getInstance(myPsiManager.getProject()).findPackage(newPackageName);
assertNotNull("Package " + newPackageName + " not found", aPackage);
final PsiDirectory[] dirs = aPackage.getDirectories();
assertEquals(dirs.length, 1);
assertEquals(1, dirs.length);
final JavaMoveFilesOrDirectoriesHandler handler = new JavaMoveFilesOrDirectoriesHandler();
assertTrue(handler.canMove(elements, dirs[0]));