diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java index f1ce219c845e..dd3ebd75c5a5 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java @@ -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; + } + } } diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java index b6b321646101..15d705ccbc82 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java @@ -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 descriptors = new ArrayList(); + 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 availableScopes = getAvailableScopes(descriptor, project); + List descriptors = new ArrayList(); + 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 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 getAvailableScopes(Descriptor descriptor, Project project) { + private List getAvailableScopes(Project project, List descriptors) { final ArrayList scopes = new ArrayList(); for (NamedScopesHolder holder : NamedScopesHolder.getAllNamedScopeHolders(project)) { Collections.addAll(scopes, holder.getScopes()); } scopes.remove(DefaultScopesProvider.getAllScope()); final Set used = new HashSet(); - final List nonDefaultTools = getSelectedProfile().getNonDefaultTools(descriptor.getKey().toString()); - if (nonDefaultTools != null) { - for (ScopeToolState state : nonDefaultTools) { - used.add(state.getScope(project)); + for (Descriptor descriptor : descriptors) { + final List nonDefaultTools = getSelectedProfile().getNonDefaultTools(descriptor.getKey().toString()); + if (nonDefaultTools != null) { + for (ScopeToolState state : nonDefaultTools) { + used.add(state.getScope(project)); + } } } scopes.removeAll(used);