org.eclipse.cdt.core.model

## Interface ISourceManipulation

All Known Subinterfaces:
  IAsmLabel, IBinaryFunction, IBinaryVariable, IDeclaration, IEnumeration, IEnumerator, IField, IFunction, IFunctionDeclaration, IFunctionTemplate, IFunctionTemplateDeclaration, IInclude, IMacro, IMember, IMethod, IMethodDeclaration, IMethodTemplate, IMethodTemplateDeclaration, INamespace, IStructure, IStructureDeclaration, IStructureTemplate, IStructureTemplateDeclaration, ITranslationUnit, ITypeDef, IUsing, IVariable, IVariableDeclaration, IWorkingCopy

    public interface ISourceManipulation

Common protocol for C elements that support source code manipulations such as copy, move, rename, and delete.

### Method Summary

All Methods Instance Methods Abstract Methods
`void` `copy(ICElement container, ICElement sibling, String rename, boolean replace, IProgressMonitor monitor)` Copies this element to the given container.
`void` `delete(boolean force, IProgressMonitor monitor)` Deletes this element, forcing if specified and necessary.
`void` `move(ICElement container, ICElement sibling, String rename, boolean replace, IProgressMonitor monitor)` Moves this element to the given container.
`void` `rename(String name, boolean replace, IProgressMonitor monitor)` Renames this element to the given name.

### Method Detail

#### copy

    void copy(ICElement container,
              ICElement sibling,
              String rename,
              boolean replace,
              IProgressMonitor monitor)
       throws CModelException

Copies this element to the given container.

Parameters:
  `container` - the container
  `sibling` - the sibling element before which the copy should be inserted, or `null` if the copy should be inserted as the last child of the container
  `rename` - the new name for the element, or `null` if the copy retains the name of this element
  `replace` - `true` if any existing child in the container with the target name should be replaced, and `false` to throw an exception in the event of a name collision
  `monitor` - a progress monitor
Throws:
  `CModelException` - if this element could not be copied. Reasons include:
  - This C element, container element, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)
  - A `CoreException` occurred while updating an underlying resource
  - The container is of an incompatible type (INVALID_DESTINATION)
  - The sibling is not a child of the given container (INVALID_SIBLING)
  - The new name is invalid (INVALID_NAME)
  - A child in the container already exists with the same name (NAME_COLLISION) and `replace` has been specified as `false`
  - The container or this element is read-only (READ_ONLY)
  `IllegalArgumentException` - if container is `null`

#### delete

    void delete(boolean force,
                IProgressMonitor monitor)
         throws CModelException

Deletes this element, forcing if specified and necessary.

Parameters:
  `force` - a flag controlling whether underlying resources that are not in sync with the local file system will be tolerated (same as the force flag in IResource operations).
  `monitor` - a progress monitor
Throws:
  `CModelException` - if this element could not be deleted. Reasons include:
  - This C element does not exist (ELEMENT_DOES_NOT_EXIST)
  - A `CoreException` occurred while updating an underlying resource (CORE_EXCEPTION)
  - This element is read-only (READ_ONLY)

#### move

    void move(ICElement container,
              ICElement sibling,
              String rename,
              boolean replace,
              IProgressMonitor monitor)
       throws CModelException

Moves this element to the given container.

Parameters:
  `container` - the container
  `sibling` - the sibling element before which the element should be inserted, or `null` if the element should be inserted as the last child of the container
  `rename` - the new name for the element, or `null` if the element retains its name
  `replace` - `true` if any existing child in the container with the target name should be replaced, and `false` to throw an exception in the event of a name collision
  `monitor` - a progress monitor
Throws:
  `CModelException` - if this element could not be moved. Reasons include:
  - This C element, container element, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)
  - A `CoreException` occurred while updating an underlying resource
  - The container is of an incompatible type (INVALID_DESTINATION)
  - The sibling is not a child of the given container (INVALID_SIBLING)
  - The new name is invalid (INVALID_NAME)
  - A child in the container already exists with the same name (NAME_COLLISION) and `replace` has been specified as `false`
  - The container or this element is read-only (READ_ONLY)
  `IllegalArgumentException` - if container is `null`

#### rename

    void rename(String name,
                boolean replace,
                IProgressMonitor monitor)
         throws CModelException

Renames this element to the given name.

Parameters:
  `name` - the new name for the element
  `replace` - `true` if any existing element with the target name should be replaced, and `false` to throw an exception in the event of a name collision
  `monitor` - a progress monitor
Throws:
  `CModelException` - if this element could not be renamed. Reasons include:
  - This C element does not exist (ELEMENT_DOES_NOT_EXIST)
  - A `CoreException` occurred while updating an underlying resource
  - The new name is invalid (INVALID_NAME)
  - A child in the container already exists with the same name (NAME_COLLISION) and `replace` has been specified as `false`
  - This element is read-only (READ_ONLY)