mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
provide package element delete provider: do not delete package over all modules if package was selected in one particular module ( IDEA-59058)
This commit is contained in:
@@ -19,6 +19,9 @@
|
||||
*/
|
||||
package com.intellij.ide.projectView.impl;
|
||||
|
||||
import com.intellij.history.LocalHistory;
|
||||
import com.intellij.history.LocalHistoryAction;
|
||||
import com.intellij.ide.DeleteProvider;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.SelectInTarget;
|
||||
import com.intellij.ide.impl.PackagesPaneSelectInTarget;
|
||||
@@ -27,6 +30,7 @@ import com.intellij.ide.projectView.ViewSettings;
|
||||
import com.intellij.ide.projectView.impl.nodes.PackageElement;
|
||||
import com.intellij.ide.projectView.impl.nodes.PackageUtil;
|
||||
import com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode;
|
||||
import com.intellij.ide.util.DeleteHandler;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeBuilder;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeStructure;
|
||||
@@ -51,13 +55,12 @@ import org.jetbrains.annotations.Nullable;
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public final class PackageViewPane extends AbstractProjectViewPSIPane {
|
||||
@NonNls public static final String ID = "PackagesPane";
|
||||
public static final Icon ICON = IconLoader.getIcon("/general/packagesTab.png");
|
||||
private MyDeletePSIElementProvider myDeletePSIElementProvider = new MyDeletePSIElementProvider();
|
||||
|
||||
public PackageViewPane(Project project) {
|
||||
super(project);
|
||||
@@ -91,6 +94,12 @@ public final class PackageViewPane extends AbstractProjectViewPSIPane {
|
||||
|
||||
@Override
|
||||
public Object getData(final String dataId) {
|
||||
if (PlatformDataKeys.DELETE_ELEMENT_PROVIDER.is(dataId)) {
|
||||
final PackageElement selectedPackageElement = getSelectedPackageElement();
|
||||
if (selectedPackageElement != null) {
|
||||
return myDeletePSIElementProvider;
|
||||
}
|
||||
}
|
||||
if (PackageElement.DATA_KEY.is(dataId)) {
|
||||
final PackageElement packageElement = getSelectedPackageElement();
|
||||
}
|
||||
@@ -290,4 +299,30 @@ public final class PackageViewPane extends AbstractProjectViewPSIPane {
|
||||
return modules.toArray(new Module[modules.size()]);
|
||||
}
|
||||
}
|
||||
|
||||
private final class MyDeletePSIElementProvider implements DeleteProvider {
|
||||
public boolean canDeleteElement(DataContext dataContext) {
|
||||
for (PsiDirectory directory : getSelectedDirectories()) {
|
||||
if (!directory.getManager().isInProject(directory)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void deleteElement(DataContext dataContext) {
|
||||
List<PsiDirectory> allElements = Arrays.asList(getSelectedDirectories());
|
||||
List<PsiElement> validElements = new ArrayList<PsiElement>();
|
||||
for (PsiElement psiElement : allElements) {
|
||||
if (psiElement != null && psiElement.isValid()) validElements.add(psiElement);
|
||||
}
|
||||
final PsiElement[] elements = validElements.toArray(new PsiElement[validElements.size()]);
|
||||
|
||||
LocalHistoryAction a = LocalHistory.getInstance().startAction(IdeBundle.message("progress.deleting"));
|
||||
try {
|
||||
DeleteHandler.deletePsiElement(elements, myProject);
|
||||
}
|
||||
finally {
|
||||
a.finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user