From 8c7108d523c708d96d3642d846b7ca22531e1ed6 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Mon, 12 Dec 2011 14:31:07 -0500 Subject: [PATCH] Fixed decorators in PE showing incorrectly for legacy (MBS provider) --- .../MBSLanguageSettingsProvider.java | 2 +- .../providers/ILanguageSettingsProvider.java | 2 ++ .../viewsupport/ProblemsLabelDecorator.java | 19 +++++++------------ 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java index 230a950c250..36577281e90 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java @@ -69,7 +69,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase } } } - return list; + return LanguageSettingsStorage.getPooledList(list); } private ICLanguageSetting[] getLanguageSettings(ICResourceDescription rcDescription) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java index fe428bee2dc..1dee2448905 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java @@ -77,6 +77,8 @@ public interface ILanguageSettingsProvider { * (see {@link LanguageManager#getLanguageForFile(org.eclipse.core.resources.IFile, ICConfigurationDescription)}). * * @return the list of setting entries or {@code null} if no settings defined. + * The list needs to be a pooled list created by {@link LanguageSettingsStorage#getPooledList(List)} + * to save memory and avoid deep equality comparisons. */ public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java index 7e0a833d92b..f6c933f455d 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java @@ -30,7 +30,6 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.ui.texteditor.MarkerUtilities; -import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsBroadcastingProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvidersKeeper; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; @@ -397,21 +396,17 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { for (ILanguageSettingsProvider provider: ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) { - if (provider instanceof ILanguageSettingsBroadcastingProvider) { - for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) { - List list = provider.getSettingEntries(cfgDescription, rc, languageId); - if (list!=null) { - // TODO - check default or check parent? - List listDefault = provider.getSettingEntries(null, null, languageId); - // != is OK here due as the equal lists will have the same reference in WeakHashSet - if (list != listDefault) - return true; - } + for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) { + List list = provider.getSettingEntries(cfgDescription, rc, languageId); + if (list!=null) { + List listDefault = provider.getSettingEntries(cfgDescription, rc.getParent(), languageId); + // != is OK here due as the equal lists will have the same reference in WeakHashSet + if (list != listDefault) + return true; } } } } - return false; }