mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move packages/classes to the 'drop' directory prserving src folders
This commit is contained in:
+31
-1
@@ -21,6 +21,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileChooser.FileChooser;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
@@ -45,6 +46,8 @@ import javax.swing.*;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author ven
|
||||
@@ -58,6 +61,12 @@ public class MoveClassesOrPackagesToNewDirectoryDialog extends DialogWrapper {
|
||||
|
||||
public MoveClassesOrPackagesToNewDirectoryDialog(@NotNull final PsiDirectory directory, PsiElement[] elementsToMove,
|
||||
final MoveCallback moveCallback) {
|
||||
this(directory, elementsToMove, true, moveCallback);
|
||||
}
|
||||
|
||||
public MoveClassesOrPackagesToNewDirectoryDialog(@NotNull final PsiDirectory directory, PsiElement[] elementsToMove,
|
||||
boolean canShowPreserveSourceRoots,
|
||||
final MoveCallback moveCallback) {
|
||||
super(false);
|
||||
setTitle(MoveHandler.REFACTORING_NAME);
|
||||
myDirectory = directory;
|
||||
@@ -93,6 +102,24 @@ public class MoveClassesOrPackagesToNewDirectoryDialog extends DialogWrapper {
|
||||
}
|
||||
});
|
||||
|
||||
if (canShowPreserveSourceRoots) {
|
||||
final Set<VirtualFile> sourceRoots = new HashSet<VirtualFile>();
|
||||
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(directory.getProject()).getFileIndex();
|
||||
for (PsiElement element : elementsToMove) {
|
||||
if (element instanceof PsiPackage) {
|
||||
for (PsiDirectory psiDirectory : ((PsiPackage)element).getDirectories()) {
|
||||
sourceRoots.add(fileIndex.getSourceRootForFile(psiDirectory.getVirtualFile()));
|
||||
}
|
||||
} else if (element instanceof PsiClass) {
|
||||
final PsiDirectory psiDirectory = element.getContainingFile().getContainingDirectory();
|
||||
LOG.assertTrue(psiDirectory != null);
|
||||
if (psiDirectory != null) {
|
||||
sourceRoots.add(psiDirectory.getVirtualFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
myPreserveSourceRoot.setVisible(sourceRoots.size() > 1);
|
||||
}
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -101,6 +128,7 @@ public class MoveClassesOrPackagesToNewDirectoryDialog extends DialogWrapper {
|
||||
private JCheckBox mySearchInCommentsAndStringsCheckBox;
|
||||
private JPanel myRootPanel;
|
||||
private JLabel myNameLabel;
|
||||
private JCheckBox myPreserveSourceRoot;
|
||||
|
||||
private boolean isSearchInNonJavaFiles() {
|
||||
return mySearchForTextOccurrencesCheckBox.isSelected();
|
||||
@@ -168,7 +196,9 @@ public class MoveClassesOrPackagesToNewDirectoryDialog extends DialogWrapper {
|
||||
return;
|
||||
}
|
||||
final JavaRefactoringFactory factory = JavaRefactoringFactory.getInstance(project);
|
||||
final MoveDestination destination = factory.createSourceRootMoveDestination(aPackage.getQualifiedName(), sourceRoot);
|
||||
final MoveDestination destination = myPreserveSourceRoot.isSelected() && myPreserveSourceRoot.isVisible()
|
||||
? factory.createSourceFolderPreservingMoveDestination(aPackage.getQualifiedName())
|
||||
: factory.createSourceRootMoveDestination(aPackage.getQualifiedName(), sourceRoot);
|
||||
|
||||
MoveClassesOrPackagesProcessor processor = new MoveClassesOrPackagesProcessor(myDirectory.getProject(), myElementsToMove, destination,
|
||||
searchInComments, searchForTextOccurences,
|
||||
|
||||
+20
-11
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesToNewDirectoryDialog">
|
||||
<grid id="27dc6" binding="myRootPanel" layout-manager="GridLayoutManager" row-count="4" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="27dc6" binding="myRootPanel" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="5" left="5" bottom="5" right="5"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="496" height="393"/>
|
||||
<xy x="20" y="20" width="666" height="148"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="line"/>
|
||||
@@ -16,14 +16,6 @@
|
||||
<text resource-bundle="messages/RefactoringBundle" key="move.specified.classes.to"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="b1aea" class="javax.swing.JCheckBox" binding="mySearchForTextOccurrencesCheckBox" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="messages/RefactoringBundle" key="search.for.text.occurrences"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="dea4e" class="javax.swing.JCheckBox" binding="mySearchInCommentsAndStringsCheckBox" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
@@ -35,7 +27,7 @@
|
||||
<grid id="a7a76" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
<grid row="1" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
@@ -58,6 +50,23 @@
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<component id="b1aea" class="javax.swing.JCheckBox" binding="mySearchForTextOccurrencesCheckBox" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="messages/RefactoringBundle" key="search.for.text.occurrences"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="11605" class="javax.swing.JCheckBox" binding="myPreserveSourceRoot" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<selected value="true"/>
|
||||
<text value="&Don't move to another source folder"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<inspectionSuppressions>
|
||||
|
||||
+15
-13
@@ -71,19 +71,21 @@ public class MovePackagesHandler extends MoveClassesOrPackagesHandlerBase {
|
||||
processor.run();
|
||||
}
|
||||
else {
|
||||
new MoveClassesOrPackagesToNewDirectoryDialog(directories[0], new PsiElement[2], callback) {
|
||||
@Override
|
||||
protected void performRefactoring(Project project,
|
||||
final PsiDirectory targetDirectory,
|
||||
PsiPackage aPackage,
|
||||
boolean searchInComments,
|
||||
boolean searchForTextOccurences) {
|
||||
final MoveDirectoryWithClassesProcessor processor =
|
||||
new MoveDirectoryWithClassesProcessor(project, directories, targetDirectory, searchInComments, searchForTextOccurences,
|
||||
true, callback);
|
||||
processor.run();
|
||||
}
|
||||
}.show();
|
||||
final MoveClassesOrPackagesToNewDirectoryDialog dlg =
|
||||
new MoveClassesOrPackagesToNewDirectoryDialog(directories[0], new PsiElement[2], false, callback) {
|
||||
@Override
|
||||
protected void performRefactoring(Project project,
|
||||
final PsiDirectory targetDirectory,
|
||||
PsiPackage aPackage,
|
||||
boolean searchInComments,
|
||||
boolean searchForTextOccurences) {
|
||||
final MoveDirectoryWithClassesProcessor processor =
|
||||
new MoveDirectoryWithClassesProcessor(project, directories, targetDirectory, searchInComments, searchForTextOccurences,
|
||||
true, callback);
|
||||
processor.run();
|
||||
}
|
||||
};
|
||||
dlg.show();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user