X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaElementDelta.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaElementDelta.java new file mode 100644 index 0000000..f13308f --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaElementDelta.java @@ -0,0 +1,326 @@ +/******************************************************************************* + * 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;
+
+ /**
+ * 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();
+}