mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-09 10:46:02 +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(1, event.getConfigurationDescriptionIds().length);
|
||||||
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
|
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
|
// retrieve a global provider
|
||||||
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
|
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
|
||||||
|
@ -1134,6 +1135,47 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
|
||||||
assertEquals(1, event.getConfigurationDescriptionIds().length);
|
assertEquals(1, event.getConfigurationDescriptionIds().length);
|
||||||
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
|
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.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.ILanguageSettingsBroadcastingProvider;
|
||||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeEvent;
|
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.ILanguageSettingsChangeListener;
|
||||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider;
|
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider;
|
||||||
|
@ -482,11 +483,11 @@ public class LanguageSettingsProvidersSerializer {
|
||||||
/**
|
/**
|
||||||
* Compute events for language settings changes in workspace.
|
* 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<LanguageSettingsChangeEvent> events = new ArrayList<LanguageSettingsChangeEvent>();
|
||||||
|
|
||||||
List<String> providerIds = new ArrayList<String>();
|
List<String> providerIds = new ArrayList<String>();
|
||||||
for (LanguageSettingsSerializableProvider provider : providers) {
|
for (ILanguageSettingsBroadcastingProvider provider : providers) {
|
||||||
providerIds.add(provider.getId());
|
providerIds.add(provider.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,23 +522,27 @@ public class LanguageSettingsProvidersSerializer {
|
||||||
*/
|
*/
|
||||||
public static void serializeLanguageSettingsWorkspace() throws CoreException {
|
public static void serializeLanguageSettingsWorkspace() throws CoreException {
|
||||||
URI uriStoreWsp = getStoreInWorkspaceArea(STORAGE_WORKSPACE_LANGUAGE_SETTINGS);
|
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()) {
|
for (ILanguageSettingsProvider provider : rawGlobalWorkspaceProviders.values()) {
|
||||||
|
if (provider instanceof ILanguageSettingsBroadcastingProvider) {
|
||||||
|
broadcastingWorkspaceProviders.add((ILanguageSettingsBroadcastingProvider)provider);
|
||||||
|
}
|
||||||
if (provider instanceof LanguageSettingsSerializableProvider) {
|
if (provider instanceof LanguageSettingsSerializableProvider) {
|
||||||
if (!LanguageSettingsManager.isEqualExtensionProvider(provider, true)) {
|
if (!LanguageSettingsManager.isEqualExtensionProvider(provider, true)) {
|
||||||
serializableWorkspaceProviders.add((LanguageSettingsSerializableProvider)provider);
|
serializingWorkspaceProviders.add((LanguageSettingsSerializableProvider)provider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
List<LanguageSettingsChangeEvent> events = null;
|
List<LanguageSettingsChangeEvent> events = null;
|
||||||
if (serializableWorkspaceProviders.isEmpty()) {
|
if (serializingWorkspaceProviders.isEmpty()) {
|
||||||
java.io.File fileStoreWsp = new java.io.File(uriStoreWsp);
|
java.io.File fileStoreWsp = new java.io.File(uriStoreWsp);
|
||||||
try {
|
try {
|
||||||
serializingLockWsp.acquire();
|
serializingLockWsp.acquire();
|
||||||
fileStoreWsp.delete();
|
fileStoreWsp.delete();
|
||||||
// manufacture events while inside the lock
|
// manufacture events while inside the lock
|
||||||
events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
|
events = createLanguageSettingsChangeEvents(broadcastingWorkspaceProviders);
|
||||||
} finally {
|
} finally {
|
||||||
serializingLockWsp.release();
|
serializingLockWsp.release();
|
||||||
}
|
}
|
||||||
|
@ -547,7 +552,7 @@ public class LanguageSettingsProvidersSerializer {
|
||||||
Element elementExtension = XmlUtil.appendElement(rootElement, ELEM_EXTENSION,
|
Element elementExtension = XmlUtil.appendElement(rootElement, ELEM_EXTENSION,
|
||||||
new String[] {ATTR_EXTENSION_POINT, PROVIDER_EXTENSION_POINT_ID});
|
new String[] {ATTR_EXTENSION_POINT, PROVIDER_EXTENSION_POINT_ID});
|
||||||
|
|
||||||
for (LanguageSettingsSerializableProvider provider : serializableWorkspaceProviders) {
|
for (LanguageSettingsSerializableProvider provider : serializingWorkspaceProviders) {
|
||||||
provider.serialize(elementExtension);
|
provider.serialize(elementExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -555,7 +560,7 @@ public class LanguageSettingsProvidersSerializer {
|
||||||
serializingLockWsp.acquire();
|
serializingLockWsp.acquire();
|
||||||
XmlUtil.serializeXml(doc, uriStoreWsp);
|
XmlUtil.serializeXml(doc, uriStoreWsp);
|
||||||
// manufacture events while inside the lock
|
// manufacture events while inside the lock
|
||||||
events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
|
events = createLanguageSettingsChangeEvents(broadcastingWorkspaceProviders);
|
||||||
} finally {
|
} finally {
|
||||||
serializingLockWsp.release();
|
serializingLockWsp.release();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue