diff options
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.java | 52 |
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) { |