Package org.eclipse.cdt.core.model

# Interface ICElement

All Superinterfaces:
  `org.eclipse.core.runtime.IAdaptable`

All Known Subinterfaces:
  `IArchive`, `IArchiveContainer`, `IAsmLabel`, `IBinary`, `IBinaryContainer`, `IBinaryElement`, `IBinaryFunction`, `IBinaryModule`, `IBinaryVariable`, `ICContainer`, `ICModel`, `IConcept`, `IContributedCElement`, `ICProject`, `IDeclaration`, `IEnumeration`, `IEnumerator`, `IField`, `IFunction`, `IFunctionDeclaration`, `IFunctionTemplate`, `IFunctionTemplateDeclaration`, `IInclude`, `IIncludeReference`, `ILibraryReference`, `IMacro`, `IMember`, `IMethod`, `IMethodDeclaration`, `IMethodTemplate`, `IMethodTemplateDeclaration`, `INamespace`, `IPragma`, `ISourceRoot`, `IStructure`, `IStructureDeclaration`, `IStructureTemplate`, `IStructureTemplateDeclaration`, `ITranslationUnit`, `ITypeDef`, `IUsing`, `IVariable`, `IVariableDeclaration`, `IWorkingCopy`

public interface ICElement extends org.eclipse.core.runtime.IAdaptable
Common protocol for all elements provided by the C model.

Restriction:
  This interface is not intended to be implemented by clients.
Restriction:
  This interface is not intended to be extended by clients.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`ASM_LABEL`
Assembly label.
`static final int`
`C_ARCHIVE`
`static final int`
`C_BINARY`
`static final int`
`C_CCONTAINER`
Constant representing a folder (ICContainer object).
`static final int`
`C_CLASS`
Constant representing a class structure.
`static final int`
`C_CLASS_CTOR`
Deprecated.
use `IMethodDeclaration.isConstructor()`
`static final int`
`C_CLASS_DECLARATION`
Declaration of a class without the definition.
`static final int`
`C_CLASS_DTOR`
Deprecated.
use `IMethodDeclaration.isDestructor()`
`static final int`
`C_CONCEPT`
a C++ concept.
`static final int`
`C_DEDUCTION_GUIDE`
a C++ deduction guide.
`static final int`
`C_DEDUCTION_GUIDE_TEMPLATE`
a C++ deduction guide template.
`static final int`
`C_ENUMERATION`
Enumeration.
`static final int`
`C_ENUMERATOR`
Enumerator.
`static final int`
`C_FIELD`
A Field definition part of a structure(class, struct, union).
`static final int`
`C_FUNCTION`
a C/C++ function definition.
`static final int`
`C_FUNCTION_DECLARATION`
a C/C++ function prototype.
`static final int`
`C_INCLUDE`
Preprocessor #include directive.
`static final int`
`C_MACRO`
A preprocessor macro.
`static final int`
`C_METHOD`
A method definition part of a structure(class, struct, union).
`static final int`
`C_METHOD_DECLARATION`
A method declaration part of a structure(class, struct, union).
`static final int`
`C_MODEL`
Constant representing a C Root workspace (IWorkspaceRoot object).
`static final int`
`C_NAMESPACE`
Namespace.
`static final int`
`C_PRAGMA`
A pragma statement.
`static final int`
`C_PROJECT`
Constant representing a C project (IProject object).
`static final int`
`C_STORAGE_EXTERN`
Deprecated.
not used anymore
`static final int`
`C_STORAGE_STATIC`
Deprecated.
use `IDeclaration.isStatic()`
`static final int`
`C_STRUCT`
Constant representing a struct structure.
`static final int`
`C_STRUCT_DECLARATION`
Declaration of a structure without the definition.
`static final int`
`C_TEMPLATE_CLASS`
C++ template class with definition.
`static final int`
`C_TEMPLATE_CLASS_DECLARATION`
C++ template class declaration without a definition.
`static final int`
`C_TEMPLATE_FUNCTION`
C++ template function.
`static final int`
`C_TEMPLATE_FUNCTION_DECLARATION`
C++ template function declaration.
`static final int`
`C_TEMPLATE_METHOD`
C++ template method.
`static final int`
`C_TEMPLATE_METHOD_DECLARATION`
C++ template method.
`static final int`
`C_TEMPLATE_STRUCT`
C++ template struct.
`static final int`
`C_TEMPLATE_STRUCT_DECLARATION`
C++ template struct.
`static final int`
`C_TEMPLATE_UNION`
C++ template union.
`static final int`
`C_TEMPLATE_UNION_DECLARATION`
C++ template union.
`static final int`
`C_TEMPLATE_VARIABLE`
C++ template variable.
`static final int`
`C_TYPEDEF`
a Typedef.
`static final int`
`C_UNION`
Constant representing a union structure.
`static final int`
`C_UNION_DECLARATION`
Declaration of a union without the definition.
`static final int`
`C_UNIT`
Constant representing a C/C++ children of a Translation Unit
`static final int`
`C_UNKNOWN_DECLARATION`
An unknown ICElement.
`static final int`
`C_USING`
Using.
`static final int`
`C_VARIABLE`
Global variable.
`static final int`
`C_VARIABLE_DECLARATION`
variable Declaration.
`static final int`
`C_VARIABLE_LOCAL`
Local Variable.
`static final int`
`C_VCONTAINER`
Virtual container serving as a place holder.
`static final int`
`CPP_FRIEND`
Deprecated.
use `IMethodDeclaration.isFriend()`
`static final int`
`CPP_PRIVATE`
Deprecated.
use `IMember.getVisibility()`
`static final int`
`CPP_PROTECTED`
Deprecated.
use `IMember.getVisibility()`
`static final int`
`CPP_PUBLIC`
Deprecated.
use `IMember.getVisibility()`
`static final ICElement[]`
`EMPTY_ARRAY`

