1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Moved ILanguageSettingsChangeListener & ILanguageSettingsChangeEvent to

API package, same for serializeLanguageSettings() &
serializeLanguageSettingsWorkspace()
This commit is contained in:
Andrew Gvozdev 2011-11-27 20:02:02 -05:00
parent f6151d3a72
commit 689c2a5f17
17 changed files with 243 additions and 206 deletions

View file

@ -27,7 +27,6 @@ import org.eclipse.cdt.core.errorparsers.RegexErrorPattern;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.internal.core.ConsoleOutputSniffer; import org.eclipse.cdt.internal.core.ConsoleOutputSniffer;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
@ -140,27 +139,17 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
Job job = new Job("Serialize CDT language settings entries") { Job job = new Job("Serialize CDT language settings entries") {
@Override @Override
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {
// FIXME - remove thread name reassigning IStatus status = Status.OK_STATUS;
Thread thread = getThread();
String oldName = thread.getName();
thread.setName("CDT LSP Serializer,BOP");
IStatus status = null;
try { try {
if (cfgDescription != null) { if (cfgDescription != null) {
LanguageSettingsProvidersSerializer.serializeLanguageSettings(cfgDescription.getProjectDescription()); LanguageSettingsManager.serializeLanguageSettings(cfgDescription.getProjectDescription());
} else { } else {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
} }
} catch (CoreException e) { } catch (CoreException e) {
status = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); status = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e);
MakeCorePlugin.log(status); MakeCorePlugin.log(status);
} }
if (status == null)
status = Status.OK_STATUS;
thread.setName(oldName);
return status; return status;
} }
@Override @Override

View file

