mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
External settings manager fixes
This commit is contained in:
parent
7c46867c0b
commit
0566261b28
4 changed files with 98 additions and 3 deletions
|
@ -27,7 +27,7 @@ import org.eclipse.core.runtime.Path;
|
||||||
|
|
||||||
public class ExternalSettingsProviderTests extends BaseTestCase{
|
public class ExternalSettingsProviderTests extends BaseTestCase{
|
||||||
private static final String PROJ_NAME_PREFIX = "espt_";
|
private static final String PROJ_NAME_PREFIX = "espt_";
|
||||||
ICProject p1, p2, p3;
|
ICProject p1, p2, p3, p4;
|
||||||
|
|
||||||
public static TestSuite suite() {
|
public static TestSuite suite() {
|
||||||
return suite(ExternalSettingsProviderTests.class, "_");
|
return suite(ExternalSettingsProviderTests.class, "_");
|
||||||
|
@ -37,6 +37,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
|
||||||
p1 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "a", IPDOMManager.ID_NO_INDEXER);
|
p1 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "a", IPDOMManager.ID_NO_INDEXER);
|
||||||
p2 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "b", IPDOMManager.ID_NO_INDEXER);
|
p2 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "b", IPDOMManager.ID_NO_INDEXER);
|
||||||
p3 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "c", IPDOMManager.ID_NO_INDEXER);
|
p3 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "c", IPDOMManager.ID_NO_INDEXER);
|
||||||
|
p4 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "d", IPDOMManager.ID_NO_INDEXER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRefs() throws Exception {
|
public void testRefs() throws Exception {
|
||||||
|
@ -203,6 +204,67 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
|
||||||
assertTrue(Arrays.equals(expectedEntries2, entries));
|
assertTrue(Arrays.equals(expectedEntries2, entries));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testRestoreDefaults() throws Exception {
|
||||||
|
TestExtSettingsProvider.setVariantNum(0);
|
||||||
|
|
||||||
|
CoreModel model = CoreModel.getDefault();
|
||||||
|
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
|
||||||
|
IProject project = p4.getProject();
|
||||||
|
|
||||||
|
ICProjectDescription des = model.getProjectDescription(project);
|
||||||
|
ICConfigurationDescription cfgDes = des.getConfigurations()[0];
|
||||||
|
ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
|
||||||
|
ICLanguageSettingEntry[] entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
|
||||||
|
assertEquals(0, entries.length);
|
||||||
|
ICSourceEntry[] sourceEntries = cfgDes.getSourceEntries();
|
||||||
|
ICSourceEntry[] expectedSourceEntries = new ICSourceEntry[]{
|
||||||
|
new CSourceEntry(project.getFullPath(), null, ICSettingEntry.RESOLVED)
|
||||||
|
};
|
||||||
|
assertEquals(1, sourceEntries.length);
|
||||||
|
assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries));
|
||||||
|
String[] extPIds = new String[]{CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"};
|
||||||
|
cfgDes.setExternalSettingsProviderIds(extPIds);
|
||||||
|
|
||||||
|
|
||||||
|
ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
|
||||||
|
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
|
||||||
|
ICLanguageSettingEntry[] expectedEntries = new ICLanguageSettingEntry[]{
|
||||||
|
new CIncludePathEntry("ip_a", 0),
|
||||||
|
new CIncludePathEntry("ip_b", 0),
|
||||||
|
};
|
||||||
|
assertTrue(Arrays.equals(expectedEntries, entries));
|
||||||
|
|
||||||
|
model.setProjectDescription(project, des);
|
||||||
|
|
||||||
|
des = model.getProjectDescription(project);
|
||||||
|
cfgDes = des.getConfigurations()[0];
|
||||||
|
ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
|
||||||
|
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
|
||||||
|
assertTrue(Arrays.equals(expectedEntries, entries));
|
||||||
|
|
||||||
|
ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, (ICLanguageSettingEntry[])null);
|
||||||
|
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
|
||||||
|
assertTrue(Arrays.equals(expectedEntries, entries));
|
||||||
|
|
||||||
|
cfgDes.setSourceEntries(null);
|
||||||
|
expectedSourceEntries = new ICSourceEntry[]{
|
||||||
|
new CSourceEntry(project.getFullPath().append("sp_a"), null, 0),
|
||||||
|
new CSourceEntry(project.getFullPath().append("sp_b"), null, 0),
|
||||||
|
};
|
||||||
|
sourceEntries = cfgDes.getSourceEntries();
|
||||||
|
assertEquals(2, sourceEntries.length);
|
||||||
|
assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries));
|
||||||
|
|
||||||
|
cfgDes.getBuildSetting().setOutputDirectories(null);
|
||||||
|
ICOutputEntry[] expectedOutputEntries = new ICOutputEntry[]{
|
||||||
|
new COutputEntry("op_a", null, 0),
|
||||||
|
new COutputEntry("op_b", null, 0),
|
||||||
|
};
|
||||||
|
ICOutputEntry[] outputEntries = cfgDes.getBuildSetting().getOutputDirectories();
|
||||||
|
assertEquals(2, outputEntries.length);
|
||||||
|
assertTrue(Arrays.equals(expectedOutputEntries, outputEntries));
|
||||||
|
}
|
||||||
|
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
try {
|
try {
|
||||||
p1.getProject().delete(true, null);
|
p1.getProject().delete(true, null);
|
||||||
|
@ -216,5 +278,9 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
|
||||||
p3.getProject().delete(true, null);
|
p3.getProject().delete(true, null);
|
||||||
} catch (CoreException e){
|
} catch (CoreException e){
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
p4.getProject().delete(true, null);
|
||||||
|
} catch (CoreException e){
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,9 @@ public class CBuildSetting extends CDataProxy implements ICBuildSetting {
|
||||||
public void setOutputDirectories(ICOutputEntry[] entries) {
|
public void setOutputDirectories(ICOutputEntry[] entries) {
|
||||||
CBuildData data = getBuildData(true);
|
CBuildData data = getBuildData(true);
|
||||||
data.setOutputDirectories(entries);
|
data.setOutputDirectories(entries);
|
||||||
|
if(entries == null){
|
||||||
|
CExternalSettingsManager.getInstance().restoreOutputEntryDefaults(getConfiguration());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getType() {
|
public final int getType() {
|
||||||
|
|
|
@ -476,11 +476,17 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC
|
||||||
public void setSourceEntries(ICSourceEntry[] entries) throws CoreException {
|
public void setSourceEntries(ICSourceEntry[] entries) throws CoreException {
|
||||||
CConfigurationData data = getConfigurationData(true);
|
CConfigurationData data = getConfigurationData(true);
|
||||||
IProject project = fIsPreference ? null : getProjectDescription().getProject();
|
IProject project = fIsPreference ? null : getProjectDescription().getProject();
|
||||||
if(entries != null && entries.length == 0)
|
boolean restoreDefault = false;
|
||||||
|
if(entries == null)
|
||||||
|
restoreDefault = true;
|
||||||
|
else if(entries.length == 0)
|
||||||
entries = null;
|
entries = null;
|
||||||
entries = CDataUtil.adjustEntries(entries, false, project);
|
entries = CDataUtil.adjustEntries(entries, false, project);
|
||||||
data.setSourceEntries(entries);
|
data.setSourceEntries(entries);
|
||||||
|
|
||||||
|
if(restoreDefault){
|
||||||
|
CExternalSettingsManager.getInstance().restoreSourceEntryDefaults(this);
|
||||||
|
}
|
||||||
// ICSourceEntry entry;
|
// ICSourceEntry entry;
|
||||||
// IPath entryPath;
|
// IPath entryPath;
|
||||||
// IPath paths[];
|
// IPath paths[];
|
||||||
|
|
|
@ -795,7 +795,27 @@ public class CExternalSettingsManager implements ICExternalSettingsListener, ICP
|
||||||
private CExternalSettinsDeltaCalculator getDeltaCalculator(){
|
private CExternalSettinsDeltaCalculator getDeltaCalculator(){
|
||||||
return CExternalSettinsDeltaCalculator.getInstance();
|
return CExternalSettinsDeltaCalculator.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void restoreSourceEntryDefaults(ICConfigurationDescription cfg){
|
||||||
|
CfgContainer cr = new CfgContainer(cfg);
|
||||||
|
CfgContainerRefInfoContainer ric = new CfgContainerRefInfoContainer(cr);
|
||||||
|
CExternalSetting[] settings = ric.getRefInfo(false).createExternalSettings();
|
||||||
|
ExtSettingsDelta[] deltas = getDeltaCalculator().getSettingChange(settings, null);
|
||||||
|
if(deltas != null){
|
||||||
|
CExternalSettingsDeltaProcessor.applySourceEntriesChange(cfg, deltas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void restoreOutputEntryDefaults(ICConfigurationDescription cfg){
|
||||||
|
CfgContainer cr = new CfgContainer(cfg);
|
||||||
|
CfgContainerRefInfoContainer ric = new CfgContainerRefInfoContainer(cr);
|
||||||
|
CExternalSetting[] settings = ric.getRefInfo(false).createExternalSettings();
|
||||||
|
ExtSettingsDelta[] deltas = getDeltaCalculator().getSettingChange(settings, null);
|
||||||
|
if(deltas != null){
|
||||||
|
CExternalSettingsDeltaProcessor.applyOutputEntriesChange(cfg, deltas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void restoreDefaults(ICLanguageSetting ls, int entryKinds){
|
public void restoreDefaults(ICLanguageSetting ls, int entryKinds){
|
||||||
ICConfigurationDescription cfg = ls.getConfiguration();
|
ICConfigurationDescription cfg = ls.getConfiguration();
|
||||||
CfgContainer cr = new CfgContainer(cfg);
|
CfgContainer cr = new CfgContainer(cfg);
|
||||||
|
|
Loading…
Add table
Reference in a new issue