Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java')
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java78
1 files changed, 73 insertions, 5 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java
index 62ff9a23d96..c0fa34a8ac0 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java
@@ -31,6 +31,7 @@ import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.internal.core.MultiConfiguration;
+import org.eclipse.cdt.managedbuilder.internal.core.Option;
import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
@@ -98,6 +99,8 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe
private int[] defaultWeights = new int[] {4, 1};
private int[] hideTipBoxWeights = new int[] {1, 0};
+ private boolean isIndexerAffected;
+
@Override
public void createControls(Composite par) {
super.createControls(par);
@@ -562,6 +565,9 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe
*/
protected void setOption(IOption op1, IOption op2, IHoldsOptions dst, IResourceInfo res){
try {
+ if (op1.isForScannerDiscovery()
+ && ((Option)op1).isDirty())
+ isIndexerAffected = true;
switch (op1.getValueType()) {
case IOption.BOOLEAN :
boolean boolVal = op1.getBooleanValue();
@@ -577,14 +583,9 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe
case IOption.STRING :
ManagedBuildManager.setOption(res, dst, op2, op1.getStringValue());
break;
- case IOption.STRING_LIST :
case IOption.INCLUDE_PATH :
case IOption.PREPROCESSOR_SYMBOLS :
- case IOption.LIBRARIES :
- case IOption.OBJECTS :
case IOption.INCLUDE_FILES:
- case IOption.LIBRARY_PATHS:
- case IOption.LIBRARY_FILES:
case IOption.MACRO_FILES:
case IOption.UNDEF_INCLUDE_PATH:
case IOption.UNDEF_PREPROCESSOR_SYMBOLS:
@@ -592,10 +593,21 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe
case IOption.UNDEF_LIBRARY_PATHS:
case IOption.UNDEF_LIBRARY_FILES:
case IOption.UNDEF_MACRO_FILES:
+ if (((Option)op1).isDirty())
+ isIndexerAffected = true;
@SuppressWarnings("unchecked")
String[] data = ((List<String>)op1.getValue()).toArray(new String[0]);
ManagedBuildManager.setOption(res, dst, op2, data);
break;
+ case IOption.LIBRARIES :
+ case IOption.LIBRARY_PATHS:
+ case IOption.LIBRARY_FILES:
+ case IOption.STRING_LIST :
+ case IOption.OBJECTS :
+ @SuppressWarnings("unchecked")
+ String[] data2 = ((List<String>)op1.getValue()).toArray(new String[0]);
+ ManagedBuildManager.setOption(res, dst, op2, data2);
+ break;
default :
break;
}
@@ -728,6 +740,7 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe
protected void performApply(ICResourceDescription src, ICResourceDescription dst) {
IResourceInfo ri1 = getResCfg(src);
IResourceInfo ri2 = getResCfg(dst);
+ isIndexerAffected = false;
copyHoldsOptions(ri1.getParent().getToolChain(), ri2.getParent().getToolChain(), ri2);
ITool[] t1, t2;
if (ri1 instanceof IFolderInfo){
@@ -748,6 +761,61 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe
updateData(getResDesc());
}
+ @Override
+ protected void performOK() {
+ // We need to override performOK so we can determine if any option
+ // was chosen that affects the indexer and the user directly chooses
+ // to press OK instead of Apply.
+ isIndexerAffected = false;
+ if (!isDirty()) {
+ super.performOK();
+ return; // don't bother if already applied
+ }
+ ICResourceDescription res = getResDesc();
+ IResourceInfo info = getResCfg(res);
+ ITool[] t1;
+ if (info instanceof IFolderInfo){
+ t1 = ((IFolderInfo)info).getFilteredTools();
+ } else if (info instanceof IFileInfo) {
+ t1 = ((IFileInfo)info).getToolsToInvoke();
+ } else return;
+ for (ITool t : t1) {
+ IOption op1[] = t.getOptions();
+ for (IOption op : op1) {
+ if (((Option)op).isDirty()) {
+ if (op.isForScannerDiscovery())
+ isIndexerAffected = true;
+ else {
+ try {
+ switch (op.getValueType()) {
+ case IOption.INCLUDE_PATH :
+ case IOption.PREPROCESSOR_SYMBOLS :
+ case IOption.INCLUDE_FILES:
+ case IOption.MACRO_FILES:
+ case IOption.UNDEF_INCLUDE_PATH:
+ case IOption.UNDEF_PREPROCESSOR_SYMBOLS:
+ case IOption.UNDEF_INCLUDE_FILES:
+ case IOption.UNDEF_LIBRARY_PATHS:
+ case IOption.UNDEF_LIBRARY_FILES:
+ case IOption.UNDEF_MACRO_FILES:
+ isIndexerAffected = true;
+ break;
+ }
+ } catch (BuildException e) {
+ // Do nothing
+ }
+ }
+ }
+ }
+ }
+ super.performOK();
+ }
+
+ @Override
+ protected boolean isIndexerAffected() {
+ return isIndexerAffected;
+ }
+
/**
* Computes the correspondence of tools in the copy-from set (<tt>t1</tt>) and the
* copy-to set (<tt>t2</tt>) in an apply operation. The resulting pairs are in the order

Back to the top