From a4beb8b6d0309b2dc41b06a76fcb60997907239c Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Thu, 17 May 2007 15:50:24 +0000 Subject: [PATCH] 1. isCdtProjectCreating state functionality and tests --- .../ui/wizards/CDTConfigWizardPage.java | 2 +- .../ui/wizards/MBSWizardHandler.java | 9 +- .../ui/wizards/STDWizardHandler.java | 9 +- .../cdt/core/model/tests/AllCoreTests.java | 6 +- ....java => AllCProjectDescriptionTests.java} | 5 +- .../model/ProjectCreationStateTests.java | 401 ++++++++++++ .../cdt/core/testplugin/CProjectHelper.java | 21 +- .../org/eclipse/cdt/core/model/CoreModel.java | 19 +- .../settings/model/ICDescriptionDelta.java | 58 +- .../settings/model/ICProjectDescription.java | 35 + .../model/ICProjectDescriptionManager.java | 17 +- .../settings/model/CProjectDescription.java | 23 +- .../model/CProjectDescriptionManager.java | 23 +- .../SetCProjectDescriptionOperation.java | 6 +- .../src/org/eclipse/cdt/core/CCorePlugin.java | 19 +- .../internal/core/CConfigBasedDescriptor.java | 5 +- .../core/CConfigBasedDescriptorManager.java | 2 +- .../cdt/internal/core/CDescriptor.java | 599 ------------------ .../cdt/internal/core/CDescriptorManager.java | 363 ----------- .../ui/wizards/CDTCommonProjectWizard.java | 36 +- .../cdt/ui/wizards/CWizardHandler.java | 14 + 21 files changed, 663 insertions(+), 1009 deletions(-) rename core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/{CProjectDescriptionTests.java => AllCProjectDescriptionTests.java} (85%) create mode 100644 core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/ProjectCreationStateTests.java delete mode 100644 core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptor.java delete mode 100644 core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptorManager.java diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java index 8d94a335553..c83edee2dc8 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java @@ -317,7 +317,7 @@ public class CDTConfigWizardPage extends WizardPage { private void advancedDialog() { if (getWizard() instanceof CDTCommonProjectWizard) { CDTCommonProjectWizard nmWizard = (CDTCommonProjectWizard)getWizard(); - IProject newProject = nmWizard.getProject(true); + IProject newProject = nmWizard.getProject(true, false); if (newProject != null) { boolean oldManage = CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOMNG); // disable manage configurations button diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java index 9c66209fce8..8398e84b49b 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java @@ -23,6 +23,7 @@ import java.util.TreeMap; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; import org.eclipse.cdt.core.templateengine.process.ProcessFailureException; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty; @@ -381,9 +382,9 @@ public class MBSWizardHandler extends CWizardHandler { full_tcs.put(tc.getUniqueRealName(), tc); } - public void createProject(IProject project, boolean defaults) throws CoreException { - CoreModel coreModel = CoreModel.getDefault(); - ICProjectDescription des = coreModel.createProjectDescription(project, false); + public void createProject(IProject project, boolean defaults, boolean onFinish) throws CoreException { + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish); ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project); CfgHolder[] cfgs = null; if (defaults) { @@ -430,7 +431,7 @@ public class MBSWizardHandler extends CWizardHandler { active = cfgDes; } if (active != null) active.setActive(); - coreModel.setProjectDescription(project, des); + mngr.setProjectDescription(project, des); doPostProcess(project); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java index ef8d0374fd6..185d4107c1c 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.managedbuilder.ui.wizards; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; import org.eclipse.cdt.managedbuilder.core.IBuilder; import org.eclipse.cdt.managedbuilder.core.IConfiguration; @@ -47,9 +48,9 @@ public class STDWizardHandler extends MBSWizardHandler { /** * Note that configurations parameter is ignored */ - public void createProject(IProject project, boolean defaults) throws CoreException { - CoreModel coreModel = CoreModel.getDefault(); - ICProjectDescription des = coreModel.createProjectDescription(project, false); + public void createProject(IProject project, boolean defaults, boolean onFinish) throws CoreException { + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish); ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project); ManagedProject mProj = new ManagedProject(des); info.setManagedProject(mProj); @@ -76,7 +77,7 @@ public class STDWizardHandler extends MBSWizardHandler { CConfigurationData data = cfg.getConfigurationData(); des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data); } - coreModel.setProjectDescription(project, des); + mngr.setProjectDescription(project, des); doPostProcess(project); } diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java index 816f51c4007..6c3c4f8be8f 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2006 QNX Software Systems and others. + * Copyright (c) 2000, 2007 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -14,7 +14,7 @@ import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.cdt.core.model.failedTests.FailedDeclaratorsTest; -import org.eclipse.cdt.core.settings.model.CProjectDescriptionTests; +import org.eclipse.cdt.core.settings.model.AllCProjectDescriptionTests; /** @@ -49,7 +49,7 @@ public class AllCoreTests { // suite.addTest(CConfigurationDescriptionReferenceTests.suite()); //the CProjectDescriptionTests now groups all New Project Model related tests //which includes the CConfigurationDescriptionReferenceTests - suite.addTest(CProjectDescriptionTests.suite()); + suite.addTest(AllCProjectDescriptionTests.suite()); suite.addTest(ASTCacheTests.suite()); return suite; diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/AllCProjectDescriptionTests.java similarity index 85% rename from core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionTests.java rename to core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/AllCProjectDescriptionTests.java index a741b8661d6..b488712213d 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/AllCProjectDescriptionTests.java @@ -13,19 +13,20 @@ package org.eclipse.cdt.core.settings.model; import junit.framework.Test; import junit.framework.TestSuite; -public class CProjectDescriptionTests { +public class AllCProjectDescriptionTests { public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static Test suite() { - TestSuite suite = new TestSuite(CProjectDescriptionTests.class.getName()); + TestSuite suite = new TestSuite(AllCProjectDescriptionTests.class.getName()); // Just add more test cases here as you create them for // each class being tested suite.addTest(CConfigurationDescriptionReferenceTests.suite()); suite.addTest(ExternalSettingsProviderTests.suite()); suite.addTest(CfgSettingsTests.suite()); + suite.addTest(ProjectCreationStateTests.suite()); return suite; } diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/ProjectCreationStateTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/ProjectCreationStateTests.java new file mode 100644 index 00000000000..80b2aad5b81 --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/ProjectCreationStateTests.java @@ -0,0 +1,401 @@ +/******************************************************************************* + * Copyright (c) 2007 Intel Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core.settings.model; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.CProjectNature; +import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.settings.model.util.CDataUtil; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.core.testplugin.util.BaseTestCase; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; + +public class ProjectCreationStateTests extends BaseTestCase{ + private static final String PROJ_NAME_PREFIX = "ProjectCreationStateTests_"; + + private IProject p1, p2, p3, p4; + private Listener listener; + + private class Listener implements ICProjectDescriptionListener { + private boolean fIsCreationCompletedNotified; + private boolean fIsCreating; + private boolean fIsNotified; + private String fProjName; + + Listener(String projName){ + init(); + fProjName = projName; + } + + public void handleEvent(CProjectDescriptionEvent event) { + if(!event.getProject().getName().equals(fProjName)) + return; + fIsNotified = true; + boolean creating = event.getNewCProjectDescription().isCdtProjectCreating(); + ICDescriptionDelta delta = event.getProjectDelta(); + boolean notified = delta != null ? (delta.getChangeFlags() & ICDescriptionDelta.PROJECT_CREAION_COMPLETED) != 0 : false; + + if(creating) + assertTrue(fIsCreating); + if(notified) + assertFalse(fIsCreationCompletedNotified); + + fIsCreating = creating; + fIsCreationCompletedNotified = notified; + } + + void init(){ + fIsCreating = true; + fIsCreationCompletedNotified = false; + resetNotified(); + } + + boolean isCreating(){ + return fIsCreating; + } + + boolean isCreationCompletedNotified(){ + return fIsCreationCompletedNotified; + } + + boolean isNotified(){ + boolean notified = fIsNotified; + resetNotified(); + return notified; + } + + void resetNotified(){ + fIsNotified = false; + } + + } + + public static TestSuite suite() { + return suite(ProjectCreationStateTests.class, "_"); + } + + protected void setUp() throws Exception { +// p1 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "a", IPDOMManager.ID_NO_INDEXER); + } + + private void initListener(String projName){ + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + if(listener != null) + mngr.removeCProjectDescriptionListener(listener); + listener = new Listener(projName); + mngr.addCProjectDescriptionListener(listener, CProjectDescriptionEvent.APPLIED); + + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + } + + public void testProjectCreatingState() throws Exception { + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + String projName = PROJ_NAME_PREFIX + "a"; + + initListener(projName); + + + ICProject cp1 = CProjectHelper.createNewStileCProject(projName, IPDOMManager.ID_NO_INDEXER, true); + IProject project = cp1.getProject(); + p1 = project; + assertTrue(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + listener.resetNotified(); + + ICProjectDescription des = mngr.getProjectDescription(project, false); + assertTrue(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, true); + assertTrue(des.isCdtProjectCreating()); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + ICProjectDescription des2 = mngr.getProjectDescription(project, true); + des2.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des2.getConfigurations()[0]); + mngr.setProjectDescription(project, des2); + des2 = mngr.getProjectDescription(project, false); + assertTrue(des2.isCdtProjectCreating()); + des2 = mngr.getProjectDescription(project, true); + assertTrue(des2.isCdtProjectCreating()); + assertTrue(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + listener.resetNotified(); + + des.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des.getConfigurations()[0]); + des.setCdtProjectCreated(); + des2.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des2.getConfigurations()[0]); + mngr.setProjectDescription(project, des); + assertTrue(listener.isNotified()); + assertTrue(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + listener.resetNotified(); + + assertTrue(des2.isCdtProjectCreating()); + mngr.setProjectDescription(project, des2); + assertTrue(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + listener.resetNotified(); + + des2 = mngr.getProjectDescription(project, false); + assertFalse(des2.isCdtProjectCreating()); + des2 = mngr.getProjectDescription(project, true); + assertFalse(des2.isCdtProjectCreating()); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + + des2.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des2.getConfigurations()[0]); + mngr.setProjectDescription(project, des2); + assertTrue(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + listener.resetNotified(); + } + + public void testCreateProjectDescriptionForInexistingDes() throws Exception { + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + String projName = PROJ_NAME_PREFIX + "b"; + initListener(projName); + + IWorkspace wsp = ResourcesPlugin.getWorkspace(); + IWorkspaceRoot root = wsp.getRoot(); + IProject project = root.getProject(projName); + p2 = project; + project.create(null); + project.open(null); + CProjectHelper.addNatureToProject(project, CProjectNature.C_NATURE_ID, null); + + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + + ICProjectDescription des = mngr.getProjectDescription(project, false); + assertNull(des); + des = mngr.getProjectDescription(project, true); + assertNull(des); + + des = mngr.createProjectDescription(project, true); + assertFalse(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNull(des); + des = mngr.getProjectDescription(project, true); + assertNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + des = mngr.createProjectDescription(project, false); + assertFalse(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNull(des); + des = mngr.getProjectDescription(project, true); + assertNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + des = mngr.createProjectDescription(project, true, true); + assertTrue(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNull(des); + des = mngr.getProjectDescription(project, true); + assertNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + des = mngr.createProjectDescription(project, false, true); + assertTrue(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNull(des); + des = mngr.getProjectDescription(project, true); + assertNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + } + + public void testCreateProjectDescriptionForCreatingDes() throws Exception { + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + String projName = PROJ_NAME_PREFIX + "c"; + + initListener(projName); + + + ICProject cp3 = CProjectHelper.createNewStileCProject(projName, IPDOMManager.ID_NO_INDEXER, true); + IProject project = cp3.getProject(); + p3 = project; + + + assertTrue(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + ICProjectDescription des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + + des = mngr.createProjectDescription(project, true); + assertTrue(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + des = mngr.createProjectDescription(project, false); + assertFalse(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + des = mngr.createProjectDescription(project, true, true); + assertTrue(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + + des = mngr.createProjectDescription(project, false, true); + assertTrue(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertTrue(listener.isCreating()); + } + + public void testCreateProjectDescriptionForCreatedDes() throws Exception { + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + String projName = PROJ_NAME_PREFIX + "d"; + + initListener(projName); + + + ICProject cp4 = CProjectHelper.createNewStileCProject(projName, IPDOMManager.ID_NO_INDEXER, false); + IProject project = cp4.getProject(); + p4 = project; + + + assertTrue(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + + ICProjectDescription des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + + des = mngr.createProjectDescription(project, true); + assertFalse(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + + des = mngr.createProjectDescription(project, false); + assertFalse(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + + des = mngr.createProjectDescription(project, true, true); + assertFalse(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + + des = mngr.createProjectDescription(project, false, true); + assertFalse(des.isCdtProjectCreating()); + des = mngr.getProjectDescription(project, false); + assertNotNull(des); + des = mngr.getProjectDescription(project, true); + assertNotNull(des); + assertFalse(listener.isNotified()); + assertFalse(listener.isCreationCompletedNotified()); + assertFalse(listener.isCreating()); + } + + + protected void tearDown() throws Exception { + if(listener != null){ + CoreModel.getDefault().getProjectDescriptionManager().removeCProjectDescriptionListener(listener); + listener = null; + } + try { + if(p1 != null){ + p1.getProject().delete(true, null); + p1 = null; + } + } catch (CoreException e){ + } + try { + if(p2 != null){ + p2.getProject().delete(true, null); + p2 = null; + } + } catch (CoreException e){ + } + try { + if(p3 != null){ + p3.getProject().delete(true, null); + p3 = null; + } + } catch (CoreException e){ + } + try { + if(p4 != null){ + p4.getProject().delete(true, null); + p4 = null; + } + } catch (CoreException e){ + } + + } + +} diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/CProjectHelper.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/CProjectHelper.java index 4380beb84d8..6408d0bd26c 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/CProjectHelper.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/CProjectHelper.java @@ -34,6 +34,7 @@ import org.eclipse.cdt.core.model.ISourceRoot; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.internal.core.pdom.indexer.IndexerPreferences; import org.eclipse.core.resources.IFolder; @@ -106,18 +107,25 @@ public class CProjectHelper { return newProject[0]; } - + /** * Creates a ICProject. */ public static ICProject createNewStileCProject(final String projectName, final String indexerID) throws CoreException { - return createNewStileCProject(projectName, null, indexerID); + return createNewStileCProject(projectName, indexerID, false); } /** * Creates a ICProject. */ - public static ICProject createNewStileCProject(final String projectName, String cfgProviderId, final String indexerID) throws CoreException { + public static ICProject createNewStileCProject(final String projectName, final String indexerID, boolean markCreating) throws CoreException { + return createNewStileCProject(projectName, null, indexerID, markCreating); + } + + /** + * Creates a ICProject. + */ + public static ICProject createNewStileCProject(final String projectName, String cfgProviderId, final String indexerID, final boolean markCreating) throws CoreException { final IWorkspace ws = ResourcesPlugin.getWorkspace(); final ICProject newProject[] = new ICProject[1]; if(cfgProviderId == null) @@ -144,9 +152,10 @@ public class CProjectHelper { if (!project.hasNature(CProjectNature.C_NATURE_ID)) { addNatureToProject(project, CProjectNature.C_NATURE_ID, null); ICConfigurationDescription prefCfg = CCorePlugin.getDefault().getPreferenceConfiguration(finalCfgProviderId); - ICProjectDescription projDes = CCorePlugin.getDefault().createProjectDescription(project, false); + ICProjectDescriptionManager mngr = CCorePlugin.getDefault().getProjectDescriptionManager(); + ICProjectDescription projDes = mngr.createProjectDescription(project, false, markCreating); projDes.createConfiguration(CDataUtil.genId(null), CDataUtil.genId("test"), prefCfg); - CCorePlugin.getDefault().setProjectDescription(project, projDes); + mngr.setProjectDescription(project, projDes); // CCorePlugin.getDefault().mapCProjectOwner(project, projectId, false); } newProject[0] = CCorePlugin.getDefault().getCoreModel().create(project); @@ -350,7 +359,7 @@ public class CProjectHelper { return null; } - private static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException { + public static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException { IProjectDescription description = proj.getDescription(); String[] prevNatures = description.getNatureIds(); String[] newNatures = new String[prevNatures.length + 1]; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java index 8e1889fbdfd..6f4efd23984 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java @@ -1312,6 +1312,15 @@ public class CoreModel { return rc; } + /** + * this method is a full equivalent to {@link #createProjectDescription(IProject, boolean, false)} + * + * @see #createProjectDescription(IProject, boolean, boolean) + */ + public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists) throws CoreException{ + return descriptionManager.createProjectDescription(project, loadIfExists); + } + /** * the method creates and returns a writable project description * @@ -1319,12 +1328,16 @@ public class CoreModel { * @param loadIfExists if true the method first tries to load and return the project description * from the settings file (.cproject) * if false, the stored settings are ignored and the new (empty) project description is created - * NOTE: changes made to the returned project description will not be applied untill the {@link #setProjectDescription(IProject, ICProjectDescription)} is called + * @param creating if true the created project description will be contain the true "isCdtProjectCreating" state. + * NOTE: in case the project already contains the project description AND its "isCdtProjectCreating" is false + * the resulting description will be created with the false "isCdtProjectCreating" state + * + * NOTE: changes made to the returned project description will not be applied until the {@link #setProjectDescription(IProject, ICProjectDescription)} is called * @return {@link ICProjectDescription} * @throws CoreException */ - public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists) throws CoreException{ - return descriptionManager.createProjectDescription(project, loadIfExists); + public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists, boolean creating) throws CoreException{ + return descriptionManager.createProjectDescription(project, loadIfExists, creating); } /** diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java index 3282792e878..04a60549f0e 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java @@ -12,10 +12,37 @@ package org.eclipse.cdt.core.settings.model; public interface ICDescriptionDelta { + /* + * delta kinds + */ + /** + * kind specifying that the setting object returned by + * the {@link #getSetting()} was removed + * the {@link #getNewSetting()} returns null + * the {@link #getOldSetting()} returns the same object as {@link #getSetting()} + */ int REMOVED = 1; + + /** + * kind specifying that the setting object returned by + * the {@link #getSetting()} was added + * the {@link #getNewSetting()} returns the same object as {@link #getSetting()} + * the {@link #getOldSetting()} returns null + */ int ADDED = 2; + + /** + * kind specifying that the setting object was changed + * the {@link #getNewSetting()} returns new object + * the {@link #getOldSetting()} returns old object + * the {@link #getSetting()} returns the same object as {@link #getNewSetting()} + */ int CHANGED = 3; + /* + * delta change flags + */ + int ACTIVE_CFG = 1; int NAME = 1 << 1; int DESCRIPTION = 1 << 2; @@ -38,10 +65,39 @@ public interface ICDescriptionDelta { int EXT_REF = 1 << 19; int OWNER = 1 << 20; int INDEX_CFG = 1 << 21; + int SETTING_CFG = INDEX_CFG; + + /** + * specifies that the project "isCdtProjectCreating" state was set to false + * the PROJECT_CREAION_COMPLETED delta gets notified ONLY in case + * the project previously contained the project description with + * the true "isCdtProjectCreating" state + * + * in case the initial project description does NOT contain the true "isCdtProjectCreating" + * the project is considered as initialized from the very beginning + * and the PROJECT_CREAION_COMPLETED delta is NOT notified + * + * @see ICProjectDescription#isCdtProjectCreating() + * @see ICProjectDescription#setCdtProjectCreated() + * @see ICProjectDescriptionManager#createProjectDescription(org.eclipse.core.resources.IProject, boolean, boolean) + */ + int PROJECT_CREAION_COMPLETED = 1 << 22; - + /** + * returns the kind + * @see #ADDED + * @see #REMOVED + * @see #CHANGED + * + * @return int + */ int getDeltaKind(); + /** + * returns ored delta flags + * + * @return + */ int getChangeFlags(); int getSettingType(); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescription.java index 0d528c0c914..3afeb365364 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescription.java @@ -161,4 +161,39 @@ public interface ICProjectDescription extends ICSettingContainer, * @param cfg */ void setDefaultSettingConfiguration(ICConfigurationDescription cfg); + + /** + * when true specifies that the project creation is in progress. + * Sometimes project creation might be performed via multiple steps, e.g. + * the New Project Wizard may create a temporary project with temporary settings + * and delete it on cancel, etc. + * + * Thus the project may exist as well as the project may contain the associated ICProjectDescription, + * but its initialization may not be completed. + * + * once the flag is set to false it can never be reset back to true. + * if {@link ICProjectDescriptionManager#setProjectDescription(IProject, ICProjectDescription)} is called + * for the description containing the true "isCdtProjectCreating" state, + * but the project already contains the project description with the false "isCdtProjectCreating" state + * the true state will be ignored, i.e. the resulting setting will contain false "isCdtProjectCreating" state + * + * so only the newly created descriptions (created via a {@link ICProjectDescriptionManager#createProjectDescription(IProject, boolean, boolean)}) may contain + * true "isCdtProjectCreating" state + * + * + * @return boolean + * + * @see ICProjectDescriptionManager#createProjectDescription(IProject, boolean, boolean) + * @see #setCdtProjectCreated() + */ + boolean isCdtProjectCreating(); + + /** + * sets the project creation state to false + * + * @see #isCdtProjectCreating() + * @see ICProjectDescriptionManager#createProjectDescription(IProject, boolean, boolean) + */ + void setCdtProjectCreated(); + } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescriptionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescriptionManager.java index 948963a18bf..37fb45330f6 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescriptionManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICProjectDescriptionManager.java @@ -15,6 +15,14 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; public interface ICProjectDescriptionManager { + + /** + * this method is a full equivalent to {@link #createProjectDescription(IProject, boolean, false)} + * + * @see #createProjectDescription(IProject, boolean, boolean) + */ + ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists) throws CoreException; + /** * the method creates and returns a writable project description * @@ -22,11 +30,16 @@ public interface ICProjectDescriptionManager { * @param loadIfExists if true the method first tries to load and return the project description * from the settings file (.cproject) * if false, the stored settings are ignored and the new (empty) project description is created - * NOTE: changes made to the returned project description will not be applied untill the {@link #setProjectDescription(IProject, ICProjectDescription)} is called + * @param creating if true the created project description will be contain the true "isCdtProjectCreating" state. + * NOTE: in case the project already contains the project description AND its "isCdtProjectCreating" is false + * the resulting description will be created with the false "isCdtProjectCreating" state + * + * NOTE: changes made to the returned project description will not be applied until the {@link #setProjectDescription(IProject, ICProjectDescription)} is called * @return {@link ICProjectDescription} * @throws CoreException */ - ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists) throws CoreException; + ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists, boolean creating) throws CoreException; + /** * returns the project description associated with this project diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java index 54bd84dd0c4..6bcaf37ad02 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java @@ -53,6 +53,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon // private boolean fNeedsActiveCfgIdPersistence; private boolean fIsLoadding; private boolean fIsApplying; + private boolean fIsCreating; private class CfgIdPair { private String fId; @@ -149,13 +150,15 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon } } - CProjectDescription(IProject project, ICStorageElement element, boolean loadding) throws CoreException { + + CProjectDescription(IProject project, ICStorageElement element, boolean loadding, boolean isCreating) throws CoreException { fProject = project; fRootStorageElement = element; fIsReadOnly = loadding; fIsLoadding = loadding; fActiveCfgInfo = new CfgIdPair(ACTIVE_CFG_PROPERTY); fSettingCfgInfo = new CfgIdPair(SETTING_CFG_PROPERTY); + fIsCreating = isCreating; ICStorageElement el = null; CProjectDescriptionManager mngr = CProjectDescriptionManager.getInstance(); if(loadding){ @@ -258,7 +261,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon return fIsApplying; } - public CProjectDescription(CProjectDescription base, boolean saving, ICStorageElement el) { + public CProjectDescription(CProjectDescription base, boolean saving, ICStorageElement el, boolean isCreating) { fActiveCfgInfo = new CfgIdPair(base.fActiveCfgInfo); fSettingCfgInfo = new CfgIdPair(base.fSettingCfgInfo); fProject = base.fProject; @@ -266,6 +269,7 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon fIsReadOnly = saving; fIsLoadding = base.fIsLoadding; fIsApplying = saving || base.fIsApplying; + fIsCreating = isCreating; fPrefs = new CProjectDescriptionPreferences(base.fPrefs, (CProjectDescriptionPreferences)CProjectDescriptionManager.getInstance().getProjectDescriptionWorkspacePreferences(false), false); @@ -587,6 +591,21 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon public void useDefaultConfigurationRelations() { fPrefs.useDefaultConfigurationRelations(); } + + public boolean isCdtProjectCreating() { + return fIsCreating; + } + + public void setCdtProjectCreated() { + if(!fIsCreating) + return; + + if(fIsReadOnly) + throw ExceptionFactory.createIsReadOnlyException(); + + fIsCreating = false; + fIsModified = true; + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java index 286224c3dac..976ab397e1c 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java @@ -475,7 +475,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { CCorePlugin.log(e); } - des = new CProjectDescription((CProjectDescription)des, false, el); + des = new CProjectDescription((CProjectDescription)des, false, el, des.isCdtProjectCreating()); CProjectDescriptionEvent event = createCopyCreatedEvent(des, cache); notifyListeners(event); } @@ -586,7 +586,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { } catch (CoreException e2) { } - des = new CProjectDescription(des, true, el); + des = new CProjectDescription(des, true, el, des.isCdtProjectCreating()); try { setDescriptionApplying(project, des); des.applyDatas(); @@ -801,11 +801,16 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists) throws CoreException{ - ICProjectDescription des = loadIfExists ? getProjectDescription(project) : null; - - if(des == null){ + return createProjectDescription(project, loadIfExists, false); + } + + public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists, boolean creating) throws CoreException{ + ICProjectDescription des = getProjectDescription(project, loadIfExists, true); + if(des == null || !loadIfExists){ + if(creating && des != null) + creating = des.isCdtProjectCreating(); ICStorageElement element = createStorage(project, false, true, false); - des = new CProjectDescription(project, element, false); + des = new CProjectDescription(project, element, false, creating); } return des; } @@ -913,7 +918,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { private ICProjectDescription loadProjectDescription(IProject project) throws CoreException{ ICStorageElement storage = CProjectDescriptionManager.getInstance().createStorage(project, true, false, false); - CProjectDescription des = new CProjectDescription(project, storage, true); + CProjectDescription des = new CProjectDescription(project, storage, true, false); if(des != null){ try { setDescriptionLoadding(project, des); @@ -1913,7 +1918,9 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { if(checkCfgChange(newDescription, oldDescription, false)) delta.addChangeFlags(ICDescriptionDelta.INDEX_CFG); - + + if(oldDescription.isCdtProjectCreating() && !newDescription.isCdtProjectCreating()) + delta.addChangeFlags(ICDescriptionDelta.PROJECT_CREAION_COMPLETED); } return delta.isEmpty() ? null : delta; } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java index 47dc4f522c6..1c6267e48c1 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java @@ -54,7 +54,11 @@ public class SetCProjectDescriptionOperation extends CModelOperation { } catch (CoreException e2) { } - CProjectDescription fNewDescriptionCache = new CProjectDescription(fSetDescription, true, el); + boolean creating = fOldDescriptionCache != null ? fOldDescriptionCache.isCdtProjectCreating() : true; + if(creating) + creating = fSetDescription.isCdtProjectCreating(); + + CProjectDescription fNewDescriptionCache = new CProjectDescription(fSetDescription, true, el, creating); try { mngr.setDescriptionApplying(project, fNewDescriptionCache); fNewDescriptionCache.applyDatas(); diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index d336a1da87f..b6c8f613b91 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -1132,6 +1132,15 @@ public class CCorePlugin extends Plugin { fNewCProjectDescriptionManager.setPreferenceConfiguration(buildSystemId, des); } + /** + * this method is a full equivalent to {@link #createProjectDescription(IProject, boolean, false)} + * + * @see #createProjectDescription(IProject, boolean, boolean) + */ + public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists) throws CoreException{ + return fNewCProjectDescriptionManager.createProjectDescription(project, loadIfExists); + } + /** * the method creates and returns a writable project description * @@ -1139,12 +1148,16 @@ public class CCorePlugin extends Plugin { * @param loadIfExists if true the method first tries to load and return the project description * from the settings file (.cproject) * if false, the stored settings are ignored and the new (empty) project description is created - * NOTE: changes made to the returned project description will not be applied untill the {@link #setProjectDescription(IProject, ICProjectDescription)} is called + * @param creating if true the created project description will be contain the true "isCdtProjectCreating" state. + * NOTE: in case the project already contains the project description AND its "isCdtProjectCreating" is false + * the resulting description will be created with the false "isCdtProjectCreating" state + * + * NOTE: changes made to the returned project description will not be applied until the {@link #setProjectDescription(IProject, ICProjectDescription)} is called * @return {@link ICProjectDescription} * @throws CoreException */ - public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists) throws CoreException{ - return fNewCProjectDescriptionManager.createProjectDescription(project, loadIfExists); + public ICProjectDescription createProjectDescription(IProject project, boolean loadIfExists, boolean creating) throws CoreException{ + return fNewCProjectDescriptionManager.createProjectDescription(project, loadIfExists, creating); } /** diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptor.java index 6dbb2b42c6d..e674a904180 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptor.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptor.java @@ -110,7 +110,10 @@ public class CConfigBasedDescriptor implements ICDescriptor { public void apply(boolean force) throws CoreException{ if(force || fIsDirty){ - CProjectDescriptionManager.getInstance().setProjectDescription(fProject, fCfgDes.getProjectDescription()); + ICProjectDescription des = fCfgDes.getProjectDescription(); + if(des.isCdtProjectCreating()) + des.setCdtProjectCreated(); + CProjectDescriptionManager.getInstance().setProjectDescription(fProject, des); fIsDirty = false; } } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptorManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptorManager.java index f203b9bb399..ee05fffefcd 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptorManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CConfigBasedDescriptorManager.java @@ -299,7 +299,7 @@ public class CConfigBasedDescriptorManager implements ICDescriptorManager { private CProjectDescription createProjDescriptionForDescriptor(IProject project) throws CoreException{ CProjectDescriptionManager mngr = CProjectDescriptionManager.getInstance(); - CProjectDescription des = (CProjectDescription)mngr.createProjectDescription(project, false); + CProjectDescription des = (CProjectDescription)mngr.createProjectDescription(project, false, true); CConfigurationData data = mngr.createDefaultConfigData(project, PathEntryConfigurationDataProvider.getDataFactory()); des.createConfiguration(CCorePlugin.DEFAULT_PROVIDER_ID, data); diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptor.java deleted file mode 100644 index b142fbca302..00000000000 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptor.java +++ /dev/null @@ -1,599 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2005 QNX Software Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * QNX Software Systems - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.internal.core; - - -public class CDescriptor /*implements ICDescriptor */{ - private CDescriptor(){ - } - -// final CDescriptorManager fManager; -// final IProject fProject; -// private COwner fOwner; -// -// private HashMap extMap = new HashMap(4); -// private HashMap extInfoMap = new HashMap(4); -// private Document dataDoc; -// -// protected static final String DESCRIPTION_FILE_NAME = ".cdtproject"; //$NON-NLS-1$ -// -// private static final String CEXTENSION_NAME = "cextension"; //$NON-NLS-1$ -// -// private static final String PROJECT_DESCRIPTION = "cdtproject"; //$NON-NLS-1$ -// private static final String PROJECT_OWNER_ID = "id"; //$NON-NLS-1$ -// private static final String PROJECT_EXTENSION = "extension"; //$NON-NLS-1$ -// private static final String PROJECT_EXTENSION_ATTR_POINT = "point"; //$NON-NLS-1$ -// private static final String PROJECT_EXTENSION_ATTR_ID = "id"; //$NON-NLS-1$ -// private static final String PROJECT_EXTENSION_ATTRIBUTE = "attribute"; //$NON-NLS-1$ -// private static final String PROJECT_EXTENSION_ATTRIBUTE_KEY = "key"; //$NON-NLS-1$ -// private static final String PROJECT_EXTENSION_ATTRIBUTE_VALUE = "value"; //$NON-NLS-1$ -// -// private static final String PROJECT_DATA = "data"; //$NON-NLS-1$ -// private static final String PROJECT_DATA_ITEM = "item"; //$NON-NLS-1$ -// private static final String PROJECT_DATA_ID = "id"; //$NON-NLS-1$ -// -// boolean fUpdating; -// boolean isInitializing = true; -// boolean bDirty = false; -// -// protected CDescriptor(CDescriptorManager manager, IProject project, String id) throws CoreException { -// fProject = project; -// fManager = manager; -// IPath projectLocation = project.getDescription().getLocation(); -// -// if (projectLocation == null) { -// projectLocation = getProjectDefaultLocation(project); -// } -// IPath descriptionPath = projectLocation.append(DESCRIPTION_FILE_NAME); -// -// if (descriptionPath.toFile().exists()) { -// IStatus status; -// String ownerID = readCDTProjectFile(descriptionPath); -// if (!ownerID.equals("")) { //$NON-NLS-1$ -// if (ownerID.equals(id)) { -// status = new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, CCorePlugin.STATUS_CDTPROJECT_EXISTS, -// CCorePlugin.getResourceString("CDescriptor.exception.projectAlreadyExists"), (Throwable)null); //$NON-NLS-1$ -// } else { -// status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, CCorePlugin.STATUS_CDTPROJECT_MISMATCH, -// CCorePlugin.getResourceString("CDescriptor.exception.unmatchedOwnerId") + "", (Throwable)null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ -// } -// throw new CoreException(status); -// } -// } -// fOwner = new COwner(manager.getOwnerConfiguration(id)); -// fOwner.configure(project, this); -// isInitializing = false; -// save(); -// } -// -// protected CDescriptor(CDescriptorManager manager, IProject project) throws CoreException { -// fProject = project; -// fManager = manager; -// IPath projectLocation = project.getDescription().getLocation(); -// -// if (projectLocation == null) { -// projectLocation = getProjectDefaultLocation(project); -// } -// IPath descriptionPath = projectLocation.append(DESCRIPTION_FILE_NAME); -// -// if (!descriptionPath.toFile().exists()) { -// fOwner = new COwner(manager.getOwnerConfiguration(project)); -// fOwner.configure(project, this); -// fManager.updateDescriptor(this); -// } else { -// String ownerId = readCDTProjectFile(descriptionPath); -// fOwner = new COwner(manager.getOwnerConfiguration(ownerId)); -// } -// isInitializing = false; -// } -// -// protected CDescriptor(CDescriptorManager manager, IProject project, COwner owner) throws CoreException { -// fProject = project; -// fManager = manager; -// IPath projectLocation = project.getDescription().getLocation(); -// -// if (projectLocation == null) { -// projectLocation = getProjectDefaultLocation(project); -// } -// IPath descriptionPath = projectLocation.append(DESCRIPTION_FILE_NAME); -// -// if (descriptionPath.toFile().exists()) { -// readCDTProjectFile(descriptionPath); -// } -// fOwner = owner; -// fOwner.configure(project, this); -// isInitializing = false; -// save(); -// } -// -// private String readCDTProjectFile(IPath descriptionPath) throws CoreException { -// String ownerID = ""; //$NON-NLS-1$ -// try { -// DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); -// Document document = parser.parse(descriptionPath.toFile()); -// NodeList nodeList = document.getElementsByTagName(PROJECT_DESCRIPTION); -// if (nodeList != null && nodeList.getLength() > 0) { -// Node node = nodeList.item(0); -// if (node.hasAttributes()) { -// ownerID = node.getAttributes().getNamedItem(PROJECT_OWNER_ID).getNodeValue(); -// } -// readProjectDescription(node); -// return ownerID; -// } -// IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, -// CCorePlugin.getResourceString("CDescriptor.exception.missingElement"), null); //$NON-NLS-1$ -// throw new CoreException(status); -// } catch (Exception e) { -// IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, e.toString(), e); -// throw new CoreException(status); -// } -// } -// -// private static IPath getProjectDefaultLocation(IProject project) { -// return Platform.getLocation().append(project.getFullPath()); -// } -// -// public ICOwnerInfo getProjectOwner() { -// return fOwner; -// } -// -// public String getPlatform() { -// return fOwner.getPlatform(); -// } -// -// public IProject getProject() { -// return fProject; -// } -// -// synchronized public ICExtensionReference[] get(String extensionID) { -// CExtensionReference[] refs = (CExtensionReference[])extMap.get(extensionID); -// if (refs == null) -// return new ICExtensionReference[0]; -// return refs; -// } -// -// synchronized public ICExtensionReference[] get(String extensionID, boolean update) throws CoreException { -// ICExtensionReference[] refs = get(extensionID); -// if (refs.length == 0 && update) { -// boolean oldIsInitializing = isInitializing; -// isInitializing = true; -// fOwner.update(fProject, this, extensionID); -// isInitializing = oldIsInitializing; -// updateIfDirty(); -// refs = get(extensionID); -// } -// return refs; -// } -// -// private CExtensionReference createRef(String extensionPoint, String extension) { -// CExtensionReference extensions[] = (CExtensionReference[])extMap.get(extensionPoint); -// if (extensions == null) { -// extensions = new CExtensionReference[1]; -// extMap.put(extensionPoint, extensions); -// } else { -// CExtensionReference[] newExtensions = new CExtensionReference[extensions.length + 1]; -// System.arraycopy(extensions, 0, newExtensions, 0, extensions.length); -// extensions = newExtensions; -// extMap.put(extensionPoint, extensions); -// } -// extensions[extensions.length - 1] = new CExtensionReference(this, extensionPoint, extension); -// return extensions[extensions.length - 1]; -// } -// -// synchronized public ICExtensionReference create(String extensionPoint, String extension) throws CoreException { -// boolean fireEvent = false; -// CExtensionReference extRef; -// synchronized (this) { -// extRef = createRef(extensionPoint, extension); -// updateOnDisk(); -// if (!isInitializing) { -// fireEvent = true; -// } -// } -// if (fireEvent) { -// fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, CDescriptorEvent.EXTENSION_CHANGED)); -// } -// return extRef; -// } -// -// synchronized public void remove(ICExtensionReference ext) throws CoreException { -// boolean fireEvent = false; -// synchronized (this) { -// CExtensionReference extensions[] = (CExtensionReference[])extMap.get(ext.getExtension()); -// for (int i = 0; i < extensions.length; i++) { -// if (extensions[i] == ext) { -// System.arraycopy(extensions, i, extensions, i + 1, extensions.length - 1 - i); -// if (extensions.length > 1) { -// CExtensionReference[] newExtensions = new CExtensionReference[extensions.length - 1]; -// System.arraycopy(extensions, 0, newExtensions, 0, newExtensions.length); -// extMap.put(ext.getExtension(), newExtensions); -// } else { -// extMap.remove(ext.getExtension()); -// } -// updateOnDisk(); -// if (!isInitializing) { -// fireEvent = true; -// } -// } -// } -// } -// if (fireEvent) { -// fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, CDescriptorEvent.EXTENSION_CHANGED)); -// } -// } -// -// public void remove(String extensionPoint) throws CoreException { -// boolean fireEvent = false; -// synchronized (this) { -// CExtensionReference extensions[] = (CExtensionReference[])extMap.get(extensionPoint); -// if (extensions != null) { -// extMap.remove(extensionPoint); -// updateOnDisk(); -// if (!isInitializing) { -// fireEvent = true; -// } -// } -// } -// if (fireEvent) { -// fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, CDescriptorEvent.EXTENSION_CHANGED)); -// } -// } -// -// synchronized CExtensionInfo getInfo(CExtensionReference cProjectExtension) { -// CExtensionInfo info = (CExtensionInfo)extInfoMap.get(cProjectExtension); -// if (info == null) { -// info = new CExtensionInfo(); -// extInfoMap.put(cProjectExtension, info); -// } -// return info; -// } -// -// protected IFile getFile() { -// return getProject().getFile(DESCRIPTION_FILE_NAME); -// } -// -// void save() throws CoreException { -// IResourceRuleFactory ruleFactory= ResourcesPlugin.getWorkspace().getRuleFactory(); -// ISchedulingRule rule; -// IFile rscFile = getFile(); -// if (rscFile.exists()) { -// rule = ruleFactory.modifyRule(rscFile); -// } else { -// rule = ruleFactory.createRule(rscFile); -// } -// fManager.getWorkspace().run(new IWorkspaceRunnable() { -// -// public void run(IProgressMonitor mon) throws CoreException { -// String xml; -// bDirty = false; -// if (!fProject.isAccessible()) { -// return; -// } -// fUpdating = true; -// -// try { -// xml = getAsXML(); -// } catch (IOException e) { -// IStatus s = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, e.getMessage(), e); -// throw new CoreException(s); -// } catch (TransformerException e) { -// IStatus s = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, e.getMessage(), e); -// throw new CoreException(s); -// } catch (ParserConfigurationException e) { -// IStatus s = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, e.getMessage(), e); -// throw new CoreException(s); -// } -// -// IFile rscFile = getFile(); -// InputStream inputStream; -// try { -// inputStream = new ByteArrayInputStream(xml.getBytes("UTF8")); //$NON-NLS-1$ -// if (rscFile.exists()) { -// if (rscFile.isReadOnly()) { -// // provide opportunity to checkout read-only .cdtproject file -// fManager.getWorkspace().validateEdit(new IFile[]{rscFile}, null); -// } -// rscFile.setContents(inputStream, IResource.FORCE, null); -// } else { -// rscFile.create(inputStream, IResource.FORCE, null); -// } -// } catch (UnsupportedEncodingException e) { -// IStatus s = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, e.getMessage(), e); -// throw new CoreException(s); -// } -// fUpdating = false; -// } -// }, rule, IWorkspace.AVOID_UPDATE, null); -// } -// -// boolean isUpdating() { -// return fUpdating; -// } -// -// void updateIfDirty() { -// if ( bDirty ) { -// updateOnDisk(); -// } -// } -// -// synchronized void updateOnDisk() { -// if (isUpdating()) { -// return; -// } -// if (isInitializing) { -// bDirty = true; -// return; -// } -// fUpdating = true; -// fManager.updateDescriptor(this); -// } -// -// void updateFromDisk() throws CoreException { -// COwner origOwner; -// HashMap origExtMap; -// HashMap origExtInfoMap; -// Document origDataDoc; -// synchronized (this) { -// IPath projectLocation = fProject.getDescription().getLocation(); -// -// if (projectLocation == null) { -// projectLocation = getProjectDefaultLocation(fProject); -// } -// IPath descriptionPath = projectLocation.append(DESCRIPTION_FILE_NAME); -// if (!descriptionPath.toFile().exists()) { -// updateOnDisk(); -// return; -// } -// -// origOwner = fOwner; -// origExtMap = extMap; -// origExtInfoMap = extInfoMap; -// origDataDoc = dataDoc; -// -// extMap = new HashMap(4); -// extInfoMap = new HashMap(4); -// dataDoc = null; -// -// try { -// String ownerId = readCDTProjectFile(descriptionPath); -// fOwner = new COwner(fManager.getOwnerConfiguration(ownerId)); -// } catch (CoreException e) { -// CCorePlugin.log(e); -// fOwner = origOwner; -// extMap = origExtMap; -// extInfoMap = origExtInfoMap; -// dataDoc = origDataDoc; -// } -// } -// if (!fOwner.equals(origOwner)) { -// fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, CDescriptorEvent.OWNER_CHANGED)); -// } else { -// boolean extChanges = true; -// if (extMap.size() == origExtMap.size() && extInfoMap.size() == origExtInfoMap.size()) { -// extChanges = false; -// Iterator entries = extMap.entrySet().iterator(); -// while (entries.hasNext()) { -// Entry entry = (Entry)entries.next(); -// if (!origExtMap.containsKey(entry.getKey())) { -// extChanges = true; -// break; -// } -// CExtensionReference origExt[] = (CExtensionReference[])origExtMap.get(entry.getKey()); -// CExtensionReference newExt[] = (CExtensionReference[])entry.getValue(); -// if (!Arrays.equals(origExt, newExt)) { -// extChanges = true; -// break; -// } -// } -// } -// if (extChanges) { -// fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, -// CDescriptorEvent.EXTENSION_CHANGED)); -// } else { -// fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, 0)); -// } -// } -// } -// -// private void readProjectDescription(Node node) { -// Node childNode; -// NodeList list = node.getChildNodes(); -// for (int i = 0; i < list.getLength(); i++) { -// childNode = list.item(i); -// if (childNode.getNodeType() == Node.ELEMENT_NODE) { -// if (childNode.getNodeName().equals(PROJECT_EXTENSION)) { -// try { -// decodeProjectExtension((Element)childNode); -// } catch (CoreException e) { -// CCorePlugin.log(e); -// } -// } else if (childNode.getNodeName().equals(PROJECT_DATA)) { -// try { -// decodeProjectData((Element)childNode); -// } catch (CoreException e) { -// CCorePlugin.log(e); -// } -// } -// } -// } -// } -// -// private void decodeProjectExtension(Element element) throws CoreException { -// String point = element.getAttribute(PROJECT_EXTENSION_ATTR_POINT); -// String id = element.getAttribute(PROJECT_EXTENSION_ATTR_ID); -// CExtensionReference ext = createRef(point, id); -// NodeList extAttrib = element.getChildNodes(); -// for (int j = 0; j < extAttrib.getLength(); j++) { -// if (extAttrib.item(j).getNodeName().equals(PROJECT_EXTENSION_ATTRIBUTE)) { -// NamedNodeMap attrib = extAttrib.item(j).getAttributes(); -// getInfo(ext).setAttribute(attrib.getNamedItem(PROJECT_EXTENSION_ATTRIBUTE_KEY).getNodeValue(), -// attrib.getNamedItem(PROJECT_EXTENSION_ATTRIBUTE_VALUE).getNodeValue()); -// } -// } -// } -// -// private void encodeProjectExtensions(Document doc, Element configRootElement) { -// Element element; -// Iterator extIterator = extMap.values().iterator(); -// while (extIterator.hasNext()) { -// CExtensionReference extension[] = (CExtensionReference[])extIterator.next(); -// for (int i = 0; i < extension.length; i++) { -// configRootElement.appendChild(element = doc.createElement(PROJECT_EXTENSION)); -// element.setAttribute(PROJECT_EXTENSION_ATTR_POINT, extension[i].getExtension()); -// element.setAttribute(PROJECT_EXTENSION_ATTR_ID, extension[i].getID()); -// CExtensionInfo info = (CExtensionInfo)extInfoMap.get(extension[i]); -// if (info != null) { -// Iterator attribIterator = info.getAttributes().entrySet().iterator(); -// while (attribIterator.hasNext()) { -// Entry entry = (Entry)attribIterator.next(); -// Element extAttributes = doc.createElement(PROJECT_EXTENSION_ATTRIBUTE); -// extAttributes.setAttribute(PROJECT_EXTENSION_ATTRIBUTE_KEY, (String)entry.getKey()); -// extAttributes.setAttribute(PROJECT_EXTENSION_ATTRIBUTE_VALUE, (String)entry.getValue()); -// element.appendChild(extAttributes); -// } -// } -// } -// } -// } -// -// String getAsXML() throws IOException, TransformerException, ParserConfigurationException { -// DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); -// DocumentBuilder docBuilder = dfactory.newDocumentBuilder(); -// Document doc = docBuilder.newDocument(); -// ProcessingInstruction version = doc.createProcessingInstruction("eclipse-cdt", "version=\"2.0\""); //$NON-NLS-1$ //$NON-NLS-2$ -// doc.appendChild(version); -// Element configRootElement = doc.createElement(PROJECT_DESCRIPTION); -// doc.appendChild(configRootElement); -// if (fOwner.getID().length() > 0) { -// configRootElement.setAttribute(PROJECT_OWNER_ID, fOwner.getID()); -// } -// encodeProjectExtensions(doc, configRootElement); -// encodeProjectData(doc, configRootElement); -// return serializeDocument(doc); -// } -// -// protected ICExtension createExtensions(ICExtensionReference ext) throws CoreException { -// InternalCExtension cExtension = null; -// IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); -// IExtensionPoint extensionPoint = extensionRegistry.getExtensionPoint(ext.getExtension()); -// IExtension extension = extensionPoint.getExtension(ext.getID()); -// if (extension == null) { -// throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, -// CCorePlugin.getResourceString("CDescriptor.exception.providerNotFound") + ":" + ext.getID(), null)); //$NON-NLS-1$ //$NON-NLS-2$ -// } -// IConfigurationElement element[] = extension.getConfigurationElements(); -// for (int i = 0; i < element.length; i++) { -// if (element[i].getName().equalsIgnoreCase(CEXTENSION_NAME)) { -// cExtension = (InternalCExtension)element[i].createExecutableExtension("run"); //$NON-NLS-1$ -// cExtension.setExtensionReference(ext); -// cExtension.setProject(fProject); -// break; -// } -// } -// return (ICExtension)cExtension; -// } -// -// protected IConfigurationElement[] getConfigurationElement(ICExtensionReference ext) throws CoreException { -// IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); -// IExtensionPoint extensionPoint = extensionRegistry.getExtensionPoint(ext.getExtension()); -// IExtension extension = extensionPoint.getExtension(ext.getID()); -// if (extension == null) { -// throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, -// CCorePlugin.getResourceString("CDescriptor.exception.providerNotFound"), null)); //$NON-NLS-1$ -// } -// IConfigurationElement element[] = extension.getConfigurationElements(); -// for (int i = 0; i < element.length; i++) { -// if (element[i].getName().equalsIgnoreCase(CEXTENSION_NAME)) { -// return element[i].getChildren(); -// } -// } -// return new IConfigurationElement[0]; -// } -// -// public synchronized Element getProjectData(String id) throws CoreException { -// Document doc = getProjectDataDoc(); -// NodeList nodes = doc.getDocumentElement().getElementsByTagName(PROJECT_DATA_ITEM); -// for (int i = 0; i < nodes.getLength(); ++i) { -// Element element = (Element)nodes.item(i); -// if (element != null && element.getAttribute(PROJECT_DATA_ID).equals(id)) -// return element; -// } -// -// // Not found, make a new one -// Element element = doc.createElement(PROJECT_DATA_ITEM); -// element.setAttribute(PROJECT_DATA_ID, id); -// doc.getDocumentElement().appendChild(element); -// return element; -// } -// -// public void saveProjectData() throws CoreException { -// save(); -// fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, 0)); -// } -// -// // The project data allows for the storage of any structured information -// // into the cdtproject file. -// synchronized private Document getProjectDataDoc() throws CoreException { -// if (dataDoc == null) { -// try { -// dataDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); -// } catch (ParserConfigurationException e) { -// throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, IStatus.ERROR, -// CCorePlugin.getResourceString("CDescriptor.extension.internalError"), e)); //$NON-NLS-1$ -// } -// Element rootElem = dataDoc.createElement(PROJECT_DATA); -// dataDoc.appendChild(rootElem); -// } -// return dataDoc; -// } -// -// private void decodeProjectData(Element data) throws CoreException { -// Document doc = getProjectDataDoc(); -// doc.replaceChild(doc.importNode(data, true), doc.getDocumentElement()); -// } -// -// private void encodeProjectData(Document doc, Element root) { -// // Don't create or encode the doc if it isn't there already -// if (dataDoc != null) { -// Element dataElements = dataDoc.getDocumentElement(); -// NodeList nodes = dataElements.getElementsByTagName(PROJECT_DATA_ITEM); -// for (int i = 0; i < nodes.getLength(); ++i) { -// Element item = (Element)nodes.item(i); -// if (!item.hasChildNodes()) { // remove any empty item tags -// dataElements.removeChild(item); -// i--; //nodeList is live.... removeal changes nodelist -// } -// } -// root.appendChild(doc.importNode(dataDoc.getDocumentElement(), true)); -// } -// } -// -// private String serializeDocument(Document doc) throws IOException, TransformerException { -// ByteArrayOutputStream s = new ByteArrayOutputStream(); -// -// TransformerFactory factory = TransformerFactory.newInstance(); -// Transformer transformer = factory.newTransformer(); -// transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$ -// transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$ -// transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$ -// -// DOMSource source = new DOMSource(doc); -// StreamResult outputTarget = new StreamResult(s); -// transformer.transform(source, outputTarget); -// -// return s.toString("UTF8"); //$NON-NLS-1$ -// } -// -// public ICConfigurationDescription getConfigurationDescription() { -// // TODO Auto-generated method stub -// return null; -// } -} diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptorManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptorManager.java deleted file mode 100644 index e7360e1fb23..00000000000 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CDescriptorManager.java +++ /dev/null @@ -1,363 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2006 QNX Software Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * QNX Software Systems - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.internal.core; - - -public class CDescriptorManager /*implements ICDescriptorManager, IResourceChangeListener */{ - private CDescriptorManager(){ - - } -// -// Map fOperationMap = new HashMap(1); -// Map fDescriptorMap = new HashMap(); -// Map fOwnerConfigMap = null; -// List listeners = Collections.synchronizedList(new Vector()); -// -// private static final COwnerConfiguration NULLCOwner = new COwnerConfiguration("", //$NON-NLS-1$ -// CCorePlugin.getResourceString("CDescriptorManager.internal_owner")); //$NON-NLS-1$ -// -// class CDescriptorUpdater extends Job { -// -// CDescriptor fDescriptor; -// -// public CDescriptorUpdater(CDescriptor descriptor) { -// super(CCorePlugin.getResourceString("CDescriptorManager.async_updater")); //$NON-NLS-1$ -// fDescriptor = descriptor; -// setPriority(Job.INTERACTIVE); -// setSystem(true); -// setRule(descriptor.getProject()); -// } -// -// protected IStatus run(IProgressMonitor monitor) { -// try { -// fDescriptor.save(); -// } catch (CoreException e) { -// return e.getStatus(); -// } -// return Status.OK_STATUS; -// } -// -// } -// -// -// IWorkspace getWorkspace() { -// return ResourcesPlugin.getWorkspace(); -// } -// -// public void shutdown() { -// getWorkspace().removeResourceChangeListener(this); -// } -// -// public void startup() throws CoreException { -// getWorkspace().getRoot().accept(new IResourceVisitor() { -// -// public boolean visit(IResource resource) { -// if (resource.getType() == IResource.PROJECT) { -// IProject project = (IProject)resource; -// try { // seed in memory descriptor map -// if (project.isAccessible() && project.findMember(CDescriptor.DESCRIPTION_FILE_NAME) != null) { -// getDescriptor(project); -// } -// } catch (CoreException e) { -// CCorePlugin.log(e); -// } -// return false; -// } -// return resource.getType() == IResource.ROOT; -// } -// }); -// getWorkspace().addResourceChangeListener(this, -// IResourceChangeEvent.PRE_BUILD | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.PRE_CLOSE); -// } -// -// /** -// * Watch for changes/deletions of the .cdtproject file. -// * -// * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent) -// */ -// public void resourceChanged(IResourceChangeEvent event) { -// if (event.getSource() instanceof IWorkspace) { -// IResource resource = event.getResource(); -// -// switch (event.getType()) { -// case IResourceChangeEvent.PRE_DELETE : -// case IResourceChangeEvent.PRE_CLOSE : -// if (resource.getType() == IResource.PROJECT) { -// CDescriptor descriptor = (CDescriptor)fDescriptorMap.remove(resource); -// if (descriptor != null) { -// fireEvent(new CDescriptorEvent(descriptor, CDescriptorEvent.CDTPROJECT_REMOVED, 0)); -// } -// } -// break; -// case IResourceChangeEvent.PRE_BUILD : -// IResourceDelta resDelta = event.getDelta(); -// if (resDelta == null) { -// break; -// } -// try { -// resDelta.accept(new IResourceDeltaVisitor() { -// -// public boolean visit(IResourceDelta delta) throws CoreException { -// IResource dResource = delta.getResource(); -// if (dResource.getType() == IResource.PROJECT) { -// if (0 != (delta.getFlags() & IResourceDelta.OPEN)) { -// IProject project = (IProject)dResource; -// if (project.isAccessible() && project.findMember(CDescriptor.DESCRIPTION_FILE_NAME) != null -// && fDescriptorMap.get(project) == null) { -// getDescriptor(project); // file on disk but not in memory...read -// } else { -// CDescriptor descriptor = (CDescriptor)fDescriptorMap.remove(project); -// if (descriptor != null) { -// fireEvent(new CDescriptorEvent(descriptor, CDescriptorEvent.CDTPROJECT_REMOVED, 0)); -// } -// } -// return false; -// } -// return true; -// } else if (dResource.getType() == IResource.FILE) { -// if (dResource.getName().equals(CDescriptor.DESCRIPTION_FILE_NAME)) { -// CDescriptor descriptor = (CDescriptor)fDescriptorMap.get(dResource.getProject()); -// if (descriptor != null) { -// if ( (delta.getKind() & IResourceDelta.REMOVED) != 0) { -// // the file got deleted lets try -// // and restore for memory. -// descriptor.updateOnDisk(); -// } else if ( (delta.getFlags() & IResourceDelta.CONTENT) != 0) { -// // content change lets try to -// // read and update -// descriptor.updateFromDisk(); -// } -// } -// return false; -// } -// return true; -// } -// return dResource.getType() == IResource.ROOT; -// } -// }); -// } catch (CoreException e) { -// CCorePlugin.log(e); -// } -// break; -// } -// } -// } -// -// private void initializeOwnerConfiguration() { -// IExtensionPoint extpoint = Platform.getExtensionRegistry().getExtensionPoint(CCorePlugin.PLUGIN_ID, "CProject"); //$NON-NLS-1$ -// IExtension extension[] = extpoint.getExtensions(); -// fOwnerConfigMap = new HashMap(extension.length); -// for (int i = 0; i < extension.length; i++) { -// IConfigurationElement element[] = extension[i].getConfigurationElements(); -// for (int j = 0; j < element.length; j++) { -// if (element[j].getName().equalsIgnoreCase("cproject")) { //$NON-NLS-1$ -// fOwnerConfigMap.put(extension[i].getUniqueIdentifier(), new COwnerConfiguration(element[j])); -// break; -// } -// } -// } -// } -// -// COwnerConfiguration getOwnerConfiguration(String id) { -// if (id.equals(NULLCOwner.getOwnerID())) { //$NON-NLS-1$ -// return NULLCOwner; -// } -// if (fOwnerConfigMap == null) { -// initializeOwnerConfiguration(); -// } -// COwnerConfiguration config = (COwnerConfiguration)fOwnerConfigMap.get(id); -// if (config == null) { // no install owner, lets create place holder config for it. -// config = new COwnerConfiguration(id, CCorePlugin.getResourceString("CDescriptorManager.owner_not_Installed")); //$NON-NLS-1$ -// fOwnerConfigMap.put(id, config); -// } -// return config; -// } -// -// COwnerConfiguration getOwnerConfiguration(IProject project) throws CoreException { -// if (fOwnerConfigMap == null) { -// initializeOwnerConfiguration(); -// } -// IProjectDescription description = project.getDescription(); -// String natureIDs[] = description.getNatureIds(); -// Iterator configs = fOwnerConfigMap.entrySet().iterator(); -// while (configs.hasNext()) { -// Entry entry = (Entry)configs.next(); -// COwnerConfiguration config = (COwnerConfiguration)entry.getValue(); -// if (config.getNature() != null) { -// if (Arrays.asList(natureIDs).lastIndexOf(config.getNature()) != -1) { -// return config; -// } -// } -// } -// return NULLCOwner; -// } -// -// synchronized public ICDescriptor getDescriptor(IProject project) throws CoreException { -// return getDescriptor(project, true); -// } -// -// synchronized public ICDescriptor getDescriptor(IProject project, boolean create) throws CoreException { -// CDescriptor descriptor = (CDescriptor)fDescriptorMap.get(project); -// if (descriptor == null) { -// if (create) { -// descriptor = new CDescriptor(this, project); -// fDescriptorMap.put(project, descriptor); -// } else { -// IPath projectLocation = project.getDescription().getLocation(); -// -// if (projectLocation == null) { -// projectLocation = Platform.getLocation().append(project.getFullPath()); -// } -// IPath descriptionPath = projectLocation.append(CDescriptor.DESCRIPTION_FILE_NAME); -// -// if (descriptionPath.toFile().exists()) { -// descriptor = new CDescriptor(this, project); -// fDescriptorMap.put(project, descriptor); -// } -// } -// } -// return descriptor; -// } -// -// public void configure(IProject project, String id) throws CoreException { -// CDescriptor descriptor; -// if (id.equals(NULLCOwner.getOwnerID())) { //$NON-NLS-1$ -// IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, -// CCorePlugin.getResourceString("CDescriptorManager.exception.invalid_ownerID"), //$NON-NLS-1$ -// (Throwable)null); -// throw new CoreException(status); -// } -// synchronized (this) { -// descriptor = (CDescriptor)fDescriptorMap.get(project); -// if (descriptor != null) { -// if (descriptor.getProjectOwner().getID().equals(NULLCOwner.getOwnerID())) { //$NON-NLS-1$ -// // non owned descriptors are simply configure to the new owner no questions ask! -// descriptor = new CDescriptor(this, project, new COwner(getOwnerConfiguration(id))); -// } else if (!descriptor.getProjectOwner().getID().equals(id)) { -// IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, CCorePlugin.STATUS_CDTPROJECT_EXISTS, -// CCorePlugin.getResourceString("CDescriptorManager.exception.alreadyConfigured"), //$NON-NLS-1$ -// (Throwable)null); -// throw new CoreException(status); -// } else { -// return; // already configured with same owner. -// } -// } else { -// try { -// descriptor = new CDescriptor(this, project, id); -// } catch (CoreException e) { // if .cdtproject already exists we'll use that -// IStatus status = e.getStatus(); -// if (status.getCode() == CCorePlugin.STATUS_CDTPROJECT_EXISTS) { -// descriptor = new CDescriptor(this, project); -// } else -// throw e; -// } -// } -// fDescriptorMap.put(project, descriptor); -// } -// fireEvent(new CDescriptorEvent(descriptor, CDescriptorEvent.CDTPROJECT_ADDED, 0)); -// } -// -// public void convert(IProject project, String id) throws CoreException { -// CDescriptor descriptor; -// synchronized (this) { -// descriptor = new CDescriptor(this, project, new COwner(getOwnerConfiguration(id))); -// fDescriptorMap.put(project, descriptor); -// } -// fireEvent(new CDescriptorEvent(descriptor, CDescriptorEvent.CDTPROJECT_CHANGED, CDescriptorEvent.OWNER_CHANGED)); -// } -// -// public void addDescriptorListener(ICDescriptorListener listener) { -// listeners.add(listener); -// } -// -// public void removeDescriptorListener(ICDescriptorListener listener) { -// listeners.remove(listener); -// } -// -// protected void fireEvent(final CDescriptorEvent event) { -// if (fOperationMap.containsKey(event.getDescriptor())) { -// // lets just hold on to the important event in order of; -// // ADD/REMOVE should not receive the remove but.... -// // OWNER_CHANGED -// // EXT_CHANGED -// // other -// if (event.getType() == CDescriptorEvent.CDTPROJECT_ADDED) { -// fOperationMap.put(event.getDescriptor(), event); -// } else if (event.getType() == CDescriptorEvent.CDTPROJECT_REMOVED) { -// fOperationMap.put(event.getDescriptor(), event); -// } else { -// CDescriptorEvent ev = (CDescriptorEvent)fOperationMap.get(event.getDescriptor()); -// if (ev == null) { -// fOperationMap.put(event.getDescriptor(), event); -// } else if ( (ev.getFlags() & event.getFlags()) != event.getFlags()) { -// fOperationMap.put(event.getDescriptor(), new CDescriptorEvent(event.getDescriptor(), event.getType(), -// ev.getFlags() | event.getFlags())); -// } -// } -// return; -// } -// final ICDescriptorListener[] listener; -// synchronized (listeners) { -// listener = (ICDescriptorListener[])listeners.toArray(new ICDescriptorListener[listeners.size()]); -// } -// for (int i = 0; i < listener.length; i++) { -// final int index = i; -// Platform.run(new ISafeRunnable() { -// -// public void handleException(Throwable exception) { -// IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, -// CCorePlugin.getResourceString("CDescriptorManager.exception.listenerError"), exception); //$NON-NLS-1$ -// CCorePlugin.log(status); -// } -// -// public void run() throws Exception { -// listener[index].descriptorChanged(event); -// } -// }); -// } -// } -// -// public void runDescriptorOperation(IProject project, ICDescriptorOperation op, IProgressMonitor monitor) throws CoreException { -// ICDescriptor descriptor = getDescriptor(project, true); -// if (descriptor == null) { -// throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, "Failed to create descriptor", null)); //$NON-NLS-1$ -// } -// CDescriptorEvent event = null; -// synchronized (descriptor) { -// beginOperation(descriptor); -// try { -// op.execute(descriptor, monitor); -// } finally { -// event = endOperation(descriptor); -// } -// } -// if (event != null) { -// fireEvent(event); -// } -// } -// -// private void beginOperation(ICDescriptor descriptor) { -// fOperationMap.put(descriptor, null); -// } -// -// private CDescriptorEvent endOperation(ICDescriptor descriptor) { -// return (CDescriptorEvent)fOperationMap.remove(descriptor); -// } -// -// /* -// * Perform a update of the ondisk .cdtproject file. This is nessecary to avoid deadlocking when the descriptor has change from a -// * call to ICDescriptor.get(project, true) which may update the descriptor via the owner update method, while the workspace is -// * locked (ie during a resourceChange event). -// */ -// protected void updateDescriptor(CDescriptor descriptor) { -// new CDescriptorUpdater(descriptor).schedule(); -// } -} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTCommonProjectWizard.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTCommonProjectWizard.java index 7234dde055a..6c3e0f85715 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTCommonProjectWizard.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTCommonProjectWizard.java @@ -36,6 +36,9 @@ import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard; import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.newui.UIMessages; @@ -101,8 +104,12 @@ implements IExecutableExtension, IWizardWithMemory return savedHandler.isChanged(); } - + public IProject getProject(boolean defaults) { + return getProject(defaults, true); + } + + public IProject getProject(boolean defaults, boolean onFinish) { if (newProject != null && isChanged()) clearProject(); if (newProject == null) { @@ -111,7 +118,7 @@ implements IExecutableExtension, IWizardWithMemory lastProjectName = fMainPage.getProjectName(); lastProjectLocation = fMainPage.getProjectLocation(); // start creation process - invokeRunnable(getRunnable(defaults)); + invokeRunnable(getRunnable(defaults, onFinish)); } return newProject; } @@ -147,13 +154,32 @@ implements IExecutableExtension, IWizardWithMemory public boolean performFinish() { // create project if it is not created yet - if (getProject(fMainPage.isCurrent()) == null) return false; + if (getProject(fMainPage.isCurrent(), true) == null) return false; fMainPage.h_selected.postProcess(newProject); + setCreated(); BasicNewProjectResourceWizard.updatePerspective(fConfigElement); selectAndReveal(newProject); return true; } + protected boolean setCreated(){ + ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); + + ICProjectDescription des = mngr.getProjectDescription(newProject, false); + if(des.isCdtProjectCreating()){ + des = mngr.getProjectDescription(newProject, true); + des.setCdtProjectCreated(); + try { + mngr.setProjectDescription(newProject, des, false, null); + return true; + } catch (CoreException e) { + //TODO: log/display err + e.printStackTrace(); + } + } + return false; + } + public boolean performCancel() { clearProject(); return true; @@ -163,7 +189,7 @@ implements IExecutableExtension, IWizardWithMemory fConfigElement= config; } - private IRunnableWithProgress getRunnable(boolean _defaults) { + private IRunnableWithProgress getRunnable(boolean _defaults, final boolean onFinish) { final boolean defaults = _defaults; return new IRunnableWithProgress() { public void run(IProgressMonitor imonitor) throws InvocationTargetException, InterruptedException { @@ -172,7 +198,7 @@ implements IExecutableExtension, IWizardWithMemory try { newProject = createIProject(lastProjectName, lastProjectLocation); if (newProject != null) - fMainPage.h_selected.createProject(newProject, defaults); + fMainPage.h_selected.createProject(newProject, defaults, onFinish); } catch (CoreException e) { CUIPlugin.getDefault().log(e); } } }); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CWizardHandler.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CWizardHandler.java index f67770ccae6..b33cc44b191 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CWizardHandler.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CWizardHandler.java @@ -142,6 +142,20 @@ public class CWizardHandler implements Cloneable { public void createProject(IProject proj, boolean defaults) throws CoreException {} + /** + * Creates project + * + * @param proj - simple project to be used as base + * @param defaults - true if called from 1st Wizard page + * @param onFinish - true when the project creation is performed on finish. false -otherwise + * false means that the project created is actually a temporary one that can be removed in case cancell is pressed + * + * @throws CoreException + */ + public void createProject(IProject proj, boolean defaults, boolean onFinish) + throws CoreException { + createProject(proj, defaults); + } /** * * @return true if settings were changed