NPE in creation of multiscope icon fixed if default state is missed

This commit is contained in:
Dmitry Batkovich
2014-09-26 16:08:16 +04:00
parent 9d8c3b39f2
commit a6bbe35082
3 changed files with 35 additions and 10 deletions
@@ -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<String, HighlightDisplayLevel> 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<String, SeverityAndOccurrences> 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<String, HighlightSeverity> allScopes = defaultSeveritiesAndOccurrences.getOccurrences();
String[] reversedScopesOrder = ArrayUtil.reverseArray(scopesOrder);
@@ -39,10 +39,12 @@ public class MultiScopeSeverityIcon implements Icon {
private final static int SIZE = 12;
private final LinkedHashMap<String, HighlightDisplayLevel> myScopeToAverageSeverityMap;
private final String myDefaultScopeName;
public MultiScopeSeverityIcon(final Map<String, HighlightSeverity> scopeToAverageSeverityMap,
final String defaultScopeName,
final InspectionProfileImpl inspectionProfile) {
myDefaultScopeName = defaultScopeName;
final List<String> sortedScopeNames = new ArrayList<String>(scopeToAverageSeverityMap.keySet());
myScopeToAverageSeverityMap = new LinkedHashMap<String, HighlightDisplayLevel>();
Collections.sort(sortedScopeNames, new ScopeOrderComparator(inspectionProfile));
@@ -61,6 +63,10 @@ public class MultiScopeSeverityIcon implements Icon {
}
}
public String getDefaultScopeName() {
return myDefaultScopeName;
}
public LinkedHashMap<String, HighlightDisplayLevel> getScopeToAverageSeverityMap() {
return myScopeToAverageSeverityMap;
}
@@ -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<String, HighlightDisplayLevel> scopeToAverageSeverityMap) {
super(new MyModel(scopeToAverageSeverityMap));
public ScopesAndSeveritiesHintTable(final LinkedHashMap<String, HighlightDisplayLevel> 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<String, HighlightDisplayLevel> myScopeToAverageSeverityMap;
private final String myDefaultScopeName;
private final List<String> myScopes;
public MyModel(final LinkedHashMap<String, HighlightDisplayLevel> scopeToAverageSeverityMap) {
public MyModel(final LinkedHashMap<String, HighlightDisplayLevel> scopeToAverageSeverityMap, String defaultScopeName) {
myScopeToAverageSeverityMap = scopeToAverageSeverityMap;
myDefaultScopeName = defaultScopeName;
myScopes = new ArrayList<String>(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();
}