From bd28cdb5aea144d0ce2e3d2f34091ce950723935 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 14 Aug 2013 20:19:43 +0400 Subject: [PATCH] dependencies reduced --- .../impl/analysis/HighlightNamesUtil.java | 12 +- .../daemon/AdvHighlightingTest.java | 12 +- .../packageDependencies/DependencyRule.java | 5 +- .../DependencyValidationManager.java | 10 +- .../DependencyValidationManagerImpl.java | 55 ++++++++- .../options/colors/ColorAndFontOptions.java | 104 +++++++++--------- .../options/colors/ScopeAttributesUtil.java | 26 +++++ .../daemon/impl/DaemonCodeAnalyzerImpl.java | 36 ------ .../daemon/impl/DaemonListeners.java | 18 --- 9 files changed, 151 insertions(+), 127 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/application/options/colors/ScopeAttributesUtil.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java index 418f2d9e8a4b..b9ea90cc1dc7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java @@ -19,9 +19,7 @@ */ package com.intellij.codeInsight.daemon.impl.analysis; -import com.intellij.application.options.colors.ColorAndFontOptions; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl; +import com.intellij.application.options.colors.ScopeAttributesUtil; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.HighlightInfoType; import com.intellij.lang.ASTNode; @@ -31,6 +29,8 @@ import com.intellij.openapi.editor.colors.TextAttributesScheme; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; +import com.intellij.packageDependencies.DependencyValidationManager; +import com.intellij.packageDependencies.DependencyValidationManagerImpl; import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.ElementType; import com.intellij.psi.impl.source.tree.TreeUtil; @@ -231,14 +231,14 @@ public class HighlightNamesUtil { PsiFile file = element.getContainingFile(); if (file == null) return null; TextAttributes result = null; - final DaemonCodeAnalyzerImpl daemonCodeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(file.getProject()); - List> scopes = daemonCodeAnalyzer.getScopeBasedHighlightingCachedScopes(); + DependencyValidationManagerImpl validationManager = (DependencyValidationManagerImpl)DependencyValidationManager.getInstance(file.getProject()); + List> scopes = validationManager.getScopeBasedHighlightingCachedScopes(); for (Pair scope : scopes) { NamedScope namedScope = scope.getFirst(); NamedScopesHolder scopesHolder = scope.getSecond(); PackageSet packageSet = namedScope.getValue(); if (packageSet != null && packageSet.contains(file, scopesHolder)) { - TextAttributesKey scopeKey = ColorAndFontOptions.getScopeTextAttributeKey(namedScope.getName()); + TextAttributesKey scopeKey = ScopeAttributesUtil.getScopeTextAttributeKey(namedScope.getName()); TextAttributes attributes = colorsScheme.getAttributes(scopeKey); if (attributes == null || attributes.isEmpty()) { continue; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java index 0363b0f923e4..968d078f6e10 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java @@ -16,7 +16,7 @@ package com.intellij.codeInsight.daemon; import com.intellij.analysis.PackagesScopesProvider; -import com.intellij.application.options.colors.ColorAndFontOptions; +import com.intellij.application.options.colors.ScopeAttributesUtil; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.editor.colors.EditorColorsManager; @@ -188,11 +188,11 @@ public class AdvHighlightingTest extends DaemonAnalyzerTestCase { EditorColorsScheme scheme = (EditorColorsScheme)manager.getGlobalScheme().clone(); manager.addColorsScheme(scheme); EditorColorsManager.getInstance().setGlobalScheme(scheme); - TextAttributesKey xKey = ColorAndFontOptions.getScopeTextAttributeKey(xScope.getName()); + TextAttributesKey xKey = ScopeAttributesUtil.getScopeTextAttributeKey(xScope.getName()); TextAttributes xAttributes = new TextAttributes(Color.cyan, Color.darkGray, Color.blue, EffectType.BOXED, Font.ITALIC); scheme.setAttributes(xKey, xAttributes); - TextAttributesKey utilKey = ColorAndFontOptions.getScopeTextAttributeKey(utilScope.getName()); + TextAttributesKey utilKey = ScopeAttributesUtil.getScopeTextAttributeKey(utilScope.getName()); TextAttributes utilAttributes = new TextAttributes(Color.gray, Color.magenta, Color.orange, EffectType.STRIKEOUT, Font.BOLD); scheme.setAttributes(utilKey, utilAttributes); @@ -215,16 +215,16 @@ public class AdvHighlightingTest extends DaemonAnalyzerTestCase { EditorColorsScheme scheme = (EditorColorsScheme)manager.getGlobalScheme().clone(); manager.addColorsScheme(scheme); EditorColorsManager.getInstance().setGlobalScheme(scheme); - TextAttributesKey xKey = ColorAndFontOptions.getScopeTextAttributeKey(xScope.getName()); + TextAttributesKey xKey = ScopeAttributesUtil.getScopeTextAttributeKey(xScope.getName()); TextAttributes xAttributes = new TextAttributes(Color.cyan, Color.darkGray, Color.blue, null, Font.ITALIC); scheme.setAttributes(xKey, xAttributes); - TextAttributesKey utilKey = ColorAndFontOptions.getScopeTextAttributeKey(utilScope.getName()); + TextAttributesKey utilKey = ScopeAttributesUtil.getScopeTextAttributeKey(utilScope.getName()); TextAttributes utilAttributes = new TextAttributes(Color.gray, Color.magenta, Color.orange, EffectType.STRIKEOUT, Font.BOLD); scheme.setAttributes(utilKey, utilAttributes); NamedScope projectScope = PackagesScopesProvider.getInstance(myProject).getProjectProductionScope(); - TextAttributesKey projectKey = ColorAndFontOptions.getScopeTextAttributeKey(projectScope.getName()); + TextAttributesKey projectKey = ScopeAttributesUtil.getScopeTextAttributeKey(projectScope.getName()); TextAttributes projectAttributes = new TextAttributes(null, null, Color.blue, EffectType.BOXED, Font.ITALIC); scheme.setAttributes(projectKey, projectAttributes); diff --git a/platform/analysis-api/src/com/intellij/packageDependencies/DependencyRule.java b/platform/analysis-api/src/com/intellij/packageDependencies/DependencyRule.java index fb2fdd034662..99acb49b4ce5 100644 --- a/platform/analysis-api/src/com/intellij/packageDependencies/DependencyRule.java +++ b/platform/analysis-api/src/com/intellij/packageDependencies/DependencyRule.java @@ -21,6 +21,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.search.scope.packageSet.ComplementPackageSet; import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.PackageSet; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class DependencyRule { @@ -34,7 +35,7 @@ public class DependencyRule { myDenyRule = isDenyRule; } - public boolean isForbiddenToUse(PsiFile from, PsiFile to) { + public boolean isForbiddenToUse(@NotNull PsiFile from, @NotNull PsiFile to) { if (myFromScope == null || myToScope == null) return false; final PackageSet fromSet = myFromScope.getValue(); final PackageSet toSet = myToScope.getValue(); @@ -46,7 +47,7 @@ public class DependencyRule { && toSet.contains(to, holder); } - public boolean isApplicable(PsiFile file){ + public boolean isApplicable(@NotNull PsiFile file){ if (myFromScope == null || myToScope == null) return false; final PackageSet fromSet = myFromScope.getValue(); if (fromSet == null) return false; diff --git a/platform/analysis-api/src/com/intellij/packageDependencies/DependencyValidationManager.java b/platform/analysis-api/src/com/intellij/packageDependencies/DependencyValidationManager.java index d1818b3d3b0e..723aef818091 100644 --- a/platform/analysis-api/src/com/intellij/packageDependencies/DependencyValidationManager.java +++ b/platform/analysis-api/src/com/intellij/packageDependencies/DependencyValidationManager.java @@ -41,24 +41,26 @@ public abstract class DependencyValidationManager extends NamedScopesHolder { public abstract boolean hasRules(); @Nullable - public abstract DependencyRule getViolatorDependencyRule(PsiFile from, PsiFile to); + public abstract DependencyRule getViolatorDependencyRule(@NotNull PsiFile from, @NotNull PsiFile to); @NotNull - public abstract DependencyRule[] getViolatorDependencyRules(PsiFile from, PsiFile to); + public abstract DependencyRule[] getViolatorDependencyRules(@NotNull PsiFile from, @NotNull PsiFile to); @NotNull - public abstract DependencyRule[] getApplicableRules(PsiFile file); + public abstract DependencyRule[] getApplicableRules(@NotNull PsiFile file); + @NotNull public abstract DependencyRule[] getAllRules(); public abstract void removeAllRules(); - public abstract void addRule(DependencyRule rule); + public abstract void addRule(@NotNull DependencyRule rule); public abstract boolean skipImportStatements(); public abstract void setSkipImportStatements(boolean skip); + @NotNull public abstract Map getUnnamedScopes(); public abstract void reloadRules(); diff --git a/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyValidationManagerImpl.java b/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyValidationManagerImpl.java index 190aaca594b1..80a7deb48ab2 100644 --- a/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyValidationManagerImpl.java +++ b/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyValidationManagerImpl.java @@ -18,6 +18,7 @@ package com.intellij.packageDependencies; import com.intellij.icons.AllIcons; import com.intellij.ide.IdeBundle; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -25,6 +26,7 @@ import com.intellij.openapi.util.*; import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.PsiFile; import com.intellij.psi.search.scope.packageSet.*; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.UniqueNameGenerator; import org.jdom.Attribute; import org.jdom.Element; @@ -46,6 +48,7 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager private static final Logger LOG = Logger.getInstance("#com.intellij.packageDependencies.DependencyValidationManagerImpl"); private final List myRules = new ArrayList(); + private final NamedScopeManager myNamedScopeManager; public boolean SKIP_IMPORT_STATEMENTS = false; @@ -59,8 +62,15 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager private final Map myUnnamedScopes = new HashMap(); - public DependencyValidationManagerImpl(final Project project) { + public DependencyValidationManagerImpl(final Project project, NamedScopeManager namedScopeManager) { super(project); + myNamedScopeManager = namedScopeManager; + namedScopeManager.addScopeListener(new ScopeListener() { + @Override + public void scopesChanged() { + reloadScopes(); + } + }); } @Override @@ -95,7 +105,7 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager @Override @Nullable - public DependencyRule getViolatorDependencyRule(PsiFile from, PsiFile to) { + public DependencyRule getViolatorDependencyRule(@NotNull PsiFile from, @NotNull PsiFile to) { for (DependencyRule dependencyRule : myRules) { if (dependencyRule.isForbiddenToUse(from, to)) return dependencyRule; } @@ -105,7 +115,7 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager @Override @NotNull - public DependencyRule[] getViolatorDependencyRules(PsiFile from, PsiFile to) { + public DependencyRule[] getViolatorDependencyRules(@NotNull PsiFile from, @NotNull PsiFile to) { ArrayList result = new ArrayList(); for (DependencyRule dependencyRule : myRules) { if (dependencyRule.isForbiddenToUse(from, to)) { @@ -117,7 +127,7 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager @NotNull @Override - public DependencyRule[] getApplicableRules(PsiFile file) { + public DependencyRule[] getApplicableRules(@NotNull PsiFile file) { ArrayList result = new ArrayList(); for (DependencyRule dependencyRule : myRules) { if (dependencyRule.isApplicable(file)) { @@ -137,11 +147,13 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager SKIP_IMPORT_STATEMENTS = skip; } + @NotNull @Override public Map getUnnamedScopes() { return myUnnamedScopes; } + @NotNull @Override public DependencyRule[] getAllRules() { return myRules.toArray(new DependencyRule[myRules.size()]); @@ -153,7 +165,7 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager } @Override - public void addRule(DependencyRule rule) { + public void addRule(@NotNull DependencyRule rule) { appendUnnamedScope(rule.getFromScope()); appendUnnamedScope(rule.getToScope()); myRules.add(rule); @@ -193,7 +205,6 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager catch (InvalidDataException e) { LOG.info(e); } - super.loadState(element); myUnnamedScopes.clear(); final List unnamedScopes = element.getChildren(UNNAMED_SCOPE); @@ -209,6 +220,7 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager } readRules(element); + super.loadState(element); // fire listeners after all reads } private void readRules(Element element) { @@ -336,4 +348,35 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager } } + + private final List> myScopes = ContainerUtil.createLockFreeCopyOnWriteList(); + + private void reloadScopes() { + ApplicationManager.getApplication().assertIsDispatchThread(); + List> scopeList = new ArrayList>(); + addScopesToList(scopeList, this); + addScopesToList(scopeList, myNamedScopeManager); + myScopes.clear(); + myScopes.addAll(scopeList); + reloadRules(); + } + + private static void addScopesToList(@NotNull final List> scopeList, + @NotNull final NamedScopesHolder holder) { + NamedScope[] scopes = holder.getScopes(); + for (NamedScope scope : scopes) { + scopeList.add(Pair.create(scope, holder)); + } + } + + @NotNull + public List> getScopeBasedHighlightingCachedScopes() { + return myScopes; + } + + @Override + public void fireScopeListeners() { + super.fireScopeListeners(); + reloadScopes(); + } } diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index 5d7ae51e43e9..cf5d538e9723 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -19,7 +19,6 @@ package com.intellij.application.options.colors; import com.intellij.application.options.OptionsContainingConfigurable; import com.intellij.application.options.editor.EditorOptionsProvider; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl; import com.intellij.execution.impl.ConsoleViewUtil; import com.intellij.ide.ui.LafManager; import com.intellij.ide.ui.laf.darcula.DarculaInstaller; @@ -56,6 +55,8 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.FileStatus; import com.intellij.openapi.vcs.FileStatusFactory; import com.intellij.openapi.vcs.FileStatusManager; +import com.intellij.packageDependencies.DependencyValidationManager; +import com.intellij.packageDependencies.DependencyValidationManagerImpl; import com.intellij.psi.codeStyle.DisplayPriority; import com.intellij.psi.codeStyle.DisplayPrioritySortable; import com.intellij.psi.search.scope.packageSet.NamedScope; @@ -151,15 +152,16 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return mySelectedScheme.getDescriptors(); } - public static boolean isReadOnly(final EditorColorsScheme scheme) { + public static boolean isReadOnly(@NotNull final EditorColorsScheme scheme) { return ((MyColorScheme)scheme).isReadOnly(); } + @NotNull public String[] getSchemeNames() { - ArrayList schemes = new ArrayList(mySchemes.values()); + List schemes = new ArrayList(mySchemes.values()); Collections.sort(schemes, new Comparator() { @Override - public int compare(MyColorScheme o1, MyColorScheme o2) { + public int compare(@NotNull MyColorScheme o1, @NotNull MyColorScheme o2) { if (isReadOnly(o1) && !isReadOnly(o2)) return -1; if (!isReadOnly(o1) && isReadOnly(o2)) return 1; @@ -167,7 +169,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } }); - ArrayList names = new ArrayList(schemes.size()); + List names = new ArrayList(schemes.size()); for (MyColorScheme scheme : schemes) { names.add(scheme.getName()); } @@ -175,6 +177,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return ArrayUtil.toStringArray(names); } + @NotNull public Collection getSchemes() { return new ArrayList(mySchemes.values()); } @@ -198,7 +201,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract resetSchemesCombo(null); } - public void addImportedScheme(final EditorColorsScheme imported) { + public void addImportedScheme(@NotNull final EditorColorsScheme imported) { MyColorScheme newScheme = new MyColorScheme(imported); initScheme(newScheme); @@ -312,6 +315,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return true; } + @NotNull @Override public Configurable[] buildConfigurables() { myDisposeCompleted = false; @@ -329,6 +333,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return result.toArray(new Configurable[result.size()]); } + @NotNull private Set getPanels() { Set result = new HashSet(); for (InnerSearchableConfigurable configurable : mySubPanelFactories.values()) { @@ -341,7 +346,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } protected List createPanelFactories() { - ArrayList result = new ArrayList(); + List result = new ArrayList(); result.add(new FontConfigurableFactory()); List extensions = new ArrayList(); @@ -443,6 +448,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return "Console Font"; } + @NotNull @Override public DisplayPriority getPriority() { return DisplayPriority.COMMON_SETTINGS; @@ -499,8 +505,8 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract assert mySelectedScheme != null : EditorColorsManager.getInstance().getGlobalScheme().getName() + "; myschemes=" + mySchemes; } - private static void initScheme(MyColorScheme scheme) { - ArrayList descriptions = new ArrayList(); + private static void initScheme(@NotNull MyColorScheme scheme) { + List descriptions = new ArrayList(); initPluggedDescriptions(descriptions, scheme); initDiffDescriptors(descriptions, scheme); initFileStatusDescriptors(descriptions, scheme); @@ -509,7 +515,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract scheme.setDescriptors(descriptions.toArray(new EditorSchemeAttributeDescriptor[descriptions.size()])); } - private static void initPluggedDescriptions(ArrayList descriptions, MyColorScheme scheme) { + private static void initPluggedDescriptions(@NotNull List descriptions, @NotNull MyColorScheme scheme) { ColorSettingsPage[] pages = ColorSettingsPages.getInstance().getRegisteredPages(); for (ColorSettingsPage page : pages) { initDescriptions(page, descriptions, scheme); @@ -519,9 +525,9 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } } - private static void initDescriptions(ColorAndFontDescriptorsProvider provider, - ArrayList descriptions, - MyColorScheme scheme) { + private static void initDescriptions(@NotNull ColorAndFontDescriptorsProvider provider, + @NotNull List descriptions, + @NotNull MyColorScheme scheme) { String group = provider.getDisplayName(); List attributeDescriptors = ColorSettingsUtil.getAllAttributeDescriptors(provider); for (AttributesDescriptor descriptor : attributeDescriptors) { @@ -536,11 +542,11 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } } - private static void initDiffDescriptors(ArrayList descriptions, MyColorScheme scheme) { + private static void initDiffDescriptors(@NotNull List descriptions, @NotNull MyColorScheme scheme) { DiffOptionsPanel.addSchemeDescriptions(descriptions, scheme); } - private static void initFileStatusDescriptors(ArrayList descriptions, MyColorScheme scheme) { + private static void initFileStatusDescriptors(@NotNull List descriptions, MyColorScheme scheme) { FileStatus[] statuses = FileStatusFactory.getInstance().getAllFileStatuses(); @@ -554,22 +560,22 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } } - private static void initScopesDescriptors(ArrayList descriptions, MyColorScheme scheme) { + private static void initScopesDescriptors(@NotNull List descriptions, @NotNull MyColorScheme scheme) { Set> namedScopes = new THashSet>(new TObjectHashingStrategy>() { @Override - public int computeHashCode(final Pair object) { + public int computeHashCode(@NotNull final Pair object) { return object.getFirst().getName().hashCode(); } @Override - public boolean equals(final Pair o1, final Pair o2) { + public boolean equals(@NotNull final Pair o1, @NotNull final Pair o2) { return o1.getFirst().getName().equals(o2.getFirst().getName()); } }); Project[] projects = ProjectManager.getInstance().getOpenProjects(); for (Project project : projects) { - DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(project); - List> cachedScopes = codeAnalyzer.getScopeBasedHighlightingCachedScopes(); + DependencyValidationManagerImpl validationManager = (DependencyValidationManagerImpl)DependencyValidationManager.getInstance(project); + List> cachedScopes = validationManager.getScopeBasedHighlightingCachedScopes(); namedScopes.addAll(cachedScopes); } @@ -577,14 +583,14 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract Collections.sort(list, new Comparator>() { @Override - public int compare(final Pair o1, final Pair o2) { + public int compare(@NotNull final Pair o1, @NotNull final Pair o2) { return o1.getFirst().getName().compareToIgnoreCase(o2.getFirst().getName()); } }); for (Pair pair : list) { NamedScope namedScope = pair.getFirst(); String name = namedScope.getName(); - TextAttributesKey textAttributesKey = getScopeTextAttributeKey(name); + TextAttributesKey textAttributesKey = ScopeAttributesUtil.getScopeTextAttributeKey(name); if (scheme.getAttributes(textAttributesKey) == null) { scheme.setAttributes(textAttributesKey, new TextAttributes()); } @@ -600,16 +606,12 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } } - public static TextAttributesKey getScopeTextAttributeKey(final String scope) { - return TextAttributesKey.find("SCOPE_KEY_" + scope); - } - - private static void addEditorSettingDescription(ArrayList array, - String name, - String group, - ColorKey backgroundKey, - ColorKey foregroundKey, - EditorColorsScheme scheme) { + private static void addEditorSettingDescription(@NotNull List array, + String name, + String group, + @Nullable ColorKey backgroundKey, + @Nullable ColorKey foregroundKey, + EditorColorsScheme scheme) { String type = null; if (foregroundKey != null) { type = foregroundKey.getExternalName(); @@ -623,8 +625,11 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract array.add(descr); } - private static void addSchemedDescription(ArrayList array, String name, String group, TextAttributesKey key, - MyColorScheme scheme, + private static void addSchemedDescription(@NotNull List array, + String name, + String group, + @NotNull TextAttributesKey key, + @NotNull MyColorScheme scheme, Icon icon, String toolTip) { ColorAndFontDescription descr = new SchemeTextAttributesDescription(name, group, key, scheme, icon, toolTip); @@ -757,12 +762,12 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract private static class SchemeTextAttributesDescription extends TextAttributesDescription { - private final TextAttributes myAttributesToApply; - private final TextAttributesKey key; + @NotNull private final TextAttributes myAttributesToApply; + @NotNull private final TextAttributesKey key; private TextAttributes myFallbackAttributes; private Pair myBaseAttributeDescriptor; - private SchemeTextAttributesDescription(String name, String group, TextAttributesKey key, MyColorScheme scheme, Icon icon, + private SchemeTextAttributesDescription(String name, String group, @NotNull TextAttributesKey key, @NotNull MyColorScheme scheme, Icon icon, String toolTip) { super(name, group, getInitialAttributes(scheme, key).clone(), @@ -783,7 +788,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract @NotNull - private static TextAttributes getInitialAttributes(MyColorScheme scheme, TextAttributesKey key) { + private static TextAttributes getInitialAttributes(@NotNull MyColorScheme scheme, @NotNull TextAttributesKey key) { TextAttributes attributes = scheme.getAttributes(key); TextAttributesKey fallbackKey = key.getFallbackAttributeKey(); if (fallbackKey != null && !scheme.containsKey(key)) { @@ -798,9 +803,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract @Override public void apply(EditorColorsScheme scheme) { if (scheme == null) scheme = getScheme(); - if (myAttributesToApply != null) { - scheme.setAttributes(key, getTextAttributes()); - } + scheme.setAttributes(key, getTextAttributes()); } @Override @@ -900,6 +903,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract public void setExternalEffectType(EffectType type) { } + @NotNull @Override public EffectType getExternalEffectType() { return EffectType.LINE_UNDERSCORE; @@ -995,7 +999,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract private String myName; private boolean myIsNew = false; - private MyColorScheme(EditorColorsScheme parentScheme) { + private MyColorScheme(@NotNull EditorColorsScheme parentScheme) { super(parentScheme, DefaultColorSchemesManager.getInstance()); parentScheme.getFontPreferences().copyTo(getFontPreferences()); setLineSpacing(parentScheme.getLineSpacing()); @@ -1052,21 +1056,19 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract private boolean isFontModified() { if (!getFontPreferences().equals(myParentScheme.getFontPreferences())) return true; if (getLineSpacing() != myParentScheme.getLineSpacing()) return true; - if (getQuickDocFontSize() != myParentScheme.getQuickDocFontSize()) return true; - return false; + return getQuickDocFontSize() != myParentScheme.getQuickDocFontSize(); } private boolean isConsoleFontModified() { if (!getConsoleFontPreferences().equals(myParentScheme.getConsoleFontPreferences())) return true; - if (getConsoleLineSpacing() != myParentScheme.getConsoleLineSpacing()) return true; - return false; + return getConsoleLineSpacing() != myParentScheme.getConsoleLineSpacing(); } public void apply() { apply(myParentScheme); } - public void apply(EditorColorsScheme scheme) { + public void apply(@NotNull EditorColorsScheme scheme) { scheme.setFontPreferences(getFontPreferences()); scheme.setLineSpacing(myLineSpacing); scheme.setQuickDocFontSize(getQuickDocFontSize()); @@ -1095,6 +1097,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return myIsNew; } + @NotNull @Override public String toString() { return "temporary scheme for " + myName; @@ -1114,7 +1117,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } @Nullable - public InnerSearchableConfigurable findSubConfigurable(final Class pageClass) { + public InnerSearchableConfigurable findSubConfigurable(@NotNull final Class pageClass) { if (mySubPanelFactories == null) { buildConfigurables(); } @@ -1142,12 +1145,13 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract private class InnerSearchableConfigurable implements SearchableConfigurable, OptionsContainingConfigurable, NoScroll { private NewColorAndFontPanel mySubPanel; private boolean mySubInitInvoked = false; - private final ColorAndFontPanelFactory myFactory; + @NotNull private final ColorAndFontPanelFactory myFactory; private InnerSearchableConfigurable(@NotNull ColorAndFontPanelFactory factory) { myFactory = factory; } + @NotNull @Override @Nls public String getDisplayName() { @@ -1255,11 +1259,13 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return createPanel().showOption(option); } + @NotNull @Override public Set processListOptions() { return createPanel().processListOptions(); } + @NotNull @NonNls @Override public String toString() { diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ScopeAttributesUtil.java b/platform/lang-impl/src/com/intellij/application/options/colors/ScopeAttributesUtil.java new file mode 100644 index 000000000000..4466f6873325 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ScopeAttributesUtil.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.application.options.colors; + +import com.intellij.openapi.editor.colors.TextAttributesKey; +import org.jetbrains.annotations.NotNull; + +public class ScopeAttributesUtil { + @NotNull + public static TextAttributesKey getScopeTextAttributeKey(@NotNull String scope) { + return TextAttributesKey.find("SCOPE_KEY_" + scope); + } +} diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java index 23f337bf13a0..a563dd032fca 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java @@ -57,15 +57,12 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileSystemItem; import com.intellij.psi.impl.PsiDocumentManagerImpl; -import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.NamedScopeManager; -import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.Alarm; import com.intellij.util.CommonProcessors; import com.intellij.util.Processor; import com.intellij.util.SmartList; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; @@ -146,14 +143,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx assert !myInitialized : "Double Initializing"; Disposer.register(myProject, new StatusBarUpdater(myProject)); - ApplicationManager.getApplication().invokeLater(new Runnable() { - @Override - public void run() { - reloadScopes(dependencyValidationManager, namedScopeManager); - } - }, project.getDisposed()); - - myInitialized = true; myDisposed = false; myFileStatusMap.markAllFilesDirty(); @@ -323,31 +312,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx TrafficLightRenderer.setOrRefreshErrorStripeRenderer(markup, myProject, document, psiFile); } - private final List> myScopes = ContainerUtil.createLockFreeCopyOnWriteList(); - - void reloadScopes(@NotNull DependencyValidationManager dependencyValidationManager, @NotNull NamedScopeManager namedScopeManager) { - ApplicationManager.getApplication().assertIsDispatchThread(); - List> scopeList = new ArrayList>(); - addScopesToList(scopeList, namedScopeManager); - addScopesToList(scopeList, dependencyValidationManager); - myScopes.clear(); - myScopes.addAll(scopeList); - dependencyValidationManager.reloadRules(); - } - - private static void addScopesToList(@NotNull final List> scopeList, - @NotNull final NamedScopesHolder holder) { - NamedScope[] scopes = holder.getScopes(); - for (NamedScope scope : scopes) { - scopeList.add(Pair.create(scope, holder)); - } - } - - @NotNull - public List> getScopeBasedHighlightingCachedScopes() { - return myScopes; - } - @Override public void settingsChanged() { DaemonCodeAnalyzerSettings settings = DaemonCodeAnalyzerSettings.getInstance(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java index 95dc71aa4ae0..dc0978560b42 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java @@ -71,11 +71,9 @@ import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerImpl; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.search.scope.packageSet.NamedScopeManager; -import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.util.messages.MessageBus; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.ui.UIUtil; -import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -85,7 +83,6 @@ import java.beans.PropertyChangeListener; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Set; /** @@ -328,21 +325,6 @@ public class DaemonListeners implements Disposable { ((EditorEventMulticasterEx)eventMulticaster).addErrorStripeListener(new ErrorStripeHandler(myProject), this); - Set holders = new THashSet(Arrays.asList(NamedScopesHolder.getAllNamedScopeHolders(project))); - // to ensure initialization dependency - holders.add(namedScopeManager); - holders.add(dependencyValidationManager); - - NamedScopesHolder.ScopeListener scopeListener = new NamedScopesHolder.ScopeListener() { - @Override - public void scopesChanged() { - myDaemonCodeAnalyzer.reloadScopes(dependencyValidationManager, namedScopeManager); - } - }; - for (NamedScopesHolder holder : holders) { - holder.addScopeListener(scopeListener); - } - ModalityStateListener modalityStateListener = new ModalityStateListener() { @Override public void beforeModalityStateChanged(boolean entering) {