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

bug 379480: changing "command to get compiler specs" does not take

effect
This commit is contained in:
Andrew Gvozdev 2012-05-23 07:16:17 -04:00
parent d1e2d46fad
commit f2bb8b1f6f
3 changed files with 54 additions and 13 deletions

View file

@ -10,11 +10,14 @@
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector;
import org.eclipse.cdt.ui.language.settings.providers.AbstractLanguageSettingProviderOptionPage;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
@ -32,6 +35,8 @@ import org.eclipse.swt.widgets.Text;
/**
* Options page for {@link AbstractBuiltinSpecsDetector}.
*
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public final class BuiltinSpecsDetectorOptionPage extends AbstractLanguageSettingProviderOptionPage {
private boolean fEditable;
@ -152,4 +157,18 @@ public final class BuiltinSpecsDetectorOptionPage extends AbstractLanguageSettin
});
}
@Override
public void performApply(IProgressMonitor monitor) throws CoreException {
ILanguageSettingsProvider provider = providerTab.getProvider(providerId);
if ((provider instanceof AbstractBuiltinSpecsDetector)) { // basically check for working copy
ILanguageSettingsProvider initialProvider = providerTab.getInitialProvider(providerId);
if (!(initialProvider instanceof AbstractBuiltinSpecsDetector) || !((AbstractBuiltinSpecsDetector) initialProvider).getCommand().equals(((AbstractBuiltinSpecsDetector) provider).getCommand())) {
// clear and reset isExecuted flag
((AbstractBuiltinSpecsDetector) provider).clear();
}
}
super.performApply(monitor);
}
}

View file

@ -107,7 +107,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
*/
private List<ILanguageSettingsProvider> presentedProviders = null;
private final Map<String, ICOptionPage> optionsPageMap = new HashMap<String, ICOptionPage>();
private Map<String, List<ILanguageSettingsProvider>> initialProvidersByCfg = new HashMap<String, List<ILanguageSettingsProvider>>();
private Map<String/*cfgId*/, List<ILanguageSettingsProvider>> initialProvidersByCfg = new HashMap<String, List<ILanguageSettingsProvider>>();
/**
* Label provider for language settings providers displayed by this tab.
@ -169,6 +169,27 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
return findProvider(id, presentedProviders);
}
/**
* Returns the provider equal to provider at the point from which editing started.
* Used by option pages when there is a need.
* @param id - id of the provider.
*
* @return the initial provider.
*/
public ILanguageSettingsProvider getInitialProvider(String id) {
ILanguageSettingsProvider initialProvider = null;
if (page.isForPrefs()) {
initialProvider = LanguageSettingsManager.getWorkspaceProvider(id);
} else {
ICConfigurationDescription cfgDescription = getConfigurationDescription();
List<ILanguageSettingsProvider> initialProviders = initialProvidersByCfg.get(cfgDescription.getId());
if (initialProviders != null) {
initialProvider = findProvider(id, initialProviders);
}
}
return initialProvider;
}
/**
* Check if the provider is a working copy and can be modified.
*/
@ -1136,7 +1157,16 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
@Override
protected void performOK() {
// Build Settings page
// give option pages a chance for provider-specific pre-apply actions
Collection<ICOptionPage> optionPages = optionsPageMap.values();
for (ICOptionPage op : optionPages) {
try {
op.performApply(null);
} catch (CoreException e) {
CUIPlugin.log("Error applying options page", e); //$NON-NLS-1$
}
}
if (page.isForPrefs()) {
try {
LanguageSettingsManager.setWorkspaceProviders(presentedProviders);
@ -1149,15 +1179,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
if (masterPropertyPage != null && enableProvidersCheckBox.getEnabled()) {
masterPropertyPage.applyLanguageSettingsProvidersEnabled();
}
Collection<ICOptionPage> optionPages = optionsPageMap.values();
for (ICOptionPage op : optionPages) {
try {
op.performApply(null);
} catch (CoreException e) {
CUIPlugin.log("Error applying options page", e); //$NON-NLS-1$
}
}
}
@Override

View file

@ -22,12 +22,13 @@ import org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsP
/**
* Abstract class to implement language settings providers Options page.
* @noextend This class is not intended to be subclassed by clients, only internally by CDT.
*
* @since 5.4
*/
public abstract class AbstractLanguageSettingProviderOptionPage extends AbstractCOptionPage {
private LanguageSettingsProviderTab providerTab;
private String providerId;
protected LanguageSettingsProviderTab providerTab;
protected String providerId;
/**
* Initialize the options page with the owning tab and provider ID.