## Method Summary

Modifier and Type
Method
Description
`void`
`accept(ICElementVisitor visitor)`
Accept a visitor and walk the ICElement tree with it.
`boolean`
`exists()`
Returns whether this C element exists in the model.
`ICElement`
`getAncestor(int ancestorType)`
Returns the first ancestor of this C element that has the given type.
`ICModel`
`getCModel()`
Returns the C model.
`ICProject`
`getCProject()`
Returns the C project this element is contained in, or `null` if this element is not contained in any C project
`String`
`getElementName()`
Returns the name of this element.
`int`
`getElementType()`
Returns this element's kind encoded as an integer.
`String`
`getHandleIdentifier()`
Returns a string representation of this element handle.
`URI`
`getLocationURI()`
Returns an absolute URI corresponding to the innermost file enclosing this element.
`ICElement`
`getParent()`
Returns the element directly containing this element, or `null` if this element has no parent.
`org.eclipse.core.runtime.IPath`
`getPath()`
Returns the path to the innermost resource enclosing this element.
`org.eclipse.core.resources.IResource`
`getResource()`
Returns the corresponding resource for this element, or `null` if this element does not have a corresponding resource.
`org.eclipse.core.resources.IResource`
`getUnderlyingResource()`
Returns the underlying resource that contains this element, or `null` if this element is not contained in a resource.
`boolean`
`isReadOnly()`
Returns whether this C element is read-only.
`boolean`
`isStructureKnown()`
Returns whether the structure of this element is known.

### Methods inherited from interface org.eclipse.core.runtime.IAdaptable

`getAdapter`

## Field Details

### EMPTY_ARRAY

static final ICElement[] EMPTY_ARRAY

Since:
  5.6

### C_MODEL

static final int C_MODEL
Constant representing a C Root workspace (IWorkspaceRoot object). A C element with this type can be safely cast to `ICModel`.

See Also:
  - Constant Field Values

### C_PROJECT

static final int C_PROJECT
Constant representing a C project (IProject object). A C element with this type can be safely cast to `ICProject`.

See Also:
  - Constant Field Values

### C_CCONTAINER

static final int C_CCONTAINER
Constant representing a folder (ICContainer object). A C element with this type can be safely cast to `ICContainer`.

See Also:
  - Constant Field Values

### C_BINARY

static final int C_BINARY

See Also:
  - Constant Field Values

### C_ARCHIVE

static final int C_ARCHIVE

See Also:
  - Constant Field Values

### C_VCONTAINER

static final int C_VCONTAINER
Virtual container serving as a place holder.

See Also:
  - Constant Field Values

### C_UNIT

static final int C_UNIT
Constant representing a C/C++ children of a Translation Unit

See Also:
  - Constant Field Values

### C_NAMESPACE

static final int C_NAMESPACE
Namespace.

See Also:
  - Constant Field Values

### C_USING

static final int C_USING
Using.

See Also:
  - Constant Field Values

### C_ENUMERATION

static final int C_ENUMERATION
Enumeration.

See Also:
  - Constant Field Values

### C_CLASS_DECLARATION

static final int C_CLASS_DECLARATION
Declaration of a class without the definition. class C;

See Also:
  - Constant Field Values

### C_CLASS

static final int C_CLASS
Constant representing a class structure.

See Also:
  - Constant Field Values

### C_STRUCT_DECLARATION

static final int C_STRUCT_DECLARATION
Declaration of a structure without the definition. struct C;

See Also:
  - Constant Field Values

### C_STRUCT

static final int C_STRUCT
Constant representing a struct structure.