@ -28,6 +28,7 @@ import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.ProblemMarkerInfo; import org.eclipse.cdt.core.ProblemMarkerInfo;
import org.eclipse.cdt.core.index.IIndexManager; import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent; import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ICProject;
@ -41,7 +42,6 @@ import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.internal.core.ConsoleOutputSniffer; import org.eclipse.cdt.internal.core.ConsoleOutputSniffer;
import org.eclipse.cdt.internal.core.XmlUtil; import org.eclipse.cdt.internal.core.XmlUtil;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsLogger; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsLogger;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.internal.core.MakeMessages; import org.eclipse.cdt.make.internal.core.MakeMessages;
import org.eclipse.cdt.make.internal.core.StreamMonitor; import org.eclipse.cdt.make.internal.core.StreamMonitor;
@ -375,9 +375,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
if (isChanged) { // avoids resource and settings change notifications if (isChanged) { // avoids resource and settings change notifications
try { try {
if (currentCfgDescription != null) { if (currentCfgDescription != null) {
LanguageSettingsProvidersSerializer.serializeLanguageSettings(currentCfgDescription.getProjectDescription()); LanguageSettingsManager.serializeLanguageSettings(currentCfgDescription.getProjectDescription());
} else { } else {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
} }
} catch (CoreException e) { } catch (CoreException e) {
IStatus s = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); IStatus s = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e);

View file

@ -23,9 +23,6 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
/** /**
@ -83,7 +80,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
@Override @Override
protected void tearDown() throws Exception { protected void tearDown() throws Exception {
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.unregisterLanguageSettingsChangeListener(mockLseListener);
LanguageSettingsManager.setWorkspaceProviders(null); LanguageSettingsManager.setWorkspaceProviders(null);
super.tearDown(); super.tearDown();
} }
@ -547,7 +544,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -601,7 +598,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -666,7 +663,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -692,7 +689,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription); LanguageSettingsManager.serializeLanguageSettings(prjDescription);
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
@ -730,7 +727,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -762,7 +759,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertNull(mockLseListener.getLastEvent()); assertNull(mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_1); LanguageSettingsManager.serializeLanguageSettings(prjDescription_1);
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
@ -793,7 +790,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertNull(mockLseListener.getLastEvent()); assertNull(mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_2); LanguageSettingsManager.serializeLanguageSettings(prjDescription_2);
// inspect event // inspect event
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
@ -825,7 +822,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -886,7 +883,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -938,7 +935,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
// Add empty global provider // Add empty global provider
{ {
@ -988,7 +985,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
// get cfgDescriptionId // get cfgDescriptionId
ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false);
@ -1023,7 +1020,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
// get cfgDescriptionId // get cfgDescriptionId
ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false);

View file

@ -304,7 +304,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
assertEquals(entries.size(), actual.size()); assertEquals(entries.size(), actual.size());
// serialize language settings of workspace providers // serialize language settings of workspace providers
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
// clear the provider // clear the provider
extProvider.setSettingEntries(null, null, null, null); extProvider.setSettingEntries(null, null, null, null);

View file

@ -14,7 +14,6 @@ import java.util.List;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;

View file

@ -8,7 +8,7 @@
* Contributors: * Contributors:
* Andrew Gvozdev - initial API and implementation * Andrew Gvozdev - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.language.settings.providers; package org.eclipse.cdt.core.language.settings.providers;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;

View file

@ -8,15 +8,15 @@
* Contributors: * Contributors:
* Andrew Gvozdev - initial API and implementation * Andrew Gvozdev - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.language.settings.providers; package org.eclipse.cdt.core.language.settings.providers;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
/** /**
* An interface for listeners to changes in language settings {@link ICLanguageSettingEntry}. * An interface for listeners to changes in language settings {@link ICLanguageSettingEntry}.
* *
* @see LanguageSettingsProvidersSerializer#registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener) * @see LanguageSettingsManager#registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener)
* @see LanguageSettingsProvidersSerializer#unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener) * @see LanguageSettingsManager#unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener)
*/ */
public interface ILanguageSettingsChangeListener { public interface ILanguageSettingsChangeListener {
/** /**

View file

@ -22,6 +22,7 @@ import org.eclipse.cdt.core.settings.model.ICFileDescription;
import org.eclipse.cdt.core.settings.model.ICFolderDescription; import org.eclipse.cdt.core.settings.model.ICFolderDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting; import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager;
@ -35,8 +36,6 @@ import org.eclipse.core.runtime.IPath;
/** /**
* A collection of utility methods to manage language settings providers. * A collection of utility methods to manage language settings providers.
* See {@link ILanguageSettingsProvider}. * See {@link ILanguageSettingsProvider}.
*
* @since 6.0
*/ */
public class LanguageSettingsManager { public class LanguageSettingsManager {
/** /**
@ -257,4 +256,41 @@ public class LanguageSettingsManager {
return languageIds; return languageIds;
} }
/**
* Adds a listener that will be notified of changes in language settings.
*
* @param listener the listener to add
*/
public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(listener);
}
/**
* Removes a language settings change listener.
*
* @param listener the listener to remove.
*/
public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(listener);
}
/**
* Save language settings providers of a project to persistent storage.
*
* @param prjDescription - project description of the project.
* @throws CoreException if something goes wrong.
*/
public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException {
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription);
}
/**
* Save language settings providers of the workspace (global providers) to persistent storage.
*
* @throws CoreException
*/
public static void serializeLanguageSettingsWorkspace() throws CoreException {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace();
}
} }

View file

@ -51,7 +51,7 @@ public class LanguageSettingsManager_TBD {
try { try {
return ! LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) provider); return ! LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) provider);
} catch (Exception e) { } catch (Exception e) {
CCorePlugin.log("Internal Error: cannot clone provider "+provider.getId(), e); CCorePlugin.log(e);
} }
} }
return false; return false;

View file

