(no message)

This commit is contained in:
Eugene Vigdorchik
2005-02-12 15:31:01 +03:00
parent 18655b2b25
commit a7bd2dcedc
13 changed files with 97 additions and 153 deletions
@@ -69,10 +69,7 @@ public class MoveToPackageFix implements IntentionAction {
new PsiElement[]{((PsiJavaFile) myFile).getClasses()[0]},
new SingleSourceRootMoveDestination(PackageWrapper.create(directory.getPackage()), directory), false,
false,
false,
null,
new Runnable() { public void run() { /* do nothing */ } }
).run(null);
null).run(null);
}
catch (IncorrectOperationException e) {
LOG.error(e);
@@ -383,21 +383,13 @@ public abstract class BaseRefactoringProcessor {
}
public boolean showConflicts(final ArrayList<String> conflicts, UsageInfo[][] usages) {
boolean result;
if (conflicts.size() > 0 && myPrepareSuccessfulSwingThreadCallback != null) {
final ConflictsDialog conflictsDialog = new ConflictsDialog(conflicts.toArray(new String[conflicts.size()]), myProject);
conflictsDialog.show();
result = conflictsDialog.isOK();
}
else {
result = true;
}
if (result) {
prepareSuccessful();
return true;
}
else {
return false;
if (!conflictsDialog.isOK()) return false;
}
prepareSuccessful();
return true;
}
}
@@ -15,6 +15,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.localVcs.impl.LvcsIntegration;
import com.intellij.openapi.localVcs.LvcsAction;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.refactoring.RefactoringActionHandler;
@@ -147,7 +148,7 @@ public class PullUpHandler implements RefactoringActionHandler, PullUpDialog.Cal
private void doRefactoring(PullUpDialog dialog) {
com.intellij.openapi.localVcs.LvcsAction action = LvcsIntegration.checkinFilesBeforeRefactoring(myProject, getCommandName());
LvcsAction action = LvcsIntegration.checkinFilesBeforeRefactoring(myProject, getCommandName());
try {
try {
PullUpHelper helper = new PullUpHelper(mySubclass,
@@ -2,13 +2,13 @@ package com.intellij.refactoring.memberPushDown;
import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.psi.PsiClass;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringSettings;
import com.intellij.refactoring.RefactoringDialog;
import com.intellij.refactoring.RefactoringSettings;
import com.intellij.refactoring.memberPullUp.JavaDocPanel;
import com.intellij.refactoring.ui.MemberSelectionPanel;
import com.intellij.refactoring.util.JavaDocPolicy;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.refactoring.util.classMembers.MemberInfoChange;
import com.intellij.refactoring.util.classMembers.MemberInfoModel;
@@ -21,20 +21,14 @@ import java.util.ArrayList;
public class PushDownDialog extends RefactoringDialog {
private MemberInfo[] myMemberInfos;
private PsiClass myClass;
private final Callback myCallback;
private MemberSelectionPanel myMemberSelectionPanel;
private JavaDocPanel myJavaDocPanel;
private MemberInfoModel myMemberInfoModel;
public static interface Callback {
void run(PushDownDialog dialog);
}
public PushDownDialog(Project project, MemberInfo[] memberInfos, PsiClass aClass, Callback callback) {
public PushDownDialog(Project project, MemberInfo[] memberInfos, PsiClass aClass) {
super(project, true);
myMemberInfos = memberInfos;
myClass = aClass;
myCallback = callback;
setTitle(PushDownHandler.REFACTORING_NAME);
@@ -101,7 +95,10 @@ public class PushDownDialog extends RefactoringDialog {
if(!isOKActionEnabled()) return;
RefactoringSettings.getInstance().PUSH_DOWN_PREVIEW_USAGES = isPreviewUsages();
myCallback.run(this);
invokeRefactoring (new PushDownProcessor(
getProject(), getSelectedMemberInfos(), myClass,
new JavaDocPolicy(getJavaDocPolicy())));
}
private class MyMemberInfoModel extends UsedByDependencyMemberInfoModel {
@@ -1,14 +1,11 @@
package com.intellij.refactoring.memberPushDown;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.psi.*;
import com.intellij.refactoring.RefactoringActionHandler;
import com.intellij.refactoring.util.JavaDocPolicy;
import com.intellij.refactoring.util.RefactoringMessageUtil;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.refactoring.util.classMembers.MemberInfoStorage;
@@ -18,11 +15,9 @@ import java.util.List;
/**
* @author dsl
*/
public class PushDownHandler implements RefactoringActionHandler, PushDownDialog.Callback {
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.memberPushDown.PushDownHandler");
public class PushDownHandler implements RefactoringActionHandler {
public static final String REFACTORING_NAME = "Push Members Down";
private PsiClass myClass;
private Project myProject;
public void invoke(Project project, Editor editor, PsiFile file, DataContext dataContext) {
int offset = editor.getCaretModel().getOffset();
@@ -52,7 +47,6 @@ public class PushDownHandler implements RefactoringActionHandler, PushDownDialog
public void invoke(final Project project, PsiElement[] elements, DataContext dataContext) {
if (elements.length != 1) return;
myProject = project;
PsiElement element = elements[0];
PsiClass aClass;
@@ -96,19 +90,7 @@ public class PushDownHandler implements RefactoringActionHandler, PushDownDialog
PushDownDialog dialog = new PushDownDialog(
project,
members.toArray(new MemberInfo[members.size()]),
myClass, this
);
myClass);
dialog.show();
}
public void run(final PushDownDialog dialog) {
new PushDownProcessor(
myProject, dialog.getSelectedMemberInfos(), myClass,
new JavaDocPolicy(dialog.getJavaDocPolicy()), new Runnable() {
public void run() {
dialog.close(DialogWrapper.CANCEL_EXIT_CODE);
}
}
).run(null);
}
}
@@ -6,7 +6,6 @@ import com.intellij.openapi.ui.Messages;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiSearchHelper;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.ui.ConflictsDialog;
import com.intellij.refactoring.util.JavaDocPolicy;
@@ -24,11 +23,10 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
private JavaDocPolicy myJavaDocPolicy;
public PushDownProcessor(Project project,
MemberInfo[] memberInfos,
PsiClass aClass,
JavaDocPolicy javaDocPolicy,
Runnable prepareSuccessfulCallback) {
super(project, prepareSuccessfulCallback);
MemberInfo[] memberInfos,
PsiClass aClass,
JavaDocPolicy javaDocPolicy) {
super(project);
myMemberInfos = memberInfos;
myClass = aClass;
myJavaDocPolicy = javaDocPolicy;
@@ -12,10 +12,9 @@ import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.refactoring.MoveDestination;
import com.intellij.refactoring.PackageWrapper;
import com.intellij.refactoring.RefactoringDialog;
import com.intellij.refactoring.RefactoringSettings;
import com.intellij.refactoring.*;
import com.intellij.refactoring.move.MoveCallback;
import com.intellij.refactoring.util.RefactoringMessageUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.IdeBorderFactory;
@@ -35,9 +34,8 @@ import java.util.List;
import java.util.Map;
public class MoveClassesOrPackagesDialog extends RefactoringDialog {
public static interface Callback {
void run(MoveClassesOrPackagesDialog dialog);
}
private final PsiElement[] myElementsToMove;
private final MoveCallback myMoveCallback;
private static final Logger LOG = Logger.getInstance(
"#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesDialog");
@@ -51,19 +49,21 @@ public class MoveClassesOrPackagesDialog extends RefactoringDialog {
private JCheckBox myCbPreserveSourceFolders;
private String myHelpID;
private Project myProject;
private final Callback myCallback;
private boolean mySearchInNonJavaEnabled;
private PsiDirectory myInitialTargetDirectory;
private final PsiManager myManager;
private MoveDestination myMoveDestination;
private boolean myTargetDirectoryFixed;
public MoveClassesOrPackagesDialog(Project project, Callback callback, boolean searchInNonJavaEnabled) {
public MoveClassesOrPackagesDialog(Project project,
boolean searchInNonJavaEnabled,
PsiElement[] elementsToMove,
MoveCallback moveCallback) {
super(project, true);
myElementsToMove = elementsToMove;
myMoveCallback = moveCallback;
setTitle("Move");
myProject = project;
myCallback = callback;
mySearchInNonJavaEnabled = searchInNonJavaEnabled;
myNameLabel = new JLabel();
@@ -230,16 +230,64 @@ public class MoveClassesOrPackagesDialog extends RefactoringDialog {
}
}
public MoveDestination getMoveDestination() {
return myMoveDestination;
private static String verifyDestinationForElement(final PsiElement element, final MoveDestination moveDestination) {
final String message;
if (element instanceof PsiDirectory) {
message = moveDestination.verify((PsiDirectory)element);
}
else if (element instanceof PsiPackage) {
message = moveDestination.verify((PsiPackage)element);
}
else {
message = moveDestination.verify(element.getContainingFile());
}
return message;
}
protected void doAction() {
myMoveDestination = selectDestination();
if (myMoveDestination == null) return;
final MoveDestination destination = selectDestination();
if (destination == null) return;
RefactoringSettings.getInstance().MOVE_PREVIEW_USAGES = isPreviewUsages();
myCallback.run(this);
final RefactoringSettings refactoringSettings = RefactoringSettings.getInstance();
final boolean searchInComments = isSearchInComments();
final boolean searchInNonJavaFiles = isSearchInNonJavaFiles();
refactoringSettings.MOVE_SEARCH_IN_COMMENTS = searchInComments;
refactoringSettings.MOVE_SEARCH_IN_NONJAVA_FILES = searchInNonJavaFiles;
PsiManager manager = PsiManager.getInstance(getProject());
for (int i = 0; i < myElementsToMove.length; i++) {
final PsiElement element = myElementsToMove[i];
String message = verifyDestinationForElement(element, destination);
if (message != null) {
String helpId = HelpID.getMoveHelpID(myElementsToMove[0]);
RefactoringMessageUtil.showErrorMessage("Error", message, helpId, getProject());
return;
}
}
try {
for (int idx = 0; idx < myElementsToMove.length; idx++) {
PsiElement psiElement = myElementsToMove[idx];
if (psiElement instanceof PsiClass) {
final PsiDirectory targetDirectory = destination.getTargetIfExists(psiElement.getContainingFile());
if (targetDirectory != null) {
manager.checkMove(psiElement, targetDirectory);
}
}
}
invokeRefactoring(new MoveClassesOrPackagesProcessor(
getProject(),
myElementsToMove,
destination, searchInComments,
searchInNonJavaFiles,
myMoveCallback));
}
catch (IncorrectOperationException e) {
String helpId = HelpID.getMoveHelpID(myElementsToMove[0]);
RefactoringMessageUtil.showErrorMessage("Error", e.getMessage(), helpId, getProject());
return;
}
}
public boolean isSearchInNonJavaFiles() {
@@ -12,14 +12,12 @@ import com.intellij.openapi.localVcs.LvcsAction;
import com.intellij.openapi.localVcs.impl.LvcsIntegration;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.MoveDestination;
import com.intellij.refactoring.PackageWrapper;
import com.intellij.refactoring.RefactoringSettings;
import com.intellij.refactoring.move.MoveCallback;
@@ -91,66 +89,13 @@ public class MoveClassesOrPackagesImpl {
final PsiDirectory initialTargetDirectory = getInitialTargetDirectory(initialTargetElement, psiElements);
final boolean isTargetDirectoryFixed = getContainerDirectory(initialTargetElement) != null;
final MoveClassesOrPackagesDialog.Callback doRun = new MoveClassesOrPackagesDialog.Callback() {
public void run(final MoveClassesOrPackagesDialog moveDialog) {
final RefactoringSettings refactoringSettings = RefactoringSettings.getInstance();
final boolean searchInComments = moveDialog.isSearchInComments();
final boolean searchInNonJavaFiles = moveDialog.isSearchInNonJavaFiles();
refactoringSettings.MOVE_SEARCH_IN_COMMENTS = searchInComments;
refactoringSettings.MOVE_SEARCH_IN_NONJAVA_FILES = searchInNonJavaFiles;
final MoveDestination moveDestination = moveDialog.getMoveDestination();
PsiManager manager = PsiManager.getInstance(project);
for (int i = 0; i < psiElements.length; i++) {
final PsiElement element = psiElements[i];
String message = verifyDestinationForElement(element, moveDestination);
if (message != null) {
String helpId = HelpID.getMoveHelpID(psiElements[0]);
RefactoringMessageUtil.showErrorMessage("Error", message, helpId, project);
return;
}
}
try {
for (int idx = 0; idx < psiElements.length; idx++) {
PsiElement psiElement = psiElements[idx];
if (psiElement instanceof PsiClass) {
final PsiDirectory targetDirectory = moveDestination.getTargetIfExists(psiElement.getContainingFile());
if (targetDirectory != null) {
manager.checkMove(psiElement, targetDirectory);
}
}
}
new MoveClassesOrPackagesProcessor(
project,
psiElements,
moveDestination, searchInComments,
searchInNonJavaFiles,
moveDialog.isPreviewUsages(),
moveCallback,
new Runnable() {
public void run() {
moveDialog.close(DialogWrapper.CANCEL_EXIT_CODE);
}
}).run(null);
}
catch (IncorrectOperationException e) {
String helpId = HelpID.getMoveHelpID(psiElements[0]);
RefactoringMessageUtil.showErrorMessage("Error", e.getMessage(), helpId, project);
return;
}
}
};
boolean searchInNonJavaEnabled = false;
for (int i = 0; i < psiElements.length && !searchInNonJavaEnabled; i++) {
PsiElement psiElement = psiElements[i];
searchInNonJavaEnabled = RefactoringUtil.isSearchInNonJavaEnabled(psiElement);
}
final MoveClassesOrPackagesDialog moveDialog = new MoveClassesOrPackagesDialog(project, doRun,
searchInNonJavaEnabled);
final MoveClassesOrPackagesDialog moveDialog = new MoveClassesOrPackagesDialog(project,
searchInNonJavaEnabled, psiElements, moveCallback);
boolean searchInComments = RefactoringSettings.getInstance().MOVE_SEARCH_IN_COMMENTS;
boolean searchInNonJavaFiles = RefactoringSettings.getInstance().MOVE_SEARCH_IN_NONJAVA_FILES;
moveDialog.setData(
@@ -170,19 +115,7 @@ public class MoveClassesOrPackagesImpl {
return !operationStatus.hasReadonlyFiles();
}
private static String verifyDestinationForElement(final PsiElement element, final MoveDestination moveDestination) {
final String message;
if (element instanceof PsiDirectory) {
message = moveDestination.verify((PsiDirectory)element);
}
else if (element instanceof PsiPackage) {
message = moveDestination.verify((PsiPackage)element);
}
else {
message = moveDestination.verify(element.getContainingFile());
}
return message;
}
private static PsiElement checkMovePackage(Project project, PsiPackage aPackage, List<VirtualFile> readOnly) {
PsiElement element;
@@ -42,7 +42,6 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
private PsiElement[] myElementsToMove;
private boolean mySearchInComments;
private boolean mySearchInNonJavaFiles;
private boolean myPreviewUsages;
private PackageWrapper myTargetPackage;
private MoveCallback myMoveCallback;
private final MoveDestination myMoveDestination;
@@ -51,18 +50,16 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
public MoveClassesOrPackagesProcessor(
Project project,
PsiElement[] elements,
final MoveDestination moveDestination, boolean searchInComments,
final MoveDestination moveDestination,
boolean searchInComments,
boolean searchInNonJavaFiles,
boolean previewUsages,
MoveCallback moveCallback,
Runnable prepareSuccessfulCallback) {
super(project, prepareSuccessfulCallback);
MoveCallback moveCallback) {
super(project);
myElementsToMove = elements;
myMoveDestination = moveDestination;
myTargetPackage = myMoveDestination.getTargetPackage();
mySearchInComments = searchInComments;
mySearchInNonJavaFiles = searchInNonJavaFiles;
myPreviewUsages = previewUsages;
myMoveCallback = moveCallback;
}
@@ -413,14 +410,13 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
}
protected boolean isPreviewUsages(UsageInfo[] usages) {
boolean toPreview = myPreviewUsages;
if (UsageViewUtil.hasNonCodeUsages(usages)) {
WindowManager.getInstance().getStatusBar(myProject).setInfo(
"Occurrences found in comments, strings and non-java files");
return true;
}
else {
return super.isPreviewUsages(usages) || toPreview;
return super.isPreviewUsages(usages);
}
}
@@ -18,7 +18,7 @@ public class MoveClassesOrPackagesRefactoringImpl extends RefactoringImpl<MoveCl
public MoveClassesOrPackagesRefactoringImpl(Project project, PsiElement[] elements, MoveDestination moveDestination) {
super(new MoveClassesOrPackagesProcessor(project, elements, moveDestination, true, true, true, null, BaseRefactoringProcessor.EMPTY_CALLBACK));
super(new MoveClassesOrPackagesProcessor(project, elements, moveDestination, true, true, null));
}
public List<PsiElement> getElements() {
@@ -80,7 +80,7 @@ public class MoveClassTest extends CodeInsightTestCase {
new MoveClassesOrPackagesProcessor(myProject, classes,
new SingleSourceRootMoveDestination(PackageWrapper.create(dirs[0].getPackage()), dirs[0]),
true, true, false, null, null).testRun();
true, true, null).testRun();
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
FileDocumentManager.getInstance().saveAllDocuments();
}
@@ -37,7 +37,7 @@ public class MovePackageMultirootTest extends MultiFileTestCase {
assertNotNull(targetPackage);
new MoveClassesOrPackagesProcessor(myProject, sourcePackages,
new MultipleRootsMoveDestination(new PackageWrapper(targetPackage)),
true, true, false, null, null).testRun();
true, true, null).testRun();
FileDocumentManager.getInstance().saveAllDocuments();
}
};
@@ -53,7 +53,7 @@ public class MovePackageTest extends MultiFileTestCase {
new MoveClassesOrPackagesProcessor(myProject, packages,
new SingleSourceRootMoveDestination(PackageWrapper.create(newParentPackage), dirs[0]),
true, false, false, null, null).testRun();
true, false, null).testRun();
FileDocumentManager.getInstance().saveAllDocuments();
}
}