From d46eb7e4b7ca4ee508747f9ae05f04effb7e4d86 Mon Sep 17 00:00:00 2001 From: James Blackburn Date: Thu, 20 May 2010 17:26:56 +0000 Subject: [PATCH] Bug 313783 Log a warning if an external settings provider can't be found for the requested id --- .../settings/model/CExternalSettingsManager.java | 12 ++++++++++-- .../settings/model/ExtensionContainerFactory.java | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java index 99998c7f330..5829e97ea17 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java @@ -132,6 +132,9 @@ public class CExternalSettingsManager implements ICExternalSettingsListener, ICP private CExternalSettingsContainer fContainer; + /** Stash error messages so we're not too noisy if things go wrong */ + private static Set failingProvidersMessages; + private ContainerDescriptor(FactoryDescriptor factoryDr, String containerId, IProject project, @@ -141,12 +144,17 @@ public class CExternalSettingsManager implements ICExternalSettingsListener, ICP try { fContainer = fFactoryDr.getFactory().createContainer(containerId, project, cfgDes, previousSettings); } catch (CoreException e) { - CCorePlugin.log(e); + if (failingProvidersMessages == null) + failingProvidersMessages = new HashSet(); + // only report the error once per session + if (!failingProvidersMessages.contains(e.getMessage())) + CCorePlugin.log(e.getMessage()); + failingProvidersMessages.add(e.getMessage()); } if(fContainer == null) fContainer = NullContainer.INSTANCE; } - + public CExternalSetting[] getExternalSettings(){ if(fHolder == null){ fHolder = new CExternalSettingsHolder(); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java index 4d18dc4c09b..de5aa63d1ff 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java @@ -179,7 +179,9 @@ public class ExtensionContainerFactory extends CExternalSettingContainerFactoryW CExtensionSettingProviderDescriptor dr = getProviderDescriptorMap().get(id); if(dr != null) return dr.getContainer(project, cfgDes, previousSettings); - return CExternalSettingsManager.NullContainer.INSTANCE; + // Notify the manager that there's no external settings manager matching id. + throw new CoreException(CCorePlugin.createStatus("External settings provider: \"" + id + "\" couldn't be found for " + //$NON-NLS-1$//$NON-NLS-2$ + cfgDes.getProjectDescription().getProject() + ":"+cfgDes.getName())); //$NON-NLS-1$ } public static String[] getReferencedProviderIds(ICConfigurationDescription cfg){