@ -18,7 +18,6 @@ import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.internal.core.XmlUtil; import org.eclipse.cdt.internal.core.XmlUtil;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.w3c.dom.Element; import org.w3c.dom.Element;
@ -156,9 +155,8 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
* Sets language settings entries for the provider. * Sets language settings entries for the provider.
* Note that the entries are not persisted at that point. Use this method to * Note that the entries are not persisted at that point. Use this method to
* set the entries for all resources and then to persist use * set the entries for all resources and then to persist use
* {@fixme FIXME - update references with API versions} * {@link LanguageSettingsManager#serializeLanguageSettings(ICProjectDescription)} or
* {@link LanguageSettingsProvidersSerializer#serializeLanguageSettings(ICProjectDescription)} or * {@link LanguageSettingsManager#serializeLanguageSettingsWorkspace()}.
* {@link LanguageSettingsProvidersSerializer#serializeLanguageSettingsWorkspace()}.
* See for example {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector} * See for example {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector}
* in build plugins. * in build plugins.
* *

View file

@ -66,7 +66,7 @@ public class LanguageSettingsLogger {
@Deprecated @Deprecated
public static void logScannerInfoProvider(IResource rc, Object who) { public static void logScannerInfoProvider(IResource rc, Object who) {
if (isEnabled()) { if (isEnabled()) {
String msg = "rc="+rc+" <-- "+who.getClass().getSimpleName(); String msg = "rc="+rc+" <-- "+who.getClass().getSimpleName(); //$NON-NLS-1$ //$NON-NLS-2$
if (rc instanceof IFile) { if (rc instanceof IFile) {
LanguageSettingsLogger.logInfo(msg); LanguageSettingsLogger.logInfo(msg);
} else if (rc instanceof IProject) { } else if (rc instanceof IProject) {

View file

@ -8,7 +8,6 @@
* Contributors: * Contributors:
* Andrew Gvozdev - initial API and implementation * Andrew Gvozdev - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.language.settings.providers; package org.eclipse.cdt.internal.core.language.settings.providers;
import java.net.URI; import java.net.URI;
@ -20,6 +19,8 @@ import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent; import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
@ -58,8 +59,11 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
/**
* Helper class handling serialization and notifications for language settings entries {@link ICLanguageSettingEntry}.
*/
public class LanguageSettingsProvidersSerializer { public class LanguageSettingsProvidersSerializer {
private static final String PREFERENCE_WORSPACE_PROVIDERS_SET = "language.settings.providers.set.for.workspace"; private static final String PREFERENCE_WORSPACE_PROVIDERS_SET = "language.settings.providers.set.for.workspace"; //$NON-NLS-1$
private static final String STORAGE_WORKSPACE_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$ private static final String STORAGE_WORKSPACE_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$
private static final String SETTINGS_FOLDER_NAME = ".settings/"; //$NON-NLS-1$ private static final String SETTINGS_FOLDER_NAME = ".settings/"; //$NON-NLS-1$
private static final String STORAGE_PROJECT_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$ private static final String STORAGE_PROJECT_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$
@ -372,6 +376,11 @@ projects:
return events; return events;
} }
/**
* Save language settings providers of the workspace (global providers) to persistent storage.
*
* @throws CoreException
*/
public static void serializeLanguageSettingsWorkspace() throws CoreException { public static void serializeLanguageSettingsWorkspace() throws CoreException {
LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace()"); LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace()");
@ -530,6 +539,12 @@ projects:
} }
} }
/**
* Save language settings providers of a project to persistent storage.
*
* @param prjDescription - project description of the project.
* @throws CoreException if something goes wrong.
*/
public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException { public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException {
IProject project = prjDescription.getProject(); IProject project = prjDescription.getProject();
LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettings() for " + project); LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettings() for " + project);
@ -993,7 +1008,7 @@ projects:
/** /**
* Adds a listener that will be notified of changes in language settings. * Adds a listener that will be notified of changes in language settings.
* *
* @param listener the ILanguageMappingChangeListener to add * @param listener the listener to add
*/ */
public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
fLanguageSettingsChangeListeners.add(listener); fLanguageSettingsChangeListeners.add(listener);
@ -1002,7 +1017,7 @@ projects:
/** /**
* Removes a language settings change listener. * Removes a language settings change listener.
* *
* @param listener the ILanguageMappingChangeListener to remove. * @param listener the listener to remove.
*/ */
public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
fLanguageSettingsChangeListeners.remove(listener); fLanguageSettingsChangeListeners.remove(listener);

View file

@ -49,7 +49,6 @@ import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSetting
import org.eclipse.cdt.utils.envvar.StorableEnvironment; import org.eclipse.cdt.utils.envvar.StorableEnvironment;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.osgi.util.NLS;
/** /**
* CConfigurationSpecSettings impelements ICSettingsStorage * CConfigurationSpecSettings impelements ICSettingsStorage
@ -1014,15 +1013,13 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
for (ILanguageSettingsProvider provider : providers) { for (ILanguageSettingsProvider provider : providers) {
String id = provider.getId(); String id = provider.getId();
if (provider==LanguageSettingsProvidersSerializer.getRawWorkspaceProvider(id)) { if (provider==LanguageSettingsProvidersSerializer.getRawWorkspaceProvider(id)) {
String msg = "Error: Attempt to add to the configuration raw global provider " + id; throw new IllegalArgumentException("Error: Attempt to add to the configuration raw global provider " + id); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
} }
if (!ids.contains(id)) { if (!ids.contains(id)) {
fLanguageSettingsProviders.add(provider); fLanguageSettingsProviders.add(provider);
ids.add(id); ids.add(id);
} else { } else {
String msg = NLS.bind(SettingsModelMessages.getString("CConfigurationSpecSettings.MustHaveUniqueID"), id); //$NON-NLS-1$ throw new IllegalArgumentException("Language Settings Providers must have unique ID. Duplicate ID=" + id); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
} }
} }
fIsModified = true; fIsModified = true;

View file

@ -16,7 +16,6 @@ CConfigurationDescription.1=expected proxy of type ICFileDescription, but was
CConfigurationDescription.2=data was not created CConfigurationDescription.2=data was not created
CConfigurationDescription.3=expected proxy of type ICFolderDescription, but was CConfigurationDescription.3=expected proxy of type ICFolderDescription, but was
CConfigurationDescriptionCache.0=description is read only CConfigurationDescriptionCache.0=description is read only
CConfigurationSpecSettings.MustHaveUniqueID=Language Settings Providers must have unique ID. Duplicate ID={0}
CConfigurationStatus.1=configurations settings invalid CConfigurationStatus.1=configurations settings invalid
CProjectConverterDesciptor.0=illegal provider implementation CProjectConverterDesciptor.0=illegal provider implementation
CProjectConverterDesciptor.1=no provider defined CProjectConverterDesciptor.1=no provider defined

View file

@ -34,6 +34,7 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamResult;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager;
import org.eclipse.cdt.core.settings.model.ICSettingsStorage; import org.eclipse.cdt.core.settings.model.ICSettingsStorage;
@ -173,7 +174,7 @@ public class XmlProjectDescriptionStorage extends AbstractCProjectDescriptionSto
serializingLock.acquire(); serializingLock.acquire();
projectModificaitonStamp = serialize(fDes.getProject(), ICProjectDescriptionStorageType.STORAGE_FILE_NAME, fElement); projectModificaitonStamp = serialize(fDes.getProject(), ICProjectDescriptionStorageType.STORAGE_FILE_NAME, fElement);
((ContributedEnvironment) CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment()).serialize(fDes); ((ContributedEnvironment) CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment()).serialize(fDes);
LanguageSettingsProvidersSerializer.serializeLanguageSettings(fDes); LanguageSettingsManager.serializeLanguageSettings(fDes);
} finally { } finally {
serializingLock.release(); serializingLock.release();
Job.getJobManager().removeJobChangeListener(notifyJobCanceller); Job.getJobManager().removeJobChangeListener(notifyJobCanceller);

View file

@ -11,10 +11,10 @@
package org.eclipse.cdt.internal.core.pdom; package org.eclipse.cdt.internal.core.pdom;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
@ -25,10 +25,16 @@ import org.eclipse.core.resources.ResourcesPlugin;
public class LanguageSettingsChangeListener implements ILanguageSettingsChangeListener { public class LanguageSettingsChangeListener implements ILanguageSettingsChangeListener {
private PDOMManager fManager; private PDOMManager fManager;
/**
* Constructor.
*
* @param manager - PDOM manager.
*/
public LanguageSettingsChangeListener(PDOMManager manager) { public LanguageSettingsChangeListener(PDOMManager manager) {
fManager = manager; fManager = manager;
} }
@Override
public void handleEvent(ILanguageSettingsChangeEvent event) { public void handleEvent(ILanguageSettingsChangeEvent event) {
IWorkspaceRoot wspRoot = ResourcesPlugin.getWorkspace().getRoot(); IWorkspaceRoot wspRoot = ResourcesPlugin.getWorkspace().getRoot();
IProject project = wspRoot.getProject(event.getProjectName()); IProject project = wspRoot.getProject(event.getProjectName());

View file

@ -48,6 +48,7 @@ import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.index.IIndexerStateListener; import org.eclipse.cdt.core.index.IIndexerStateListener;
import org.eclipse.cdt.core.index.IndexLocationFactory; import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.index.IndexerSetupParticipant; import org.eclipse.cdt.core.index.IndexerSetupParticipant;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICContainer; import org.eclipse.cdt.core.model.ICContainer;
@ -68,7 +69,6 @@ import org.eclipse.cdt.internal.core.index.IndexChangeEvent;
import org.eclipse.cdt.internal.core.index.IndexFactory; import org.eclipse.cdt.internal.core.index.IndexFactory;
import org.eclipse.cdt.internal.core.index.IndexerStateEvent; import org.eclipse.cdt.internal.core.index.IndexerStateEvent;
import org.eclipse.cdt.internal.core.index.provider.IndexProviderManager; import org.eclipse.cdt.internal.core.index.provider.IndexProviderManager;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.internal.core.pdom.PDOM.IListener; import org.eclipse.cdt.internal.core.pdom.PDOM.IListener;
import org.eclipse.cdt.internal.core.pdom.db.ChunkCache; import org.eclipse.cdt.internal.core.pdom.db.ChunkCache;
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
@ -240,7 +240,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD); ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
model.addElementChangedListener(fCModelListener); model.addElementChangedListener(fCModelListener);
LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener); LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener);
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(fLanguageSettingsChangeListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(fLanguageSettingsChangeListener);
final int types= CProjectDescriptionEvent.DATA_APPLIED; final int types= CProjectDescriptionEvent.DATA_APPLIED;
CCorePlugin.getDefault().getProjectDescriptionManager().addCProjectDescriptionListener(fProjectDescriptionListener, types); CCorePlugin.getDefault().getProjectDescriptionManager().addCProjectDescriptionListener(fProjectDescriptionListener, types);
@ -261,7 +261,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
final CoreModel model = CoreModel.getDefault(); final CoreModel model = CoreModel.getDefault();
model.removeElementChangedListener(fCModelListener); model.removeElementChangedListener(fCModelListener);
ResourcesPlugin.getWorkspace().removeResourceChangeListener(fCModelListener); ResourcesPlugin.getWorkspace().removeResourceChangeListener(fCModelListener);
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(fLanguageSettingsChangeListener); LanguageSettingsManager.unregisterLanguageSettingsChangeListener(fLanguageSettingsChangeListener);
LanguageManager.getInstance().unregisterLanguageChangeListener(fLanguageChangeListener); LanguageManager.getInstance().unregisterLanguageChangeListener(fLanguageChangeListener);
PDOMIndexerJob jobToCancel= null; PDOMIndexerJob jobToCancel= null;
synchronized (fTaskQueue) { synchronized (fTaskQueue) {