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

Presentation of user-defined and ill-defined providers

This commit is contained in:
Andrew Gvozdev 2012-01-24 14:29:11 -05:00
parent cfa3895aa3
commit dd567beae7
6 changed files with 80 additions and 33 deletions

View file

@ -100,6 +100,28 @@ public class LanguageSettingsProvidersSerializer {
private static ListenerList fLanguageSettingsChangeListeners = new ListenerList(ListenerList.IDENTITY); private static ListenerList fLanguageSettingsChangeListeners = new ListenerList(ListenerList.IDENTITY);
private static ILock serializingLock = Job.getJobManager().newLock(); 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<ICLanguageSettingEntry> 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 * language settings provider listener-cfgDescription association
*/ */
@ -518,7 +540,7 @@ public class LanguageSettingsProvidersSerializer {
/** /**
* Load language settings for workspace. * Load language settings for workspace.
*/ */
public static void loadLanguageSettingsWorkspace() throws CoreException { public static void loadLanguageSettingsWorkspace() {
List <ILanguageSettingsProvider> providers = null; List <ILanguageSettingsProvider> providers = null;
URI uriStoreWsp = getStoreInWorkspaceArea(STORAGE_WORKSPACE_LANGUAGE_SETTINGS); URI uriStoreWsp = getStoreInWorkspaceArea(STORAGE_WORKSPACE_LANGUAGE_SETTINGS);
@ -542,7 +564,7 @@ public class LanguageSettingsProvidersSerializer {
for (int i = 0; i < providerNodes.getLength(); i++) { for (int i = 0; i < providerNodes.getLength(); i++) {
Node providerNode = providerNodes.item(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)) { if (userDefinedProvidersIds.contains(providerId)) {
String msg = "Ignored an attempt to persist duplicate language settings provider, id=" + providerId; //$NON-NLS-1$ 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())); CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception()));
@ -550,10 +572,16 @@ public class LanguageSettingsProvidersSerializer {
} }
userDefinedProvidersIds.add(providerId); userDefinedProvidersIds.add(providerId);
ILanguageSettingsProvider provider = loadProvider(providerNode); ILanguageSettingsProvider provider = null;
if (provider != null) { try {
providers.add(provider); 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); setWorkspaceProvidersInternal(providers);
@ -838,8 +866,8 @@ public class LanguageSettingsProvidersSerializer {
provider = LanguageSettingsManager.getExtensionProviderCopy(providerId, true); provider = LanguageSettingsManager.getExtensionProviderCopy(providerId, true);
if (provider == null) { if (provider == null) {
String msg = "Internal Error trying to copy extension provider id=" + providerId; //$NON-NLS-1$ String msg = "Internal Error trying to retrieve copy of extension provider id=" + providerId; //$NON-NLS-1$
CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception(msg))); CCorePlugin.log(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, msg, new Exception(msg)));
provider = LanguageSettingsManager.getWorkspaceProvider(providerId); provider = LanguageSettingsManager.getWorkspaceProvider(providerId);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

View file

@ -512,10 +512,10 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
boolean isProviderSelected = !isEntrySelected && (provider!=null); boolean isProviderSelected = !isEntrySelected && (provider!=null);
boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isToEditEntries(provider); && LanguageSettingsProviderAssociationManager.isAllowedToEditEntries(provider);
boolean isAllowedClearing = provider instanceof ILanguageSettingsEditableProvider boolean isAllowedClearing = provider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isToClear(provider); && LanguageSettingsProviderAssociationManager.isAllowedToClear(provider);
boolean canAdd = isAllowedEditing; boolean canAdd = isAllowedEditing;
boolean canEdit = isAllowedEditing && isEntrySelected; boolean canEdit = isAllowedEditing && isEntrySelected;
@ -557,7 +557,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
if (status==null || status==Status.OK_STATUS) { if (status==null || status==Status.OK_STATUS) {
ILanguageSettingsProvider provider = getSelectedProvider(); ILanguageSettingsProvider provider = getSelectedProvider();
boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isToEditEntries(provider); && LanguageSettingsProviderAssociationManager.isAllowedToEditEntries(provider);
if (!isAllowedEditing) { if (!isAllowedEditing) {
String msg = "Setting entries for this provider are supplied by system and are not editable."; String msg = "Setting entries for this provider are supplied by system and are not editable.";
status = new Status(IStatus.INFO, CUIPlugin.PLUGIN_ID, msg); status = new Status(IStatus.INFO, CUIPlugin.PLUGIN_ID, msg);

View file

@ -306,7 +306,7 @@ public class LanguageSettingsProviderAssociationManager {
* @param provider TODO * @param provider TODO
* @return TODO * @return TODO
*/ */
public static boolean isToClear(ILanguageSettingsProvider provider) { public static boolean isAllowedToClear(ILanguageSettingsProvider provider) {
return getBooleanAttribute(provider, ATTR_UI_CLEAR_ENTRIES); return getBooleanAttribute(provider, ATTR_UI_CLEAR_ENTRIES);
} }
@ -315,7 +315,7 @@ public class LanguageSettingsProviderAssociationManager {
* @param provider TODO * @param provider TODO
* @return TODO * @return TODO
*/ */
public static boolean isToEditEntries(ILanguageSettingsProvider provider) { public static boolean isAllowedToEditEntries(ILanguageSettingsProvider provider) {
return getBooleanAttribute(provider, ATTR_UI_EDIT_ENTRIES); return getBooleanAttribute(provider, ATTR_UI_EDIT_ENTRIES);
} }

View file

@ -19,8 +19,6 @@ import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Assert;
@ -209,25 +207,33 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private class ProvidersTableLabelProvider extends LanguageSettingsProvidersLabelProvider { private class ProvidersTableLabelProvider extends LanguageSettingsProvidersLabelProvider {
@Override @Override
protected String[] getOverlayKeys(ILanguageSettingsProvider provider) { protected String[] getOverlayKeys(ILanguageSettingsProvider provider) {
if (provider.getName() == null) {
String[] overlayKeys = new String[5];
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_ERROR;
return overlayKeys;
}
String[] overlayKeys = super.getOverlayKeys(provider); String[] overlayKeys = super.getOverlayKeys(provider);
if (page.isForProject()) { if (page.isForProject()) {
if (isReconfiguredForProject(provider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
}
if (isEditedForProject(provider)) { if (isEditedForProject(provider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED; overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
} else if (!LanguageSettingsManager.getExtensionProviderIds().contains(provider.getId())) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_USER;
} else if (isReconfiguredForProject(provider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
} }
} else if (page.isForPrefs()) { } else if (page.isForPrefs()) {
if (isWorkingCopy(provider) && !provider.equals(LanguageSettingsManager.getRawProvider(LanguageSettingsManager.getWorkspaceProvider(provider.getId())))) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
} else if (!LanguageSettingsManager.getExtensionProviderIds().contains(provider.getId())) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_USER;
} else {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider instanceof ILanguageSettingsEditableProvider && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) { if (rawProvider instanceof ILanguageSettingsEditableProvider && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING; overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
} }
if (isWorkingCopy(provider)) {
ILanguageSettingsProvider rawInitialProvider = LanguageSettingsManager.getRawProvider(LanguageSettingsManager.getWorkspaceProvider(provider.getId()));
if (!provider.equals(rawInitialProvider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
}
} }
} }
@ -633,21 +639,25 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
providers = new ArrayList<ILanguageSettingsProvider>(); providers = new ArrayList<ILanguageSettingsProvider>();
} }
List<ILanguageSettingsProvider> workspaceProviders = LanguageSettingsManager.getWorkspaceProviders(); List<ILanguageSettingsProvider> allAvailableProvidersSet = LanguageSettingsManager.getWorkspaceProviders();
// ensure sorting by name all unchecked providers // ensure sorting by name all unchecked providers
Set<ILanguageSettingsProvider> allAvailableProvidersSet = new TreeSet<ILanguageSettingsProvider>(new Comparator<ILanguageSettingsProvider>() { Collections.sort(allAvailableProvidersSet, new Comparator<ILanguageSettingsProvider>() {
@Override @Override
public int compare(ILanguageSettingsProvider prov1, ILanguageSettingsProvider prov2) { public int compare(ILanguageSettingsProvider prov1, ILanguageSettingsProvider prov2) {
Boolean isTest1 = prov1.getId().matches(TEST_PLUGIN_ID_PATTERN); Boolean isTest1 = prov1.getId().matches(TEST_PLUGIN_ID_PATTERN);
Boolean isTest2 = prov2.getId().matches(TEST_PLUGIN_ID_PATTERN); Boolean isTest2 = prov2.getId().matches(TEST_PLUGIN_ID_PATTERN);
int result = isTest1.compareTo(isTest2); int result = isTest1.compareTo(isTest2);
if (result==0) if (result == 0) {
result = prov1.getName().compareTo(prov2.getName()); String name1 = prov1.getName();
String name2 = prov2.getName();
if (name1 != null && name2 != null) {
result = name1.compareTo(name2);
}
}
return result; return result;
} }
}); });
allAvailableProvidersSet.addAll(workspaceProviders);
for (ILanguageSettingsProvider provider : allAvailableProvidersSet) { for (ILanguageSettingsProvider provider : allAvailableProvidersSet) {
String id = provider.getId(); String id = provider.getId();
@ -809,13 +819,20 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean isRangeOk = pos >= 0 && pos <= last; boolean isRangeOk = pos >= 0 && pos <= last;
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider && rawProvider instanceof LanguageSettingsSerializableProvider
&& LanguageSettingsProviderAssociationManager.isToClear(rawProvider); && LanguageSettingsProviderAssociationManager.isAllowedToClear(rawProvider);
boolean canClear = isAllowedClearing && (canForWorkspace || (canForProject && !LanguageSettingsManager.isWorkspaceProvider(provider))); boolean canClear = isAllowedClearing && (canForWorkspace || (canForProject && !LanguageSettingsManager.isWorkspaceProvider(provider)));
if (rawProvider instanceof LanguageSettingsSerializableProvider) {
canClear = canClear && !((LanguageSettingsSerializableProvider)rawProvider).isEmpty();
}
boolean canReset = (canForProject && isReconfiguredForProject(provider)) || 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 canMoveUp = canForProject && isRangeOk && pos!=0;
boolean canMoveDown = canForProject && isRangeOk && pos!=last; boolean canMoveDown = canForProject && isRangeOk && pos!=last;

View file

@ -240,6 +240,8 @@ public class CDTSharedImages {
public static final String IMG_OVR_EDITED = "icons/ovr16/edited_ov.gif"; //$NON-NLS-1$ public static final String IMG_OVR_EDITED = "icons/ovr16/edited_ov.gif"; //$NON-NLS-1$
/** @since 5.4 */ /** @since 5.4 */
public static final String IMG_OVR_EMPTY = "icons/ovr16/empty_ovr.png"; //$NON-NLS-1$ 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 * The method finds URL of the image corresponding to the key which could be project-relative path