From e8a221b7dedb541018df1d90c6c779b9fa686fd2 Mon Sep 17 00:00:00 2001 From: "Judy N. Green" Date: Thu, 15 Aug 2002 20:30:19 +0000 Subject: [PATCH] Added methods to create and convert to default standard make C and C++ projects from simple projects such as when checking out new code "as a project" from CVS --- .../src/org/eclipse/cdt/core/CCorePlugin.java | 146 +++++++++++++++++- 1 file changed, 145 insertions(+), 1 deletion(-) 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 ecf6b2614f0..95ea0d31b43 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 @@ -13,8 +13,8 @@ import org.eclipse.cdt.core.index.IndexModel; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.resources.IConsole; import org.eclipse.cdt.internal.core.CProjectDescriptor; -import org.eclipse.cdt.internal.core.model.CProject; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; @@ -22,9 +22,13 @@ import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IPluginDescriptor; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.SubProgressMonitor; public class CCorePlugin extends Plugin { @@ -151,4 +155,144 @@ public class CCorePlugin extends Plugin { public void mapCProjectOwner(IProject project, String id) throws CoreException { CProjectDescriptor.configure(project, id); } + + /** + * Creates a C project resource given the project handle and description. + * + * @param description the project description to create a project resource for + * @param projectHandle the project handle to create a project resource for + * @param monitor the progress monitor to show visual progress with + * @param projectID required for mapping the project to an owner + * + * @exception CoreException if the operation fails + * @exception OperationCanceledException if the operation is canceled + */ + public IProject createCProject(IProjectDescription description, IProject projectHandle, + IProgressMonitor monitor, String projectID) throws CoreException, OperationCanceledException { + try { + if (monitor == null) { + monitor = new NullProgressMonitor(); + } + monitor.beginTask("Creating C Project", 3);//$NON-NLS-1$ + if (!projectHandle.exists()){ + projectHandle.create(description, monitor); + } + + if (monitor.isCanceled()){ + throw new OperationCanceledException(); + } + + // Open first. + projectHandle.open(monitor); + + // Add C Nature ... does not add duplicates + CProjectNature.addCNature(projectHandle, new SubProgressMonitor(monitor, 1)); + mapCProjectOwner(projectHandle, projectID); + } finally { + //monitor.done(); + } + return projectHandle; + } + + /** + * Method convertProjectFromCtoCC converts + * a C Project to a C++ Project + * The newProject MUST, not be null, already have a C Nature + * && must NOT already have a C++ Nature + * + * @param projectHandle + * @param monitor + * @param projectID + * @throws CoreException + */ + + public void convertProjectFromCtoCC(IProject projectHandle, IProgressMonitor monitor, String projectID) + throws CoreException{ + if ((projectHandle != null) + && projectHandle.hasNature(CCProjectNature.C_NATURE_ID) + && !projectHandle.hasNature(CCProjectNature.CC_NATURE_ID)) { + // Add C++ Nature ... does not add duplicates + CCProjectNature.addCCNature(projectHandle, monitor); + + if(projectID != null){ + mapCProjectOwner(projectHandle, projectID); + } + } + } + /** + * Method convertProjectFromCtoCC converts + * a C Project to a C++ Project + * The newProject MUST, not be null, already have a C Nature + * && must NOT already have a C++ Nature
+ * This method does not map the project to an owner and should only + * be used when this mapping has already taken place. + * + * @param projectHandle + * @param monitor + * @throws CoreException + */ + + public void convertProjectFromCtoCC(IProject projectHandle, IProgressMonitor monitor) + throws CoreException{ + + convertProjectFromCtoCC(projectHandle, monitor, null); + } + /** + * Method addDefaultCBuilder adds the default C make builder + * @param projectHandle + * @param monitor + * @exception CoreException + */ + public void addDefaultCBuilder( IProject projectHandle, IProgressMonitor monitor) + throws CoreException{ + // Set the Default C Builder. + CProjectNature.addCBuildSpec(projectHandle, monitor); + } + + /** + * Method to convert a project to a C nature + * & default make builder + * All checks should have been done externally + * (as in the Conversion Wizards). + * This method blindly does the conversion. + * + * @param project + * @param String targetNature + * @param monitor + * @param projectID + * @exception CoreException + */ + + public void convertProjectToC(IProject projectHandle, IProgressMonitor monitor, String projectID) + throws CoreException{ + if ((projectHandle == null) || (monitor == null) || (projectID == null)){ + return; + } + IWorkspace workspace = ResourcesPlugin.getWorkspace(); + IProjectDescription description = workspace.newProjectDescription(projectHandle.getName()); + description.setLocation(projectHandle.getFullPath()); + createCProject(description, projectHandle, monitor, projectID); + addDefaultCBuilder(projectHandle, monitor); + } + /** + * Method to convert a project to a C++ nature + * & default make builder, if it does not have one already + * + * @param project + * @param String targetNature + * @param monitor + * @param projectID + * @exception CoreException + */ + + public void convertProjectToCC(IProject projectHandle, IProgressMonitor monitor, String projectID) + throws CoreException{ + if ((projectHandle == null) || (monitor == null) || (projectID == null)){ + return; + } + createCProject(projectHandle.getDescription(), projectHandle, monitor, projectID); + // now add C++ nature + convertProjectFromCtoCC(projectHandle, monitor); + addDefaultCBuilder(projectHandle, monitor); + } }