diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java index 103ebbb4c45..7dbdb464a2d 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java @@ -24,6 +24,7 @@ import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; +import org.eclipse.cdt.core.settings.model.WriteAccessException; import org.eclipse.cdt.core.testplugin.CModelMock; import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.internal.core.XmlUtil; @@ -175,6 +176,26 @@ public class LanguageSettingsPersistenceProjectTests extends TestCase { // test passes if no exception was thrown } + /** + */ + public void testReadOnlyDescription() throws Exception { + // create a project + IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); + // get read-only description + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + assertNotNull(prjDescription); + ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); + assertNotNull(cfgDescription); + + try { + List providers = new ArrayList(); + cfgDescription.setLanguageSettingProviders(providers); + fail("WriteAccessException was expected but it was not throw."); + } catch (WriteAccessException e) { + // exception is expected + } + } + /** */ public void testWorkspacePersistence_ModifiedExtensionProvider() throws Exception { diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsScannerInfoProviderTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsScannerInfoProviderTests.java index 5615a97bd41..dd2f0fa285d 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsScannerInfoProviderTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsScannerInfoProviderTests.java @@ -51,6 +51,10 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { private static final String PROVIDER_ID = "test.provider.id"; private static final String PROVIDER_ID_2 = "test.provider.id.2"; private static final String PROVIDER_NAME = "test.provider.name"; + + // constants for getProjectDescription() + private static final boolean READ_ONLY = false; + private static final boolean WRITEABLE = true; private class MockProvider extends LanguageSettingsBaseProvider implements ILanguageSettingsProvider { private final List entries; @@ -106,7 +110,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { private void setBuilderCWD(IProject project, IPath buildCWD) throws CoreException { CProjectDescriptionManager manager = CProjectDescriptionManager.getInstance(); { - ICProjectDescription prjDescription = manager.getProjectDescription(project, true); + ICProjectDescription prjDescription = manager.getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -119,7 +123,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { } { // triplecheck builderCWD for different project/configuration descriptions - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -148,7 +152,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { { // Handle prjDescription==null IProject project = FAKE_FILE.getProject(); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); assertNull(prjDescription); LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); @@ -166,7 +170,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); IFile file = ResourceHelper.createFile(project, "file"); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -191,7 +195,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { IFile file = ResourceHelper.createFile(project, "file.c"); // confirm that language==null - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, READ_ONLY); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -213,7 +217,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { public void testRegular() throws Exception { // create a project IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -250,6 +254,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test that the scannerInfoProvider gets the entries LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -281,7 +288,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { public void testLocal() throws Exception { // create a project IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -310,6 +317,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test that the scannerInfoProvider gets the entries LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -331,7 +341,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { public void testFramework() throws Exception { // create a project IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -351,7 +361,10 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { List providers = new ArrayList(); providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); - + + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test that the scannerInfoProvider gets the entries LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -370,7 +383,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { public void testDuplicate() throws Exception { // create a project IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -397,6 +410,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test that the scannerInfoProvider gets the entries LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -416,7 +432,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { public void testWorkspacePath() throws Exception { // create a project IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -454,6 +470,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test the entries received from the scannerInfoProvider LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -481,7 +500,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { // String buildCwdDevice = buildCWD.getDevice(); // get project/configuration descriptions - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -502,6 +521,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test the entries received from the scannerInfoProvider LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -529,7 +551,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { setBuilderCWD(project, buildCWD); // get project/configuration descriptions - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -552,6 +574,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test the entries received from the scannerInfoProvider LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -595,7 +620,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { IFolder incFolder_dotdot_slash_path = ResourceHelper.createFolder(project, "include2"); // "/ProjPath/buildDir/../include2" // get project/configuration descriptions - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -628,6 +653,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test the entries received from the scannerInfoProvider LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -674,7 +702,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { String envPathStr = "${ProjDirPath}/Folder"; // get project/configuration descriptions - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -693,6 +721,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test the entries received from the scannerInfoProvider LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -726,7 +757,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { // create a project IProject project = ResourceHelper.createCDTProjectWithConfig(getName()); - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -751,6 +782,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test that the scannerInfoProvider gets the entries for LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(file); @@ -770,7 +804,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { String envPathStr = "${ProjDirPath}/Folder"; // get project/configuration descriptions - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -788,6 +822,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { List providers = new ArrayList(); providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); + + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); // test the entries received from the scannerInfoProvider LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); @@ -848,7 +885,7 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { IFolder incFolderC = ResourceHelper.createFolder(project, "includeC"); // get project/configuration descriptions - ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); + ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, WRITEABLE); assertNotNull(prjDescription); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); assertNotNull(cfgDescription); @@ -878,6 +915,9 @@ public class LanguageSettingsScannerInfoProviderTests extends TestCase { providers.add(provider2); cfgDescription.setLanguageSettingProviders(providers); + // set project description + CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescription); + // test the entries received from the scannerInfoProvider LanguageSettingsScannerInfoProvider scannerInfoProvider = new LanguageSettingsScannerInfoProvider(); ExtendedScannerInfo info = scannerInfoProvider.getScannerInformation(folder); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java index 0c64dbc3ce3..c96186948e8 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java @@ -559,10 +559,8 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData } public void setLanguageSettingProviders(List providers) { -// FIXME? - not sure -// if(!fInitializing) -// throw ExceptionFactory.createIsReadOnlyException(); - + if(!fInitializing) + throw ExceptionFactory.createIsReadOnlyException(); fSpecSettings.setLanguageSettingProviders(providers); }