mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
inspections: allow to add multiple scopes over selection from popup
This commit is contained in:
+35
-16
@@ -379,22 +379,8 @@ public class SingleInspectionProfilePanel extends JPanel {
|
||||
});
|
||||
|
||||
actions.addSeparator();
|
||||
actions.add(new AddScopeAction(myTree){
|
||||
protected InspectionProfileImpl getSelectedProfile() {
|
||||
return mySelectedProfile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
super.actionPerformed(e);
|
||||
updateOptionsAndDescriptionPanel(myTree.getSelectionPath());
|
||||
}
|
||||
});
|
||||
actions.add(new DeleteScopeAction(myTree){
|
||||
protected InspectionProfileImpl getSelectedProfile() {
|
||||
return mySelectedProfile;
|
||||
}
|
||||
});
|
||||
actions.add(new MyAddScopeAction());
|
||||
actions.add(new MyDeleteScopeAction());
|
||||
actions.add(new MoveScopeAction(myTree, "Move Scope Up", IconLoader.getIcon("/actions/moveUp.png"), -1) {
|
||||
protected boolean isEnabledFor(int idx, InspectionConfigTreeNode parent) {
|
||||
return idx > 0;
|
||||
@@ -588,6 +574,9 @@ public class SingleInspectionProfilePanel extends JPanel {
|
||||
}
|
||||
});
|
||||
}
|
||||
group.add(Separator.getInstance());
|
||||
group.add(new MyAddScopeAction());
|
||||
group.add(new MyDeleteScopeAction());
|
||||
ActionPopupMenu menu = ActionManager.getInstance().createActionPopupMenu(ActionPlaces.UNKNOWN, group);
|
||||
return menu.getComponent();
|
||||
}
|
||||
@@ -1143,4 +1132,34 @@ public class SingleInspectionProfilePanel extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
private class MyAddScopeAction extends AddScopeAction {
|
||||
public MyAddScopeAction() {
|
||||
super(SingleInspectionProfilePanel.this.myTree);
|
||||
}
|
||||
|
||||
protected InspectionProfileImpl getSelectedProfile() {
|
||||
return mySelectedProfile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
super.actionPerformed(e);
|
||||
final TreePath[] paths = myTree.getSelectionPaths();
|
||||
if (paths != null && paths.length == 1) {
|
||||
updateOptionsAndDescriptionPanel(myTree.getSelectionPath());
|
||||
} else {
|
||||
initOptionsAndDescriptionPanel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class MyDeleteScopeAction extends DeleteScopeAction {
|
||||
public MyDeleteScopeAction() {
|
||||
super(SingleInspectionProfilePanel.this.myTree);
|
||||
}
|
||||
|
||||
protected InspectionProfileImpl getSelectedProfile() {
|
||||
return mySelectedProfile;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+39
-26
@@ -59,54 +59,67 @@ public abstract class AddScopeAction extends AnAction {
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext());
|
||||
if (project == null) return;
|
||||
final InspectionConfigTreeNode[] nodes = myTree.getSelectedNodes(InspectionConfigTreeNode.class, null);
|
||||
if (nodes.length > 0) {
|
||||
final InspectionConfigTreeNode node = nodes[0];
|
||||
final List<Descriptor> descriptors = new ArrayList<Descriptor>();
|
||||
for (InspectionConfigTreeNode node : nodes) {
|
||||
final Descriptor descriptor = node.getDesriptor();
|
||||
if (descriptor != null && node.getScopeName() == null && !getAvailableScopes(descriptor, project).isEmpty()) {
|
||||
presentation.setEnabled(true);
|
||||
if (descriptor != null && node.getScopeName() == null) {
|
||||
descriptors.add(descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
presentation.setEnabled(!getAvailableScopes(project, descriptors).isEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
final InspectionConfigTreeNode[] nodes = myTree.getSelectedNodes(InspectionConfigTreeNode.class, null);
|
||||
final InspectionConfigTreeNode node = nodes[0];
|
||||
final Descriptor descriptor = node.getDesriptor();
|
||||
LOG.assertTrue(descriptor != null);
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext());
|
||||
final InspectionProfileEntry tool = descriptor.getTool(); //copy
|
||||
final List<String> availableScopes = getAvailableScopes(descriptor, project);
|
||||
List<Descriptor> descriptors = new ArrayList<Descriptor>();
|
||||
for (InspectionConfigTreeNode node : nodes) {
|
||||
final Descriptor descriptor = node.getDesriptor();
|
||||
if (node.getScopeName() == null && descriptor != null) {
|
||||
descriptors.add(descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext());
|
||||
final List<String> availableScopes = getAvailableScopes(project, descriptors);
|
||||
final int idx = Messages.showChooseDialog(myTree, "Scope:", "Choose Scope", ArrayUtil.toStringArray(availableScopes), availableScopes.get(0), Messages.getQuestionIcon());
|
||||
if (idx == -1) return;
|
||||
final NamedScope chosenScope = NamedScopesHolder.getScope(project, availableScopes.get(idx));
|
||||
final ScopeToolState scopeToolState = getSelectedProfile().addScope(tool, chosenScope,
|
||||
getSelectedProfile().getErrorLevel(descriptor.getKey(), chosenScope),
|
||||
getSelectedProfile().isToolEnabled(descriptor.getKey()));
|
||||
final Descriptor addedDescriptor = new Descriptor(scopeToolState, getSelectedProfile());
|
||||
if (node.getChildCount() == 0) {
|
||||
node.add(new InspectionConfigTreeNode(descriptor, scopeToolState, true, true, false));
|
||||
|
||||
for (InspectionConfigTreeNode node : nodes) {
|
||||
final Descriptor descriptor = node.getDesriptor();
|
||||
if (node.getScopeName() != null || descriptor == null) continue;
|
||||
final InspectionProfileEntry tool = descriptor.getTool(); //copy
|
||||
final ScopeToolState scopeToolState = getSelectedProfile().addScope(tool, chosenScope,
|
||||
getSelectedProfile().getErrorLevel(descriptor.getKey(), chosenScope),
|
||||
getSelectedProfile().isToolEnabled(descriptor.getKey()));
|
||||
final Descriptor addedDescriptor = new Descriptor(scopeToolState, getSelectedProfile());
|
||||
if (node.getChildCount() == 0) {
|
||||
node.add(new InspectionConfigTreeNode(descriptor, scopeToolState, true, true, false));
|
||||
}
|
||||
node.insert(new InspectionConfigTreeNode(addedDescriptor, scopeToolState, false, true, false), 0);
|
||||
node.setInspectionNode(false);
|
||||
node.isProperSetting = getSelectedProfile().isProperSetting(HighlightDisplayKey.find(tool.getShortName()));
|
||||
((DefaultTreeModel)myTree.getModel()).reload(node);
|
||||
myTree.expandPath(new TreePath(node.getPath()));
|
||||
}
|
||||
node.insert(new InspectionConfigTreeNode(addedDescriptor, scopeToolState, false, true, false), 0);
|
||||
node.setInspectionNode(false);
|
||||
node.isProperSetting = getSelectedProfile().isProperSetting(HighlightDisplayKey.find(tool.getShortName()));
|
||||
((DefaultTreeModel)myTree.getModel()).reload(node);
|
||||
myTree.expandPath(new TreePath(node.getPath()));
|
||||
myTree.revalidate();
|
||||
}
|
||||
|
||||
private List<String> getAvailableScopes(Descriptor descriptor, Project project) {
|
||||
private List<String> getAvailableScopes(Project project, List<Descriptor> descriptors) {
|
||||
final ArrayList<NamedScope> scopes = new ArrayList<NamedScope>();
|
||||
for (NamedScopesHolder holder : NamedScopesHolder.getAllNamedScopeHolders(project)) {
|
||||
Collections.addAll(scopes, holder.getScopes());
|
||||
}
|
||||
scopes.remove(DefaultScopesProvider.getAllScope());
|
||||
final Set<NamedScope> used = new HashSet<NamedScope>();
|
||||
final List<ScopeToolState> nonDefaultTools = getSelectedProfile().getNonDefaultTools(descriptor.getKey().toString());
|
||||
if (nonDefaultTools != null) {
|
||||
for (ScopeToolState state : nonDefaultTools) {
|
||||
used.add(state.getScope(project));
|
||||
for (Descriptor descriptor : descriptors) {
|
||||
final List<ScopeToolState> nonDefaultTools = getSelectedProfile().getNonDefaultTools(descriptor.getKey().toString());
|
||||
if (nonDefaultTools != null) {
|
||||
for (ScopeToolState state : nonDefaultTools) {
|
||||
used.add(state.getScope(project));
|
||||
}
|
||||
}
|
||||
}
|
||||
scopes.removeAll(used);
|
||||
|
||||
Reference in New Issue
Block a user