mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-64814 Move-refactoring import statements bug
This commit is contained in:
+4
@@ -28,6 +28,10 @@ import org.jetbrains.annotations.Nullable;
|
||||
public interface MoveClassHandler {
|
||||
ExtensionPointName<MoveClassHandler> EP_NAME = new ExtensionPointName<MoveClassHandler>("com.intellij.refactoring.moveClassHandler");
|
||||
|
||||
void prepareMove(@NotNull PsiClass aClass);
|
||||
|
||||
void finishMoveClass(@NotNull PsiClass aClass);
|
||||
|
||||
/**
|
||||
* @return null if it cannot move aClass
|
||||
*/
|
||||
|
||||
+2
-3
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.refactoring.move.moveClassesOrPackages;
|
||||
|
||||
import com.intellij.codeInsight.ChangeContextUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
@@ -448,7 +447,7 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
|
||||
element = newElement;
|
||||
}
|
||||
else if (element instanceof PsiClass) {
|
||||
ChangeContextUtil.encodeContextInfo(element, true);
|
||||
MoveClassesOrPackagesUtil.prepareMoveClass((PsiClass)element);
|
||||
final PsiClass newElement = MoveClassesOrPackagesUtil.doMoveClass((PsiClass)element, myMoveDestination.getTargetDirectory(element.getContainingFile()));
|
||||
oldToNewElementsMapping.put(element, newElement);
|
||||
element = newElement;
|
||||
@@ -461,7 +460,7 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
|
||||
|
||||
for (PsiElement element : myElementsToMove) {
|
||||
if (element instanceof PsiClass) {
|
||||
ChangeContextUtil.decodeContextInfo(element, null, null);
|
||||
MoveClassesOrPackagesUtil.finishMoveClass((PsiClass)element);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
@@ -207,6 +207,18 @@ public class MoveClassesOrPackagesUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static void prepareMoveClass(PsiClass aClass) {
|
||||
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensions()) {
|
||||
handler.prepareMove(aClass);
|
||||
}
|
||||
}
|
||||
|
||||
public static void finishMoveClass(PsiClass aClass) {
|
||||
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensions()) {
|
||||
handler.finishMoveClass(aClass);
|
||||
}
|
||||
}
|
||||
|
||||
// Does not process non-code usages!
|
||||
public static PsiClass doMoveClass(PsiClass aClass, PsiDirectory moveDestination) throws IncorrectOperationException {
|
||||
PsiClass newClass;
|
||||
|
||||
+15
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.move.moveClassesOrPackages;
|
||||
|
||||
import com.intellij.codeInsight.ChangeContextUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.psi.*;
|
||||
@@ -32,6 +33,20 @@ import java.util.Set;
|
||||
public class MoveJavaClassHandler implements MoveClassHandler {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.move.moveClassesOrPackages.MoveJavaClassHandler");
|
||||
|
||||
@Override
|
||||
public void finishMoveClass(@NotNull PsiClass aClass) {
|
||||
if (aClass.getContainingFile() instanceof PsiJavaFile) {
|
||||
ChangeContextUtil.decodeContextInfo(aClass, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareMove(@NotNull PsiClass aClass) {
|
||||
if (aClass.getContainingFile() instanceof PsiJavaFile) {
|
||||
ChangeContextUtil.encodeContextInfo(aClass, true);
|
||||
}
|
||||
}
|
||||
|
||||
public PsiClass doMoveClass(@NotNull final PsiClass aClass, @NotNull PsiDirectory moveDestination) throws IncorrectOperationException {
|
||||
PsiFile file = aClass.getContainingFile();
|
||||
final PsiPackage newPackage = JavaDirectoryService.getInstance().getPackage(moveDestination);
|
||||
|
||||
Reference in New Issue
Block a user