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){