See Also:
  - Constant Field Values

### C_UNION_DECLARATION

static final int C_UNION_DECLARATION
Declaration of a union without the definition. struct C;

See Also:
  - Constant Field Values

### C_UNION

static final int C_UNION
Constant representing a union structure.

See Also:
  - Constant Field Values

### C_METHOD

static final int C_METHOD
A method definition part of a structure(class, struct, union).

See Also:
  - Constant Field Values

### C_METHOD_DECLARATION

static final int C_METHOD_DECLARATION
A method declaration part of a structure(class, struct, union).

See Also:
  - Constant Field Values

### C_FIELD

static final int C_FIELD
A Field definition part of a structure(class, struct, union).

See Also:
  - Constant Field Values

### C_FUNCTION_DECLARATION

static final int C_FUNCTION_DECLARATION
a C/C++ function prototype.

See Also:
  - Constant Field Values

### C_FUNCTION

static final int C_FUNCTION
a C/C++ function definition.

See Also:
  - Constant Field Values

### C_INCLUDE

static final int C_INCLUDE
Preprocessor #include directive.

See Also:
  - Constant Field Values

### C_VARIABLE

static final int C_VARIABLE
Global variable.

See Also:
  - Constant Field Values

### C_VARIABLE_DECLARATION

static final int C_VARIABLE_DECLARATION
variable Declaration.

See Also:
  - Constant Field Values

### C_VARIABLE_LOCAL

static final int C_VARIABLE_LOCAL
Local Variable.

See Also:
  - Constant Field Values

### C_MACRO

static final int C_MACRO
A preprocessor macro.

See Also:
  - Constant Field Values

### C_TYPEDEF

static final int C_TYPEDEF
a Typedef.

See Also:
  - Constant Field Values

### C_ENUMERATOR

static final int C_ENUMERATOR
Enumerator.

See Also:
  - Constant Field Values

### C_TEMPLATE_CLASS_DECLARATION

static final int C_TEMPLATE_CLASS_DECLARATION
C++ template class declaration without a definition.

See Also:
  - Constant Field Values

### C_TEMPLATE_CLASS

static final int C_TEMPLATE_CLASS
C++ template class with definition.

See Also:
  - Constant Field Values

### C_TEMPLATE_STRUCT_DECLARATION

static final int C_TEMPLATE_STRUCT_DECLARATION
C++ template struct.

See Also:
  - Constant Field Values

### C_TEMPLATE_STRUCT

static final int C_TEMPLATE_STRUCT
C++ template struct.

See Also:
  - Constant Field Values

### C_TEMPLATE_UNION_DECLARATION

static final int C_TEMPLATE_UNION_DECLARATION
C++ template union.

See Also:
  - Constant Field Values

### C_TEMPLATE_UNION

static final int C_TEMPLATE_UNION
C++ template union.

See Also:
  - Constant Field Values

### C_TEMPLATE_FUNCTION_DECLARATION

static final int C_TEMPLATE_FUNCTION_DECLARATION
C++ template function declaration.

See Also:
  - Constant Field Values

### C_TEMPLATE_FUNCTION

static final int C_TEMPLATE_FUNCTION
C++ template function.

See Also:
  - Constant Field Values

### C_TEMPLATE_METHOD_DECLARATION

static final int C_TEMPLATE_METHOD_DECLARATION
C++ template method.

See Also:
  - Constant Field Values

### C_TEMPLATE_METHOD

static final int C_TEMPLATE_METHOD
C++ template method.

See Also:
  - Constant Field Values

### C_TEMPLATE_VARIABLE

static final int C_TEMPLATE_VARIABLE
C++ template variable.

See Also:
  - Constant Field Values

### C_UNKNOWN_DECLARATION

static final int C_UNKNOWN_DECLARATION
An unknown ICElement. Mainly used to determine what elements are not yet implemented. i.e. the new DOM Parser supports open declaration on labels, while the old parser did not

See Also:
  - Constant Field Values

### ASM_LABEL

static final int ASM_LABEL
Assembly label.

Since:
  5.0
See Also:
  - Constant Field Values

### C_PRAGMA

static final int C_PRAGMA
A pragma statement.

Since:
  7.3
See Also:
  - Constant Field Values

### C_DEDUCTION_GUIDE

static final int C_DEDUCTION_GUIDE
a C++ deduction guide.

Since:
  9.3
See Also:
  - Constant Field Values

### C_DEDUCTION_GUIDE_TEMPLATE

static final int C_DEDUCTION_GUIDE_TEMPLATE
a C++ deduction guide template.

Since:
  9.3
See Also:
  - Constant Field Values

### C_CONCEPT

static final int C_CONCEPT
a C++ concept.

