/******************************************************************************* * 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(); }