/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpdt.core; import org.eclipse.core.resources.IResourceDelta; /** * A Java element delta describes changes in Java 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 classpath entry corresponding to
* the element has been added to the project's classpath. 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_CLASSPATH_REORDER
- A classpath entry corresponding to
* the element has changed position in the project's classpath. This flag is
* only valid if the element is an IPackageFragmentRoot
.F_CLOSED
- The underlying IProject
has
* been closed. This flag is only valid if the element is an
* IJavaProject
.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 IProject
has
* been opened. This flag is only valid if the element is an
* IJavaProject
.F_REMOVED_FROM_CLASSPATH
- A classpath entry
* corresponding to the element has been removed from the project's classpath.
* 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 classpath 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 classpath 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_CLASSPATH_REORDER
* flags are triggered by changes to a project's classpath. 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 classpath entry with
* the 'P/src' path to the project's classpath will result in an
* IJavaElementDelta
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 classpath entry of the project, then an
* IJavaElementDelta
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_SOURCEDETTACHED
.
*
* No assumptions should be made on whether the java element delta tree is
* rooted at the IJavaModel
level or not.
*
* IJavaElementDelta
object are not valid outside the dynamic
* scope of the notification.
*
* This interface is not intended to be implemented by clients. *
*/ public interface IJavaElementDelta { /** * Status constant indicating that the element has been added. Note that an * added java element delta has no children, as they are all implicitely * added. */ public int ADDED = 1; /** * Status constant indicating that the element has been removed. Note that a * removed java element delta has no children, as they are all implicitely * removed. */ public int REMOVED = 2; /** * Status constant indicating that the element has been changed, as * described by the change flags. * * @see #getFlags */ public int CHANGED = 4; /** * Change flag indicating that the content of the element has changed. This * flag is only valid for elements which correspond to files. */ public int F_CONTENT = 0x0001; /** * Change flag indicating that the modifiers of the element have changed. * This flag is only valid if the element is anIMember
.
*/
public int F_MODIFIERS = 0x0002;
/**
* Change flag indicating that there are changes to the children of the
* element. This flag is only valid if the element is an
* IParent
.
*/
public int F_CHILDREN = 0x0008;
/**
* Change flag indicating that the element was moved from another location.
* The location of the old element can be retrieved using
* getMovedFromElement
.
*/
public int F_MOVED_FROM = 0x0010;
/**
* Change flag indicating that the element was moved to another location.
* The location of the new element can be retrieved using
* getMovedToElement
.
*/
public int F_MOVED_TO = 0x0020;
/**
* Change flag indicating that a classpath entry corresponding to the
* element has been added to the project's classpath. This flag is only
* valid if the element is an IPackageFragmentRoot
.
*/
public int F_ADDED_TO_CLASSPATH = 0x0040;
/**
* Change flag indicating that a classpath entry corresponding to the
* element has been removed from the project's classpath. This flag is only
* valid if the element is an IPackageFragmentRoot
.
*/
public int F_REMOVED_FROM_CLASSPATH = 0x0080;
/**
* Change flag indicating that a classpath entry corresponding to the
* element has changed position in the project's classpath. This flag is
* only valid if the element is an IPackageFragmentRoot
.
*
* @deprecated Use F_REORDER instead.
*/
public int F_CLASSPATH_REORDER = 0x0100;
/**
* Change flag indicating that the element has changed position relatively
* to its siblings. If the element is an IPackageFragmentRoot
,
* a classpath entry corresponding to the element has changed position in
* the project's classpath.
*
* @since 2.1
*/
public int F_REORDER = 0x0100;
/**
* Change flag indicating that the underlying IProject
has
* been opened. This flag is only valid if the element is an
* IJavaProject
.
*/
public int F_OPENED = 0x0200;
/**
* Change flag indicating that the underlying IProject
has
* been closed. This flag is only valid if the element is an
* IJavaProject
.
*/
public int F_CLOSED = 0x0400;
/**
* Change flag indicating that one of the supertypes of an
* IType
has changed.
*/
public int F_SUPER_TYPES = 0x0800;
/**
* Change flag indicating that the source attachment path or the source
* attachment root path of a classpath entry corresponding to the element
* was added. This flag is only valid if the element is an
* IPackageFragmentRoot
.
*/
public int F_SOURCEATTACHED = 0x1000;
/**
* Change flag indicating that the source attachment path or the source
* attachment root path of a classpath entry corresponding to the element
* was removed. This flag is only valid if the element is an
* IPackageFragmentRoot
.
*/
public int F_SOURCEDETACHED = 0x2000;
/**
* 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 compilation 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).
*
* @since 2.0
*/
public int F_FINE_GRAINED = 0x4000;
/**
* Change flag indicating that the element's archive content on the
* classpath has changed. This flag is only valid if the element is an
* IPackageFragmentRoot
which is an archive.
*
* @see IPackageFragmentRoot#isArchive
* @since 2.0
*/
public int F_ARCHIVE_CONTENT_CHANGED = 0x8000;
/**
* Change flag indicating that a compilation unit has become a primary
* working copy, or that a primary working copy has reverted to a
* compilation unit. This flag is only valid if the element is an
* ICompilationUnit
.
*
* @since 3.0
*/
public int F_PRIMARY_WORKING_COPY = 0x10000;
/**
* Change flag indicating that the raw classpath (or the output folder) of a
* project has changed. This flag is only valid if the element is an
* IJavaProject
.
*
* @since 3.0
*/
public int F_CLASSPATH_CHANGED = 0x20000;
/**
* Change flag indicating that the resource of a primary compilation unit
* has changed. This flag is only valid if the element is a primary
* ICompilationUnit
.
*
* @since 3.0
*/
public int F_PRIMARY_RESOURCE = 0x40000;
/**
* Returns deltas for the children that have been added.
*
* @return deltas for the children that have been added
*/
public IJavaElementDelta[] getAddedChildren();
/**
* Returns deltas for the affected (added, removed, or changed) children.
*
* @return deltas for the affected (added, removed, or changed) children
*/
public IJavaElementDelta[] getAffectedChildren();
/**
* Returns deltas for the children which have changed.
*
* @return deltas for the children which have changed
*/
public IJavaElementDelta[] getChangedChildren();
/**
* Returns the element that this delta describes a change to.
*
* @return the element that this delta describes a change to
*/
public IJavaElement getElement();
/**
* Returns flags that describe how an element has changed. Such flags should
* be tested using the &
operand. For example:
*
*
* if ((delta.getFlags() & IJavaElementDelta.F_CONTENT) != 0) { * // the delta indicates a content change * } ** * @return flags that describe how an element has changed */ public int getFlags(); /** * Returns the kind of this delta - one of
ADDED
,
* REMOVED
, or CHANGED
.
*
* @return the kind of this delta
*/
public int getKind();
/**
* 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.
*
* @return 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
*/
public IJavaElement getMovedFromElement();
/**
* Returns an element describing this element in its new location, or
* null
if the F_MOVED_TO
change flag is not
* set.
*
* @return an element describing this element in its new location, or
* null
if the F_MOVED_TO
change flag
* is not set
*/
public IJavaElement getMovedToElement();
/**
* Returns deltas for the children which have been removed.
*
* @return deltas for the children which have been removed
*/
public IJavaElementDelta[] getRemovedChildren();
/**
* Returns the collection of resource deltas.
* * Note that resource deltas, like Java element deltas, are generally only * valid for the dynamic scope of an event notification. Clients must not * hang on to these objects. *
* * @return the underlying resource deltas, ornull
if none
*/
public IResourceDelta[] getResourceDeltas();
}