Since:
  9.3
See Also:
  - Constant Field Values

### C_CLASS_CTOR

@Deprecated static final int C_CLASS_CTOR
Deprecated.
use `IMethodDeclaration.isConstructor()`

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

### C_CLASS_DTOR

@Deprecated static final int C_CLASS_DTOR
Deprecated.
use `IMethodDeclaration.isDestructor()`

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

### C_STORAGE_STATIC

@Deprecated static final int C_STORAGE_STATIC
Deprecated.
use `IDeclaration.isStatic()`

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

### C_STORAGE_EXTERN

@Deprecated static final int C_STORAGE_EXTERN
Deprecated.
not used anymore

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

### CPP_PRIVATE

@Deprecated static final int CPP_PRIVATE
Deprecated.
use `IMember.getVisibility()`

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

### CPP_PUBLIC

@Deprecated static final int CPP_PUBLIC
Deprecated.
use `IMember.getVisibility()`

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

### CPP_PROTECTED

@Deprecated static final int CPP_PROTECTED
Deprecated.
use `IMember.getVisibility()`

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

### CPP_FRIEND

@Deprecated static final int CPP_FRIEND
Deprecated.
use `IMethodDeclaration.isFriend()`

See Also:
  - Constant Field Values
Restriction:
  This field is not intended to be referenced by clients.

## Method Details

### exists

boolean exists()
Returns whether this C element exists in the model.

Returns:
  `true` if this element exists in the C model

### getAncestor

ICElement getAncestor(int ancestorType)
Returns the first ancestor of this C element that has the given type. Returns `null` if no such an ancestor can be found. This is a handle-only method.

Parameters:
  `ancestorType` - the given type
Returns:
  the first ancestor of this C element that has the given type, `null` if no such an ancestor can be found
Since:
  2.0

### getElementName

String getElementName()
Returns the name of this element.

Returns:
  the element name

### getElementType

int getElementType()
Returns this element's kind encoded as an integer. This is a handle-only method.

Returns:
  the kind of element; one of the constants declared in `ICElement`

### getCModel

ICModel getCModel()
Returns the C model.

Returns:
  the C model

### getCProject

ICProject getCProject()
Returns the C project this element is contained in, or `null` if this element is not contained in any C project

Returns:
  the containing C project, or `null` if this element is not contained in a C project

### getParent

ICElement getParent()
Returns the element directly containing this element, or `null` if this element has no parent.

Returns:
  the parent element, or `null` if this element has no parent

### getPath

org.eclipse.core.runtime.IPath getPath()
Returns the path to the innermost resource enclosing this element. If this element is not included in an external archive, the path returned is the full, absolute path to the underlying resource, relative to the workbench. If this element is included in an external archive, the path returned is the absolute path to the archive in the file system. This is a handle-only method.

### getLocationURI

URI getLocationURI()
Returns an absolute URI corresponding to the innermost file enclosing this element.

Returns:
  the URI corresponding to the location
Since:
  5.0

### getUnderlyingResource

org.eclipse.core.resources.IResource getUnderlyingResource()
Returns the underlying resource that contains this element, or `null` if this element is not contained in a resource.

Returns:
  the underlying resource, or `null` if none

### getResource

org.eclipse.core.resources.IResource getResource()
Returns the corresponding resource for this element, or `null` if this element does not have a corresponding resource.

Returns:
  the corresponding resource, or `null` if none

### isReadOnly

boolean isReadOnly()
Returns whether this C element is read-only. An element is read-only if its structure cannot be modified by the C model.

Returns:
  `true` if this element is read-only

### isStructureKnown

boolean isStructureKnown() throws CModelException
Returns whether the structure of this element is known. For example, for a translation unit that could not be parsed, `false` is returned. If the structure of an element is unknown, navigations will return reasonable defaults. For example, `getChildren` will return an empty collection.

Note: This does not imply anything about consistency with the underlying resource/buffer contents.

Returns:
  `true` if the structure of this element is known
Throws:
  `CModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource

### accept

void accept(ICElementVisitor visitor) throws org.eclipse.core.runtime.CoreException
Accept a visitor and walk the ICElement tree with it.

Parameters:
  `visitor` -
Throws:
  `CModelException`
  `org.eclipse.core.runtime.CoreException`

### getHandleIdentifier

String getHandleIdentifier()
Returns a string representation of this element handle. The format of the string is not specified; however, the identifier is stable across workspace sessions, and can be used to recreate this handle via the `CoreModel.create(String)` method.

Some element types, like binaries, do not support handle identifiers and return `null`.

Returns:
  the string handle identifier, or `null` if the element type is not supported
Since:
  5.0
See Also:
  - `CoreModel.create(java.lang.String)`