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): + *

+ *

+ *

+ * 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 an IMember. + */ + 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, or null if none + */ + public IResourceDelta[] getResourceDeltas(); +}