mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 07:40:42 +07:00
move file instead of splitting in classes when all classes in file are moved (IDEA-66437)
This commit is contained in:
+24
-2
@@ -45,6 +45,7 @@ import com.intellij.refactoring.util.classRefs.ClassReferenceScanner;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usageView.UsageViewDescriptor;
|
||||
import com.intellij.usageView.UsageViewUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
@@ -435,6 +436,26 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
|
||||
// Move files with correction of references.
|
||||
|
||||
try {
|
||||
final Map<PsiClass, Boolean> allClasses = new HashMap<PsiClass, Boolean>();
|
||||
for (PsiElement element : myElementsToMove) {
|
||||
if (element instanceof PsiClass) {
|
||||
final PsiClass psiClass = (PsiClass)element;
|
||||
if (allClasses.containsKey(psiClass)) {
|
||||
continue;
|
||||
}
|
||||
final PsiClass[] classes = ((PsiClassOwner)element.getContainingFile()).getClasses();
|
||||
boolean all = true;
|
||||
for (PsiClass aClass : classes) {
|
||||
if (ArrayUtil.find(myElementsToMove, aClass) == -1) {
|
||||
all = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (PsiClass aClass : classes) {
|
||||
allClasses.put(aClass, all);
|
||||
}
|
||||
}
|
||||
}
|
||||
Map<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<PsiElement, PsiElement>();
|
||||
for (int idx = 0; idx < myElementsToMove.length; idx++) {
|
||||
PsiElement element = myElementsToMove[idx];
|
||||
@@ -447,8 +468,9 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
|
||||
element = newElement;
|
||||
}
|
||||
else if (element instanceof PsiClass) {
|
||||
MoveClassesOrPackagesUtil.prepareMoveClass((PsiClass)element);
|
||||
final PsiClass newElement = MoveClassesOrPackagesUtil.doMoveClass((PsiClass)element, myMoveDestination.getTargetDirectory(element.getContainingFile()));
|
||||
final PsiClass psiClass = (PsiClass)element;
|
||||
MoveClassesOrPackagesUtil.prepareMoveClass(psiClass);
|
||||
final PsiClass newElement = MoveClassesOrPackagesUtil.doMoveClass(psiClass, myMoveDestination.getTargetDirectory(element.getContainingFile()), allClasses.get(psiClass));
|
||||
oldToNewElementsMapping.put(element, newElement);
|
||||
element = newElement;
|
||||
} else {
|
||||
|
||||
+1
@@ -211,6 +211,7 @@ public class MoveClassesOrPackagesToNewDirectoryDialog extends DialogWrapper {
|
||||
public void run() {
|
||||
}
|
||||
});
|
||||
|
||||
processor.run();
|
||||
}
|
||||
}
|
||||
|
||||
+10
-3
@@ -221,10 +221,17 @@ public class MoveClassesOrPackagesUtil {
|
||||
|
||||
// Does not process non-code usages!
|
||||
public static PsiClass doMoveClass(PsiClass aClass, PsiDirectory moveDestination) throws IncorrectOperationException {
|
||||
return doMoveClass(aClass, moveDestination, true);
|
||||
}
|
||||
|
||||
// Does not process non-code usages!
|
||||
public static PsiClass doMoveClass(PsiClass aClass, PsiDirectory moveDestination, boolean moveAllClassesInFile) throws IncorrectOperationException {
|
||||
PsiClass newClass;
|
||||
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensions()) {
|
||||
newClass = handler.doMoveClass(aClass, moveDestination);
|
||||
if (newClass != null) return newClass;
|
||||
if (!moveAllClassesInFile) {
|
||||
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensions()) {
|
||||
newClass = handler.doMoveClass(aClass, moveDestination);
|
||||
if (newClass != null) return newClass;
|
||||
}
|
||||
}
|
||||
|
||||
PsiFile file = aClass.getContainingFile();
|
||||
|
||||
Reference in New Issue
Block a user