don't touch static imports in moved directories (IDEA-165125)

This commit is contained in:
Anna.Kozlova
2016-12-16 10:56:48 +01:00
parent 185b4d16bf
commit f15f17c7b7
8 changed files with 68 additions and 4 deletions
@@ -5,13 +5,13 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.FileTypeUtils;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.util.RefactoringConflictsUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.Function;
import com.intellij.util.containers.MultiMap;
import com.intellij.psi.util.FileTypeUtils;
import java.util.*;
@@ -51,7 +51,7 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses
for (PsiReference reference : ReferencesSearch.search(aPackage, GlobalSearchScope.projectScope(project))) {
final PsiElement element = reference.getElement();
final PsiImportStatementBase statementBase = PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class);
if (statementBase != null && statementBase.isOnDemand()) {
if (statementBase != null && statementBase.isOnDemand() && !isUnderRefactoring(statementBase, directoriesToMove)) {
usages.add(new RemoveOnDemandImportStatementsUsageInfo(statementBase));
}
}
@@ -60,9 +60,9 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses
}
}
private static boolean isUnderRefactoring(PsiDirectory packageDirectory, PsiDirectory[] directoriesToMove) {
private static boolean isUnderRefactoring(PsiElement psiElement, PsiDirectory[] directoriesToMove) {
for (PsiDirectory directory : directoriesToMove) {
if (PsiTreeUtil.isAncestor(directory, packageDirectory, true)) {
if (PsiTreeUtil.isAncestor(directory, psiElement, true)) {
return true;
}
}
@@ -0,0 +1,13 @@
package pack0.pack2.pack3;
import static pack0.pack2.pack3.S1.TestEnum.*;
public class S1 {
public void test() {
System.out.println(TEST_STRING_1);
}
public enum TestEnum {
TEST_STRING_1();
}
}
@@ -0,0 +1,13 @@
package pack0.pack2.pack4;
import static pack0.pack2.pack4.S1.TestEnum.*;
public class S1 {
public void test() {
System.out.println(TEST_STRING_1);
}
public enum TestEnum {
TEST_STRING_1();
}
}
@@ -0,0 +1,13 @@
package pack1.pack2.pack3;
import static pack1.pack2.pack3.S1.TestEnum.*;
public class S1 {
public void test() {
System.out.println(TEST_STRING_1);
}
public enum TestEnum {
TEST_STRING_1();
}
}
@@ -0,0 +1,13 @@
package pack1.pack2.pack4;
import static pack1.pack2.pack4.S1.TestEnum.*;
public class S1 {
public void test() {
System.out.println(TEST_STRING_1);
}
public enum TestEnum {
TEST_STRING_1();
}
}
@@ -63,6 +63,18 @@ public class MovePackageAsDirectoryTest extends MultiFileTestCase {
doTest(action);
}
public void testRenamePackageStaticImportsToNestedClasses() throws Exception {
final PerformAction action = (rootDir, rootAfter) -> {
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(myProject);
final PsiPackage sourcePackage = psiFacade.findPackage("pack1.pack2");
assertNotNull(sourcePackage);
RenamePsiPackageProcessor.createRenameMoveProcessor("pack0.pack2", sourcePackage, false, false).run();
FileDocumentManager.getInstance().saveAllDocuments();
};
doTest(action);
}
public void testMovePackageWithTxtFilesInside() throws Exception {
doTest(createAction("pack1", "target"));
}