summaryrefslogtreecommitdiff
path: root/platform/analysis-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/analysis-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java')
-rw-r--r--platform/analysis-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java52
1 files changed, 41 insertions, 11 deletions
diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java b/platform/analysis-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java
index b28dad40f094..267c0ee67fc3 100644
--- a/platform/analysis-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java
+++ b/platform/analysis-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java
@@ -46,6 +46,7 @@ import org.jetbrains.annotations.TestOnly;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
public class ToolsImpl implements Tools {
@NonNls private static final String ENABLED_BY_DEFAULT_ATTRIBUTE = "enabled_by_default";
@@ -170,7 +171,7 @@ public class ToolsImpl implements Tools {
}
}
- void readExternal(@NotNull Element toolElement, @NotNull InspectionProfile profile) throws InvalidDataException {
+ void readExternal(@NotNull Element toolElement, @NotNull InspectionProfile profile, Map<String, List<String>> dependencies) throws InvalidDataException {
final String levelName = toolElement.getAttributeValue(LEVEL_ATTRIBUTE);
final ProfileManager profileManager = profile.getProfileManager();
final SeverityRegistrar registrar = ((SeverityProvider)profileManager).getOwnSeverityRegistrar();
@@ -187,6 +188,7 @@ public class ToolsImpl implements Tools {
final InspectionToolWrapper toolWrapper = myDefaultState.getTool();
final List scopeElements = toolElement.getChildren(ProfileEx.SCOPE);
+ final List<String> scopeNames = new ArrayList<String>();
for (Object sO : scopeElements) {
final Element scopeElement = (Element)sO;
final String scopeName = scopeElement.getAttributeValue(ProfileEx.NAME);
@@ -216,6 +218,20 @@ public class ToolsImpl implements Tools {
else {
addTool(scopeName, copyToolWrapper, enabledInScope != null && Boolean.parseBoolean(enabledInScope), scopeLevel);
}
+
+ scopeNames.add(scopeName);
+ }
+
+ for (int i = 0; i < scopeNames.size(); i++) {
+ String scopeName = scopeNames.get(i);
+ List<String> order = dependencies.get(scopeName);
+ if (order == null) {
+ order = new ArrayList<String>();
+ dependencies.put(scopeName, order);
+ }
+ for (int j = i + 1; j < scopeNames.size(); j++) {
+ order.add(scopeNames.get(j));
+ }
}
// check if unknown children exists
@@ -445,22 +461,36 @@ public class ToolsImpl implements Tools {
}
- public void setLevel(@NotNull HighlightDisplayLevel level, int idx, Project project) {
- if (myTools != null && myTools.size() > idx && idx >= 0) {
- final ScopeToolState scopeToolState = myTools.get(idx);
- myTools.remove(idx);
+ public void setLevel(@NotNull HighlightDisplayLevel level, @Nullable String scopeName, Project project) {
+ if (scopeName == null) {
+ myDefaultState.setLevel(level);
+ } else {
+ if (myTools == null) {
+ return;
+ }
+ ScopeToolState scopeToolState = null;
+ int index = -1;
+ for (int i = 0; i < myTools.size(); i++) {
+ ScopeToolState tool = myTools.get(i);
+ if (scopeName.equals(tool.getScopeName())) {
+ scopeToolState = tool;
+ myTools.remove(tool);
+ index = i;
+ break;
+ }
+ }
+ if (index < 0) {
+ throw new IllegalStateException("Scope " + scopeName + " not found");
+ }
+ final InspectionToolWrapper toolWrapper = scopeToolState.getTool();
final NamedScope scope = scopeToolState.getScope(project);
- InspectionToolWrapper toolWrapper = scopeToolState.getTool();
if (scope != null) {
- myTools.add(idx, new ScopeToolState(scope, toolWrapper, scopeToolState.isEnabled(), level));
+ myTools.add(index, new ScopeToolState(scope, toolWrapper, scopeToolState.isEnabled(), level));
}
else {
- myTools.add(idx, new ScopeToolState(scopeToolState.getScopeName(), toolWrapper, scopeToolState.isEnabled(), level));
+ myTools.add(index, new ScopeToolState(scopeToolState.getScopeName(), toolWrapper, scopeToolState.isEnabled(), level));
}
}
- else if (idx == -1) {
- myDefaultState.setLevel(level);
- }
}
public void setDefaultState(@NotNull InspectionToolWrapper toolWrapper, boolean enabled, @NotNull HighlightDisplayLevel level) {