diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/LanguageSettingsProvidersMBSTest.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/LanguageSettingsProvidersMBSTest.java
index 9651d9db79f..5b46bd6910b 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/LanguageSettingsProvidersMBSTest.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/LanguageSettingsProvidersMBSTest.java
@@ -102,8 +102,8 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
ILanguageSettingsProvider provider = providers.get(3);
String id = provider.getId();
assertEquals(GCC_SPECS_DETECTOR_ID, id);
- assertEquals(true, LanguageSettingsManager.isPreferShared(id));
- assertEquals(true, LanguageSettingsManager.isWorkspaceProvider(provider));
+ assertEquals(false, LanguageSettingsManager.isPreferShared(id));
+ assertEquals(false, LanguageSettingsManager.isWorkspaceProvider(provider));
}
assertEquals(4, providers.size());
}
@@ -134,15 +134,15 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase {
assertTrue(defaultIds.length > 0);
}
- // no settings file in project area
+ // settings file in project area
IFile xmlStorageFile = project.getFile(LANGUAGE_SETTINGS_PROJECT_XML);
- assertEquals(false, xmlStorageFile.exists());
- assertEquals(false, xmlStorageFile.getParent().exists()); // .settings folder
+ assertEquals(true, xmlStorageFile.exists());
+ assertEquals(true, xmlStorageFile.getParent().exists()); // .settings folder
- // no settings file in workspace area
+ // settings file in workspace area
String xmlPrjWspStorageFileLocation = LanguageSettingsPersistenceProjectTests.getStoreLocationInWorkspaceArea(project.getName()+'.'+LANGUAGE_SETTINGS_WORKSPACE_XML);
java.io.File xmlStorageFilePrjWsp = new java.io.File(xmlPrjWspStorageFileLocation);
- assertEquals(false, xmlStorageFilePrjWsp.exists());
+ assertEquals(true, xmlStorageFilePrjWsp.exists());
}
/**
diff --git a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
index b07b40c224a..8a3c70c4966 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
@@ -615,7 +615,8 @@
class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector"
id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector"
name="%GCCBuiltinCompilerSettings.name"
- parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"">
+ parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}""
+ prefer-non-shared="true">
@@ -623,7 +624,8 @@
class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorCygwin"
id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorCygwin"
name="%GCCBuiltinCompilerSettingsCygwin.name"
- parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"">
+ parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}""
+ prefer-non-shared="true">
@@ -631,7 +633,8 @@
class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorMinGW"
id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW"
name="%GCCBuiltinCompilerSettingsMinGW.name"
- parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"">
+ parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}""
+ prefer-non-shared="true">
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
index ffda1231be9..b3eea698e3a 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
@@ -938,6 +938,7 @@ public class ManagedBuildManager extends AbstractCExtension {
&& option.getValueType() != IOption.UNDEF_LIBRARY_PATHS
&& option.getValueType() != IOption.UNDEF_LIBRARY_FILES
&& option.getValueType() != IOption.UNDEF_MACRO_FILES
+ && !option.isForScannerDiscovery()
)) {
return;
}
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)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)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 (t1) and the
* copy-to set (t2) in an apply operation. The resulting pairs are in the order
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties
index 85aa7101518..0533e13d030 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties
@@ -98,7 +98,7 @@ AbstractPage_6=Configuration:
AbstractPage_7=Exclude resource from build
AbstractPage_8=Cannot apply
AbstractPage_9=Internal error
-AbstractPage_rebuildIndex_question=Changes to the include search paths or defined symbols will not be reflected in the index until it is rebuilt. Do you wish to rebuild it now?
+AbstractPage_rebuildIndex_question=Changes made will not be reflected in the index until it is rebuilt. Do you wish to rebuild it now?
AbstractLangsListTab_ShowBuiltin=Show built-in values
AbstractLangsListTab_Languages=Languages
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java
index c704cfd7617..4fbf1a67117 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java
@@ -634,7 +634,6 @@ implements
}
final ICResourceDescription local_cfgd = lc;
- final boolean rebuildIndex= isIndexerAffected();
IRunnableWithProgress runnable = new IRunnableWithProgress() {
private void sendOK() {
@@ -701,6 +700,7 @@ implements
return false;
}
+ final boolean rebuildIndex= isIndexerAffected();
if (rebuildIndex)
rebuildIndex();
return true;