mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
bug 290631: Missing LSP change notification event when provider being serialized equals extension
This commit is contained in:
parent
e034731fee
commit
ae1e68cd09
2 changed files with 56 additions and 9 deletions
|
@ -1099,7 +1099,8 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
|
|||
assertEquals(1, event.getConfigurationDescriptionIds().length);
|
||||
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
|
||||
}
|
||||
// Change the provider's entries back (bug was found for this case)
|
||||
|
||||
// Clear the provider's entries
|
||||
{
|
||||
// retrieve a global provider
|
||||
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
|
||||
|
@ -1134,6 +1135,47 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
|
|||
assertEquals(1, event.getConfigurationDescriptionIds().length);
|
||||
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
|
||||
}
|
||||
|
||||
// Change the provider's entries back to original state from extension point
|
||||
{
|
||||
|
||||
ILanguageSettingsProvider extensionProviderCopy = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID, true);
|
||||
List<ICLanguageSettingEntry> extEntries = extensionProviderCopy.getSettingEntries(null, null, null);
|
||||
|
||||
// retrieve a global provider
|
||||
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
|
||||
assertNotNull(wspProvider);
|
||||
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(wspProvider);
|
||||
assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider);
|
||||
// reset the provider to match extension
|
||||
((MockLanguageSettingsEditableProvider) rawProvider).setSettingEntries(null, null, null, extEntries);
|
||||
assertTrue(LanguageSettingsManager.isEqualExtensionProvider(rawProvider, true));
|
||||
|
||||
// reset count
|
||||
mockLseListener.resetCount();
|
||||
assertEquals(0, mockLseListener.getCount());
|
||||
assertEquals(null, mockLseListener.getLastEvent());
|
||||
|
||||
// Serialize settings
|
||||
LanguageSettingsManager.serializeLanguageSettingsWorkspace();
|
||||
|
||||
// get cfgDescriptionId
|
||||
ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
|
||||
assertNotNull(prjDescription);
|
||||
ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
|
||||
assertEquals(1, cfgDescriptions.length);
|
||||
ICConfigurationDescription cfgDescription = cfgDescriptions[0];
|
||||
String cfgDescriptionId = cfgDescription.getId();
|
||||
|
||||
// inspect event
|
||||
assertEquals(1, mockLseListener.getCount());
|
||||
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
|
||||
assertNotNull(event);
|
||||
|
||||
assertEquals(project.getName(), event.getProjectName());
|
||||
assertEquals(1, event.getConfigurationDescriptionIds().length);
|
||||
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.util.Set;
|
|||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent;
|
||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsBroadcastingProvider;
|
||||
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;
|
||||
|
@ -482,11 +483,11 @@ public class LanguageSettingsProvidersSerializer {
|
|||
/**
|
||||
* Compute events for language settings changes in workspace.
|
||||
*/
|
||||
private static List<LanguageSettingsChangeEvent> createLanguageSettingsChangeEvents(List<LanguageSettingsSerializableProvider> providers) {
|
||||
private static List<LanguageSettingsChangeEvent> createLanguageSettingsChangeEvents(List<ILanguageSettingsBroadcastingProvider> providers) {
|
||||
List<LanguageSettingsChangeEvent> events = new ArrayList<LanguageSettingsChangeEvent>();
|
||||
|
||||
List<String> providerIds = new ArrayList<String>();
|
||||
for (LanguageSettingsSerializableProvider provider : providers) {
|
||||
for (ILanguageSettingsBroadcastingProvider provider : providers) {
|
||||
providerIds.add(provider.getId());
|
||||
}
|
||||
|
||||
|
@ -521,23 +522,27 @@ public class LanguageSettingsProvidersSerializer {
|
|||
*/
|
||||
public static void serializeLanguageSettingsWorkspace() throws CoreException {
|
||||
URI uriStoreWsp = getStoreInWorkspaceArea(STORAGE_WORKSPACE_LANGUAGE_SETTINGS);
|
||||
List<LanguageSettingsSerializableProvider> serializableWorkspaceProviders = new ArrayList<LanguageSettingsSerializableProvider>();
|
||||
List<ILanguageSettingsBroadcastingProvider> broadcastingWorkspaceProviders = new ArrayList<ILanguageSettingsBroadcastingProvider>();
|
||||
List<LanguageSettingsSerializableProvider> serializingWorkspaceProviders = new ArrayList<LanguageSettingsSerializableProvider>();
|
||||
for (ILanguageSettingsProvider provider : rawGlobalWorkspaceProviders.values()) {
|
||||
if (provider instanceof ILanguageSettingsBroadcastingProvider) {
|
||||
broadcastingWorkspaceProviders.add((ILanguageSettingsBroadcastingProvider)provider);
|
||||
}
|
||||
if (provider instanceof LanguageSettingsSerializableProvider) {
|
||||
if (!LanguageSettingsManager.isEqualExtensionProvider(provider, true)) {
|
||||
serializableWorkspaceProviders.add((LanguageSettingsSerializableProvider)provider);
|
||||
serializingWorkspaceProviders.add((LanguageSettingsSerializableProvider)provider);
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
List<LanguageSettingsChangeEvent> events = null;
|
||||
if (serializableWorkspaceProviders.isEmpty()) {
|
||||
if (serializingWorkspaceProviders.isEmpty()) {
|
||||
java.io.File fileStoreWsp = new java.io.File(uriStoreWsp);
|
||||
try {
|
||||
serializingLockWsp.acquire();
|
||||
fileStoreWsp.delete();
|
||||
// manufacture events while inside the lock
|
||||
events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
|
||||
events = createLanguageSettingsChangeEvents(broadcastingWorkspaceProviders);
|
||||
} finally {
|
||||
serializingLockWsp.release();
|
||||
}
|
||||
|
@ -547,7 +552,7 @@ public class LanguageSettingsProvidersSerializer {
|
|||
Element elementExtension = XmlUtil.appendElement(rootElement, ELEM_EXTENSION,
|
||||
new String[] {ATTR_EXTENSION_POINT, PROVIDER_EXTENSION_POINT_ID});
|
||||
|
||||
for (LanguageSettingsSerializableProvider provider : serializableWorkspaceProviders) {
|
||||
for (LanguageSettingsSerializableProvider provider : serializingWorkspaceProviders) {
|
||||
provider.serialize(elementExtension);
|
||||
}
|
||||
|
||||
|
@ -555,7 +560,7 @@ public class LanguageSettingsProvidersSerializer {
|
|||
serializingLockWsp.acquire();
|
||||
XmlUtil.serializeXml(doc, uriStoreWsp);
|
||||
// manufacture events while inside the lock
|
||||
events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
|
||||
events = createLanguageSettingsChangeEvents(broadcastingWorkspaceProviders);
|
||||
} finally {
|
||||
serializingLockWsp.release();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue