org.eclipse.wst.jsdt.core

## Interface IJavaScriptElementDelta

    public interface IJavaScriptElementDelta

A JavaScript element delta describes changes in JavaScript element between two discrete points in time. Given a delta, clients can access the element that has changed, and any children that have changed.

Deltas have a different status depending on the kind of change they represent. The list below summarizes each status (as returned by `getKind()`) and its meaning (see individual constants for a more detailled description):

- `ADDED` - The element described by the delta has been added.
- `REMOVED` - The element described by the delta has been removed.
- `CHANGED` - The element described by the delta has been changed in some way. Specification of the type of change is provided by `getFlags()` which returns the following values:
  - `F_ADDED_TO_CLASSPATH` - A includepath entry corresponding to the element has been added to the project's includepath. This flag is only valid if the element is an `IPackageFragmentRoot`.
  - `F_ARCHIVE_CONTENT_CHANGED` - The contents of an archive has changed in some way. This flag is only valid if the element is an `IPackageFragmentRoot` which is an archive.
  - `F_CHILDREN` - A child of the element has changed in some way. This flag is only valid if the element is an `IParent`.
  - `#F_INCLUDEPATH_REORDER` - A Includepath entry corresponding to the element has changed position in the project's Includepath. This flag is only valid if the element is an `IPackageFragmentRoot`.
  - `F_CLOSED` - The underlying `org.eclipse.core.resources.IProject` has been closed. This flag is only valid if the element is an `IJavaScriptProject`.
  - `F_CONTENT` - The contents of the element have been altered. This flag is only valid for elements which correspond to files.
  - `F_FINE_GRAINED` - The delta is a fine-grained delta, that is, an analysis down to the members level was done to determine if there were structural changes to members of the element.
  - `F_MODIFIERS` - The modifiers on the element have changed in some way. This flag is only valid if the element is an `IMember`.
  - `F_OPENED` - The underlying `org.eclipse.core.resources.IProject` has been opened. This flag is only valid if the element is an `IJavaScriptProject`.
  - `F_REMOVED_FROM_CLASSPATH` - A includepath entry corresponding to the element has been removed from the project's includepath. This flag is only valid if the element is an `IPackageFragmentRoot`.
  - `F_SOURCEATTACHED` - The source attachment path or the source attachment root path of a includepath entry corresponding to the element was added. This flag is only valid if the element is an `IPackageFragmentRoot`.
  - `F_SOURCEDETACHED` - The source attachment path or the source attachment root path of a includepath entry corresponding to the element was removed. This flag is only valid if the element is an `IPackageFragmentRoot`.
  - `F_SUPER_TYPES` - One of the supertypes of an `IType` has changed
  .

Move operations are indicated by other change flags, layered on top of the change flags described above. If element A is moved to become B, the delta for the change in A will have status `REMOVED`, with change flag `F_MOVED_TO`. In this case, `getMovedToElement()` on delta A will return the handle for B. The delta for B will have status `ADDED`, with change flag `F_MOVED_FROM`, and `getMovedFromElement()` on delta B will return the handle for A. (Note, the handle to A in this case represents an element that no longer exists).

Note that the move change flags only describe the changes to a single element, they do not imply anything about the parent or children of the element.

The `F_ADDED_TO_CLASSPATH`, `F_REMOVED_FROM_CLASSPATH` and `#F_INCLUDEPATH_REORDER` flags are triggered by changes to a project's includepath. They do not mean that the underlying resource was added, removed or changed. For example, if a project P already contains a folder src, then adding a includepath entry with the 'P/src' path to the project's includepath will result in an `IJavaScriptElementDelta` with the `F_ADDED_TO_CLASSPATH` flag for the `IPackageFragmentRoot` P/src. On the contrary, if a resource is physically added, removed or changed and this resource corresponds to a includepath entry of the project, then an `IJavaScriptElementDelta` with the `ADDED`, `REMOVED`, or `CHANGED` kind will be fired.

Note that when a source attachment path or a source attachment root path is changed, then the flags of the delta contain both `F_SOURCEATTACHED` and `F_SOURCEDETACHED`.

No assumptions should be made on whether the javaScript element delta tree is rooted at the `IJavaScriptModel` level or not.

`IJavaScriptElementDelta` object are not valid outside the dynamic scope of the notification.

This interface is not intended to be implemented by clients.

Provisional API: This class/interface is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.

### Field Summary

Fields
`static int` `ADDED` Status constant indicating that the element has been added.
`static int` `CHANGED` Status constant indicating that the element has been changed, as described by the change flags.
`static int` `F_ADDED_TO_CLASSPATH` Change flag indicating that a includepath entry corresponding to the element has been added to the project's includepath.
`static int` `F_ARCHIVE_CONTENT_CHANGED` Change flag indicating that the element's archive content on the includepath has changed.
`static int` `F_AST_AFFECTED` Change flag indicating that a reconcile operation has affected the javaScript unit AST created in a previous reconcile operation.
`static int` `F_CATEGORIES` Change flag indicating that the categories of the element have changed.
`static int` `F_CHILDREN` Change flag indicating that there are changes to the children of the element.
`static int` `F_CLOSED` Change flag indicating that the underlying `org.eclipse.core.resources.IProject` has been closed.
`static int` `F_CONTENT` Change flag indicating that the content of the element has changed.
`static int` `F_FINE_GRAINED` Change flag indicating that this is a fine-grained delta, that is, an analysis down to the members level was done to determine if there were structural changes to members.
`static int` `F_INCLUDEPATH_CHANGED` Change flag indicating that the raw includepath (or the output folder) of a project has changed.
`static int` `F_MODIFIERS` Change flag indicating that the modifiers of the element have changed.
`static int` `F_MOVED_FROM` Change flag indicating that the element was moved from another location.
`static int` `F_MOVED_TO` Change flag indicating that the element was moved to another location.
`static int` `F_OPENED` Change flag indicating that the underlying `org.eclipse.core.resources.IProject` has been opened.
`static int` `F_PRIMARY_RESOURCE` Change flag indicating that the resource of a primary javaScript unit has changed.
`static int` `F_PRIMARY_WORKING_COPY` Change flag indicating that a javaScript unit has become a primary working copy, or that a primary working copy has reverted to a javaScript unit.
`static int` `F_REMOVED_FROM_CLASSPATH` Change flag indicating that a includepath entry corresponding to the element has been removed from the project's includepath.
`static int` `F_REORDER` Change flag indicating that the element has changed position relatively to its siblings.
`static int` `F_SOURCEATTACHED` Change flag indicating that the source attachment path or the source attachment root path of a includepath entry corresponding to the element was added.
`static int` `F_SOURCEDETACHED` Change flag indicating that the source attachment path or the source attachment root path of a includepath entry corresponding to the element was removed.
`static int` `F_SUPER_TYPES` Change flag indicating that one of the supertypes of an `IType` has changed.
`static int` `REMOVED` Status constant indicating that the element has been removed.

### Method Summary

All Methods Instance Methods Abstract Methods
`IJavaScriptElementDelta[]` `getAddedChildren()` Returns deltas for the children that have been added.
`IJavaScriptElementDelta[]` `getAffectedChildren()` Returns deltas for the affected (added, removed, or changed) children.
`IJavaScriptElementDelta[]` `getChangedChildren()` Returns deltas for the children which have changed.
`IJavaScriptElement` `getElement()` Returns the element that this delta describes a change to.
`int` `getFlags()` Returns flags that describe how an element has changed.
`JavaScriptUnit` `getJavaScriptUnitAST()` Returns the javaScript unit AST created by the last reconcile operation on this delta's element.
`int` `getKind()` Returns the kind of this delta - one of `ADDED`, `REMOVED`, or `CHANGED`.
`IJavaScriptElement` `getMovedFromElement()` Returns an element describing this element before it was moved to its current location, or `null` if the `F_MOVED_FROM` change flag is not set.
`IJavaScriptElement` `getMovedToElement()` Returns an element describing this element in its new location, or `null` if the `F_MOVED_TO` change flag is not set.
`IJavaScriptElementDelta[]` `getRemovedChildren()` Returns deltas for the children which have been removed.
`IResourceDelta[]` `getResourceDeltas()` Returns the collection of resource deltas.

### Field Detail

#### ADDED

    static final int ADDED

Status constant indicating that the element has been added. Note that an added javaScript element delta has no children, as they are all implicitely added.

See Also:
  Constant Field Values

#### REMOVED

    static final int REMOVED

Status constant indicating that the element has been removed. Note that a removed javaScript element delta has no children, as they are all implicitely removed.

See Also:
  Constant Field Values

#### CHANGED

    static final int CHANGED

Status constant indicating that the element has been changed, as described by the change flags.

See Also:
  `getFlags()`, Constant Field Values

#### F_CONTENT

    static final int F_CONTENT

Change flag indicating that the content of the element has changed. This flag is only valid for elements which correspond to files.

See Also:
  Constant Field Values

#### F_MODIFIERS

    static final int F_MODIFIERS

Change flag indicating that the modifiers of the element have changed. This flag is only valid if the element is an `IMember`.

See Also:
  Constant Field Values

#### F_CHILDREN

    static final int F_CHILDREN

Change flag indicating that there are changes to the children of the element. This flag is only valid if the element is an `IParent`.

See Also:
  Constant Field Values

#### F_MOVED_FROM

    static final int F_MOVED_FROM

Change flag indicating that the element was moved from another location. The location of the old element can be retrieved using `getMovedFromElement()`.

See Also:
  Constant Field Values

#### F_MOVED_TO

    static final int F_MOVED_TO

Change flag indicating that the element was moved to another location. The location of the new element can be retrieved using `getMovedToElement()`.

See Also:
  Constant Field Values

#### F_ADDED_TO_CLASSPATH

    static final int F_ADDED_TO_CLASSPATH

Change flag indicating that a includepath entry corresponding to the element has been added to the project's includepath. This flag is only valid if the element is an `IPackageFragmentRoot`.

See Also:
  Constant Field Values

#### F_REMOVED_FROM_CLASSPATH

    static final int F_REMOVED_FROM_CLASSPATH

Change flag indicating that a includepath entry corresponding to the element has been removed from the project's includepath. This flag is only valid if the element is an `IPackageFragmentRoot`.

See Also:
  Constant Field Values

#### F_REORDER

    static final int F_REORDER

Change flag indicating that the element has changed position relatively to its siblings. If the element is an `IPackageFragmentRoot`, a includepath entry corresponding to the element has changed position in the project's includepath.

See Also:
  Constant Field Values

#### F_OPENED

    static final int F_OPENED

Change flag indicating that the underlying `org.eclipse.core.resources.IProject` has been opened. This flag is only valid if the element is an `IJavaScriptProject`.

See Also:
  Constant Field Values

#### F_CLOSED

    static final int F_CLOSED

Change flag indicating that the underlying `org.eclipse.core.resources.IProject` has been closed. This flag is only valid if the element is an `IJavaScriptProject`.

See Also:
  Constant Field Values

#### F_SUPER_TYPES

    static final int F_SUPER_TYPES

Change flag indicating that one of the supertypes of an `IType` has changed.

See Also:
  Constant Field Values

#### F_SOURCEATTACHED

    static final int F_SOURCEATTACHED

Change flag indicating that the source attachment path or the source attachment root path of a includepath entry corresponding to the element was added. This flag is only valid if the element is an `IPackageFragmentRoot`.

See Also:
  Constant Field Values

#### F_SOURCEDETACHED

    static final int F_SOURCEDETACHED

Change flag indicating that the source attachment path or the source attachment root path of a includepath entry corresponding to the element was removed. This flag is only valid if the element is an `IPackageFragmentRoot`.

See Also:
  Constant Field Values

#### F_FINE_GRAINED

    static final int F_FINE_GRAINED

Change flag indicating that this is a fine-grained delta, that is, an analysis down to the members level was done to determine if there were structural changes to members.

Clients can use this flag to find out if a javaScript unit that have a `F_CONTENT` change should assume that there are no finer grained changes (`F_FINE_GRAINED` is set) or if finer grained changes were not considered (`F_FINE_GRAINED` is not set).

See Also:
  Constant Field Values

#### F_ARCHIVE_CONTENT_CHANGED

    static final int F_ARCHIVE_CONTENT_CHANGED

Change flag indicating that the element's archive content on the includepath has changed. This flag is only valid if the element is an `IPackageFragmentRoot` which is an archive.

See Also:
  `IPackageFragmentRoot.isArchive()`, Constant Field Values

#### F_PRIMARY_WORKING_COPY

    static final int F_PRIMARY_WORKING_COPY

Change flag indicating that a javaScript unit has become a primary working copy, or that a primary working copy has reverted to a javaScript unit. This flag is only valid if the element is an `IJavaScriptUnit`.

See Also:
  Constant Field Values

#### F_INCLUDEPATH_CHANGED

    static final int F_INCLUDEPATH_CHANGED

Change flag indicating that the raw includepath (or the output folder) of a project has changed. This flag is only valid if the element is an `IJavaScriptProject`.

See Also:
  Constant Field Values

#### F_PRIMARY_RESOURCE

    static final int F_PRIMARY_RESOURCE

Change flag indicating that the resource of a primary javaScript unit has changed. This flag is only valid if the element is a primary `IJavaScriptUnit`.

See Also:
  Constant Field Values

#### F_AST_AFFECTED

    static final int F_AST_AFFECTED

Change flag indicating that a reconcile operation has affected the javaScript unit AST created in a previous reconcile operation. Use `getJavaScriptUnitAST()` to retrieve the AST (if any is available). This flag is only valid if the element is an `IJavaScriptUnit` in working copy mode.

See Also:
  Constant Field Values

#### F_CATEGORIES

    static final int F_CATEGORIES

Change flag indicating that the categories of the element have changed. This flag is only valid if the element is an `IMember`.

See Also:
  Constant Field Values

### Method Detail

#### getAddedChildren

    IJavaScriptElementDelta[] getAddedChildren()

Returns deltas for the children that have been added.

Returns:
  deltas for the children that have been added

#### getAffectedChildren

    IJavaScriptElementDelta[] getAffectedChildren()

Returns deltas for the affected (added, removed, or changed) children.

Returns:
  deltas for the affected (added, removed, or changed) children

#### getJavaScriptUnitAST

    JavaScriptUnit getJavaScriptUnitAST()

Returns the javaScript unit AST created by the last reconcile operation on this delta's element. This returns a non-null value if and only if:

- the last reconcile operation on this working copy requested an AST
- this delta's element is an `IJavaScriptUnit` in working copy mode
- the delta comes from a `ElementChangedEvent.POST_RECONCILE` event

Returns:
  the AST created during the last reconcile operation
See Also:
  `IJavaScriptUnit#reconcile(int, boolean, WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)`, `F_AST_AFFECTED`

#### getChangedChildren

    IJavaScriptElementDelta[] getChangedChildren()

Returns deltas for the children which have changed.

Returns:
  deltas for the children which have changed

#### getElement

    IJavaScriptElement getElement()

Returns the element that this delta describes a change to.

Returns:
  the element that this delta describes a change to

#### getFlags

    int getFlags()

Returns flags that describe how an element has changed. Such flags should be tested using the `&` operand. For example:

     if ((delta.getFlags() & IJavaScriptElementDelta.F_CONTENT) != 0) {
            // the delta indicates a content change
     }

Returns:
  flags that describe how an element has changed

#### getKind

    int getKind()

Returns the kind of this delta - one of `ADDED`, `REMOVED`, or `CHANGED`.

Returns:
  the kind of this delta

#### getMovedFromElement

    IJavaScriptElement getMovedFromElement()

Returns an element describing this element before it was moved to its current location, or `null` if the `F_MOVED_FROM` change flag is not set.

Returns:
  an element describing this element before it was moved to its current location, or `null` if the `F_MOVED_FROM` change flag is not set

#### getMovedToElement

    IJavaScriptElement getMovedToElement()

Returns an element describing this element in its new location, or `null` if the `F_MOVED_TO` change flag is not set.

Returns:
  an element describing this element in its new location, or `null` if the `F_MOVED_TO` change flag is not set

#### getRemovedChildren

    IJavaScriptElementDelta[] getRemovedChildren()

Returns deltas for the children which have been removed.

Returns:
  deltas for the children which have been removed

#### getResourceDeltas

    IResourceDelta[] getResourceDeltas()

Returns the collection of resource deltas.

Note that resource deltas, like JavaScript element deltas, are generally only valid for the dynamic scope of an event notification. Clients must not hang on to these objects.

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