From dd567beae774c5a2182df2ce7694adc2bd13e77f Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Tue, 24 Jan 2012 14:29:11 -0500 Subject: [PATCH] Presentation of user-defined and ill-defined providers --- .../LanguageSettingsProvidersSerializer.java | 42 ++++++++++--- .../icons/ovr16/person_ovr.gif | Bin 0 -> 165 bytes .../providers/LanguageSettingsEntriesTab.java | 6 +- ...ageSettingsProviderAssociationManager.java | 4 +- .../LanguageSettingsProviderTab.java | 59 +++++++++++------- .../org/eclipse/cdt/ui/CDTSharedImages.java | 2 + 6 files changed, 80 insertions(+), 33 deletions(-) create mode 100644 core/org.eclipse.cdt.ui/icons/ovr16/person_ovr.gif diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java index 7e84eca578c..14e7077bc25 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java @@ -100,6 +100,28 @@ public class LanguageSettingsProvidersSerializer { private static ListenerList fLanguageSettingsChangeListeners = new ListenerList(ListenerList.IDENTITY); private static ILock serializingLock = Job.getJobManager().newLock(); + /** + * Dummy class to represent ill-defined provider. + */ + private static class NotAccessibleProvider implements ILanguageSettingsProvider { + private final String id; + private NotAccessibleProvider(String providerId) { + this.id = providerId; + } + @Override + public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { + return null; + } + @Override + public String getName() { + return null; + } + @Override + public String getId() { + return id; + } + } + /** * language settings provider listener-cfgDescription association */ @@ -518,7 +540,7 @@ public class LanguageSettingsProvidersSerializer { /** * Load language settings for workspace. */ - public static void loadLanguageSettingsWorkspace() throws CoreException { + public static void loadLanguageSettingsWorkspace() { List providers = null; URI uriStoreWsp = getStoreInWorkspaceArea(STORAGE_WORKSPACE_LANGUAGE_SETTINGS); @@ -542,7 +564,7 @@ public class LanguageSettingsProvidersSerializer { for (int i = 0; i < providerNodes.getLength(); i++) { Node providerNode = providerNodes.item(i); - String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID); + final String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID); if (userDefinedProvidersIds.contains(providerId)) { String msg = "Ignored an attempt to persist duplicate language settings provider, id=" + providerId; //$NON-NLS-1$ CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception())); @@ -550,10 +572,16 @@ public class LanguageSettingsProvidersSerializer { } userDefinedProvidersIds.add(providerId); - ILanguageSettingsProvider provider = loadProvider(providerNode); - if (provider != null) { - providers.add(provider); + ILanguageSettingsProvider provider = null; + try { + provider = loadProvider(providerNode); + } catch (Exception e) { + CCorePlugin.log("Error initializing workspace language settings providers", e); //$NON-NLS-1$ } + if (provider == null) { + provider = new NotAccessibleProvider(providerId); + } + providers.add(provider); } } setWorkspaceProvidersInternal(providers); @@ -838,8 +866,8 @@ public class LanguageSettingsProvidersSerializer { provider = LanguageSettingsManager.getExtensionProviderCopy(providerId, true); if (provider == null) { - String msg = "Internal Error trying to copy extension provider id=" + providerId; //$NON-NLS-1$ - CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception(msg))); + String msg = "Internal Error trying to retrieve copy of extension provider id=" + providerId; //$NON-NLS-1$ + CCorePlugin.log(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, msg, new Exception(msg))); provider = LanguageSettingsManager.getWorkspaceProvider(providerId); } diff --git a/core/org.eclipse.cdt.ui/icons/ovr16/person_ovr.gif b/core/org.eclipse.cdt.ui/icons/ovr16/person_ovr.gif new file mode 100644 index 0000000000000000000000000000000000000000..339a6fadc926849e22057411b9818981bc95fb50 GIT binary patch literal 165 zcmZ?wbhEHbWM|-DXc1*t8qBmZf_Zfu%hn>!Z6#d0YIyfF^6zUE+}|O5WTND;=`zP> z$)A|3bZU{>=_Tst*BahB7WDK%)4Q+RKK(iS>Cc7#gn;5t7Dg@xc?KN@AOP9Pz^e4% oduWR4Bp%1UfEI_esSYOu!aFvE34UcTY(); } - List workspaceProviders = LanguageSettingsManager.getWorkspaceProviders(); + List allAvailableProvidersSet = LanguageSettingsManager.getWorkspaceProviders(); // ensure sorting by name all unchecked providers - Set allAvailableProvidersSet = new TreeSet(new Comparator() { + Collections.sort(allAvailableProvidersSet, new Comparator() { @Override public int compare(ILanguageSettingsProvider prov1, ILanguageSettingsProvider prov2) { Boolean isTest1 = prov1.getId().matches(TEST_PLUGIN_ID_PATTERN); Boolean isTest2 = prov2.getId().matches(TEST_PLUGIN_ID_PATTERN); int result = isTest1.compareTo(isTest2); - if (result==0) - result = prov1.getName().compareTo(prov2.getName()); + if (result == 0) { + String name1 = prov1.getName(); + String name2 = prov2.getName(); + if (name1 != null && name2 != null) { + result = name1.compareTo(name2); + } + } return result; } }); - allAvailableProvidersSet.addAll(workspaceProviders); for (ILanguageSettingsProvider provider : allAvailableProvidersSet) { String id = provider.getId(); @@ -809,13 +819,20 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { boolean isRangeOk = pos >= 0 && pos <= last; ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); - boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider - && LanguageSettingsProviderAssociationManager.isToClear(rawProvider); + boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider && rawProvider instanceof LanguageSettingsSerializableProvider + && LanguageSettingsProviderAssociationManager.isAllowedToClear(rawProvider); boolean canClear = isAllowedClearing && (canForWorkspace || (canForProject && !LanguageSettingsManager.isWorkspaceProvider(provider))); + if (rawProvider instanceof LanguageSettingsSerializableProvider) { + canClear = canClear && !((LanguageSettingsSerializableProvider)rawProvider).isEmpty(); + } boolean canReset = (canForProject && isReconfiguredForProject(provider)) || - (canForWorkspace && (rawProvider instanceof ILanguageSettingsEditableProvider && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false))); + (canForWorkspace && + (rawProvider instanceof ILanguageSettingsEditableProvider + && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) + && ( LanguageSettingsManager.getExtensionProviderIds().contains(rawProvider.getId()) ) + ); boolean canMoveUp = canForProject && isRangeOk && pos!=0; boolean canMoveDown = canForProject && isRangeOk && pos!=last; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CDTSharedImages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CDTSharedImages.java index ed6d106d654..ab44e87cc30 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CDTSharedImages.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CDTSharedImages.java @@ -240,6 +240,8 @@ public class CDTSharedImages { public static final String IMG_OVR_EDITED = "icons/ovr16/edited_ov.gif"; //$NON-NLS-1$ /** @since 5.4 */ public static final String IMG_OVR_EMPTY = "icons/ovr16/empty_ovr.png"; //$NON-NLS-1$ + /** @since 5.4 */ + public static final String IMG_OVR_USER = "icons/ovr16/person_ovr.gif"; //$NON-NLS-1$ /** * The method finds URL of the image corresponding to the key which could be project-relative path