From a6bbe350823dd4f8ff67a5ea8040be2b3a7b7c6b Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 26 Sep 2014 16:08:16 +0400 Subject: [PATCH] NPE in creation of multiscope icon fixed if default state is missed --- .../InspectionsConfigTreeTable.java | 25 +++++++++++++++---- .../MultiScopeSeverityIcon.java | 6 +++++ .../ScopesAndSeveritiesHintTable.java | 14 +++++++---- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java index b97f8f12c526..94ba8865d504 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java @@ -85,17 +85,19 @@ public class InspectionsConfigTreeTable extends TreeTable { final int row = rowAtPoint(point); final Object maybeIcon = getModel().getValueAt(row, column); if (maybeIcon instanceof MultiScopeSeverityIcon) { + final MultiScopeSeverityIcon icon = (MultiScopeSeverityIcon)maybeIcon; final LinkedHashMap scopeToAverageSeverityMap = - ((MultiScopeSeverityIcon)maybeIcon).getScopeToAverageSeverityMap(); + icon.getScopeToAverageSeverityMap(); final JComponent component; - if (scopeToAverageSeverityMap.size() == 1) { + if (scopeToAverageSeverityMap.size() == 1 && + icon.getDefaultScopeName().equals(ContainerUtil.getFirstItem(scopeToAverageSeverityMap.keySet()))) { final HighlightDisplayLevel level = ContainerUtil.getFirstItem(scopeToAverageSeverityMap.values()); final JLabel label = new JLabel(); label.setIcon(level.getIcon()); label.setText(SingleInspectionProfilePanel.renderSeverity(level.getSeverity())); component = label; } else { - component = new ScopesAndSeveritiesHintTable(scopeToAverageSeverityMap); + component = new ScopesAndSeveritiesHintTable(scopeToAverageSeverityMap, icon.getDefaultScopeName()); } IdeTooltipManager.getInstance().show( new IdeTooltip(InspectionsConfigTreeTable.this, point, component), false); @@ -242,12 +244,16 @@ public class InspectionsConfigTreeTable extends TreeTable { LOG.assertTrue(column == IS_ENABLED_COLUMN); LOG.assertTrue(aValue != null, "node = " + node); final boolean doEnable = (Boolean) aValue; + final InspectionProfileImpl profile = mySettings.getInspectionProfile(); for (final InspectionConfigTreeNode aNode : InspectionsAggregationUtil.getInspectionsNodes((InspectionConfigTreeNode) node)) { final String toolId = aNode.getKey().toString(); if (doEnable) { - mySettings.getInspectionProfile().enableTool(toolId, mySettings.getProject()); + profile.enableTool(toolId, mySettings.getProject()); } else { - mySettings.getInspectionProfile().disableTool(toolId, mySettings.getProject()); + profile.disableTool(toolId, mySettings.getProject()); + } + for (ScopeToolState state : profile.getTools(toolId, mySettings.getProject()).getTools()) { + state.setEnabled(doEnable); } aNode.dropCache(); mySettings.onChanged(aNode); @@ -344,6 +350,15 @@ public class InspectionsConfigTreeTable extends TreeTable { } final SeverityAndOccurrences defaultSeveritiesAndOccurrences = myScopeToAverageSeverityMap.get(myDefaultScopeName); + if (defaultSeveritiesAndOccurrences == null) { + for (Map.Entry e: myScopeToAverageSeverityMap.entrySet()) { + final HighlightSeverity primarySeverity = e.getValue().getPrimarySeverity(); + if (primarySeverity != null) { + result.put(e.getKey(), primarySeverity); + } + } + return result; + } final int allInspectionsCount = defaultSeveritiesAndOccurrences.getOccurrencesSize(); final Map allScopes = defaultSeveritiesAndOccurrences.getOccurrences(); String[] reversedScopesOrder = ArrayUtil.reverseArray(scopesOrder); diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/MultiScopeSeverityIcon.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/MultiScopeSeverityIcon.java index 3d5bbd6d6db5..bd52b206a0f6 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/MultiScopeSeverityIcon.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/MultiScopeSeverityIcon.java @@ -39,10 +39,12 @@ public class MultiScopeSeverityIcon implements Icon { private final static int SIZE = 12; private final LinkedHashMap myScopeToAverageSeverityMap; + private final String myDefaultScopeName; public MultiScopeSeverityIcon(final Map scopeToAverageSeverityMap, final String defaultScopeName, final InspectionProfileImpl inspectionProfile) { + myDefaultScopeName = defaultScopeName; final List sortedScopeNames = new ArrayList(scopeToAverageSeverityMap.keySet()); myScopeToAverageSeverityMap = new LinkedHashMap(); Collections.sort(sortedScopeNames, new ScopeOrderComparator(inspectionProfile)); @@ -61,6 +63,10 @@ public class MultiScopeSeverityIcon implements Icon { } } + public String getDefaultScopeName() { + return myDefaultScopeName; + } + public LinkedHashMap getScopeToAverageSeverityMap() { return myScopeToAverageSeverityMap; } diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/ScopesAndSeveritiesHintTable.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/ScopesAndSeveritiesHintTable.java index 9ff70c59a0cf..30799dfd000d 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/ScopesAndSeveritiesHintTable.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/ScopesAndSeveritiesHintTable.java @@ -36,8 +36,8 @@ public class ScopesAndSeveritiesHintTable extends JBTable { private final static int SCOPE_COLUMN = 0; private final static int SEVERITY_COLUMN = 1; - public ScopesAndSeveritiesHintTable(final LinkedHashMap scopeToAverageSeverityMap) { - super(new MyModel(scopeToAverageSeverityMap)); + public ScopesAndSeveritiesHintTable(final LinkedHashMap scopeToAverageSeverityMap, String defaultScopeName) { + super(new MyModel(scopeToAverageSeverityMap, defaultScopeName)); getColumnModel().getColumn(SCOPE_COLUMN).setCellRenderer(new DefaultTableCellRenderer() { @Override @@ -90,10 +90,12 @@ public class ScopesAndSeveritiesHintTable extends JBTable { private final static class MyModel extends AbstractTableModel { private final LinkedHashMap myScopeToAverageSeverityMap; + private final String myDefaultScopeName; private final List myScopes; - public MyModel(final LinkedHashMap scopeToAverageSeverityMap) { + public MyModel(final LinkedHashMap scopeToAverageSeverityMap, String defaultScopeName) { myScopeToAverageSeverityMap = scopeToAverageSeverityMap; + myDefaultScopeName = defaultScopeName; myScopes = new ArrayList(myScopeToAverageSeverityMap.keySet()); } @@ -118,9 +120,11 @@ public class ScopesAndSeveritiesHintTable extends JBTable { @Override public Object getValueAt(final int rowIndex, final int columnIndex) { + final String scopeName = myScopes.get(rowIndex); switch (columnIndex) { - case SCOPE_COLUMN: return rowIndex < getRowCount() - 1 ? myScopes.get(rowIndex) : "Everywhere else"; - case SEVERITY_COLUMN: return myScopeToAverageSeverityMap.get(myScopes.get(rowIndex)); + case SCOPE_COLUMN: + return myDefaultScopeName.equals(scopeName) ? "Everywhere else" : scopeName; + case SEVERITY_COLUMN: return myScopeToAverageSeverityMap.get(scopeName); default: throw new IllegalArgumentException(); }