diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java index c597d7b8b13..0372ba62cac 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java @@ -7,6 +7,7 @@ * * Contributors: * Andrew Gvozdev - initial API and implementation + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.core.language.settings.providers; @@ -119,7 +120,11 @@ public class ScannerDiscoveryLegacySupport { */ public static void setLanguageSettingsProvidersFunctionalityEnabled(IProject project, boolean value) { Preferences pref = getPreferences(project); + if (value == isLanguageSettingsProvidersFunctionalityEnabled(project)) + return; pref.putBoolean(DISABLE_LSP_PREFERENCE, !value); + // Scanner info provider have changed - clear the cached copy (http://bugs.eclipse.org/413357). + CCorePlugin.getDefault().resetCachedScannerInfoProvider(project); try { pref.flush(); } catch (BackingStoreException e) { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index cd1d4b8081b..08e08afdfef 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -12,6 +12,7 @@ * Anton Leherbauer (Wind River Systems) * oyvind.harboe@zylin.com - http://bugs.eclipse.org/250638 * Jens Elmenthaler - http://bugs.eclipse.org/173458 (camel case completion) + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.core; @@ -1059,6 +1060,23 @@ public class CCorePlugin extends Plugin { return provider; } + /** + * Clears cached scanner info provider for the given project so that the next call to + * {@link #getScannerInfoProvider(IProject)} would return an up to date scanner info provider. + * + * @noreference This method is not intended to be referenced by clients. + */ + public void resetCachedScannerInfoProvider(IProject project) { + try { + QualifiedName scannerInfoProviderName = new QualifiedName(PLUGIN_ID, SCANNER_INFO_PROVIDER2_NAME); + project.setSessionProperty(scannerInfoProviderName, null); + } catch (CoreException e) { + if (project.isOpen()) { + log(e); + } + } + } + /** * Find {@link IScannerInfoProvider} registered as extension via extension point * org.eclipse.cdt.core.ScannerInfoProvider2.