move to inner: rebind imports first in order to prevent fqns (IDEA-39290)

This commit is contained in:
anna
2010-02-01 17:13:36 +03:00
parent 735162b601
commit efad1cbeeb
11 changed files with 47 additions and 0 deletions
@@ -128,6 +128,13 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
final List<PsiElement> importStatements = new ArrayList<PsiElement>();
if (!CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS) {
usages = filterUsagesInImportStatements(usages, importStatements);
} else {
//rebind imports first
Arrays.sort(usages, new Comparator<UsageInfo>() {
public int compare(UsageInfo o1, UsageInfo o2) {
return PsiUtil.BY_POSITION.compare(o1.getElement(), o2.getElement());
}
});
}
saveNonCodeUsages(usages);
final Map<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<PsiElement, PsiElement>();
@@ -0,0 +1,6 @@
package pack2;
public class A {
public static class Class1 {
}
}
@@ -0,0 +1,7 @@
package packUser;
import pack2.A.Class1;
public class Class2 {
Class1 myClass1;
}
@@ -0,0 +1,4 @@
package pack1;
public class Class1 {
}
@@ -0,0 +1,4 @@
package pack2;
public class A {
}
@@ -0,0 +1,7 @@
package packUser;
import pack1.Class1;
public class Class2 {
Class1 myClass1;
}
@@ -9,6 +9,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.search.ProjectScope;
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassToInnerProcessor;
@@ -35,6 +36,17 @@ public class MoveClassToInnerTest extends CodeInsightTestCase {
doTest(new String[] { "pack1.Class1" }, "pack2.A");
}
public void testInsertInnerClassImport() throws Exception {
final boolean imports = CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS;
try {
CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS = true;
doTest(new String[] { "pack1.Class1" }, "pack2.A");
}
finally {
CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS = imports;
}
}
public void testSimultaneousMove() throws Exception {
doTest(new String[] { "pack1.Class1", "pack0.Class0" }, "pack2.A");
}