All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jdt.core.IWorkingCopy Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2000, 2011 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.core;

import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;

/**
 * Common protocol for Java elements that support working copies.
 * 

* A working copy of a Java element acts just like a regular element (handle), * except it is not attached to an underlying resource. A working copy is not * visible to the rest of the Java model. Changes in a working copy's * buffer are not realized in a resource. To bring the Java model up-to-date with a working * copy's contents, an explicit commit must be performed on the working copy. * Other operations performed on a working copy update the * contents of the working copy's buffer but do not commit the contents * of the working copy. *

*

* Note: The contents of a working copy is determined when a working * copy is created, based on the current content of the element the working * copy is created from. If a working copy is an IOpenable and is explicitly * closed, the working copy's buffer will be thrown away. However, clients should not * explicitly open and close working copies. *

*

* The client that creates a working copy is responsible for * destroying the working copy. The Java model will never automatically * destroy or close a working copy. (Note that destroying a working copy * does not commit it to the model, it only frees up the memory occupied by * the element). After a working copy is destroyed, the working copy cannot * be accessed again. Non-handle methods will throw a * JavaModelException indicating the Java element does not exist. *

*

* A working copy cannot be created from another working copy. * Calling getWorkingCopy on a working copy returns the receiver. *

* * @deprecated Use {@link ICompilationUnit} instead * @noimplement This interface is not intended to be implemented by clients. */ public interface IWorkingCopy { /** * Commits the contents of this working copy to its original element * and underlying resource, bringing the Java model up-to-date with * the current contents of the working copy. * *

It is possible that the contents of the original resource have changed * since this working copy was created, in which case there is an update conflict. * The value of the force parameter affects the resolution of * such a conflict:

    *
  • true - in this case the contents of this working copy are applied to * the underlying resource even though this working copy was created before * a subsequent change in the resource
  • *
  • false - in this case a JavaModelException is thrown
  • *
*

* Since 2.1, a working copy can be created on a not-yet existing compilation * unit. In particular, such a working copy can then be committed in order to create * the corresponding compilation unit. *

* @param force a flag to handle the cases when the contents of the original resource have changed * since this working copy was created * @param monitor the given progress monitor * @exception JavaModelException if this working copy could not commit. Reasons include: *
    *
  • A CoreException occurred while updating an underlying resource *
  • This element is not a working copy (INVALID_ELEMENT_TYPES) *
  • A update conflict (described above) (UPDATE_CONFLICT) *
* @deprecated Use {@link ICompilationUnit#commitWorkingCopy(boolean, IProgressMonitor)} instead. */ void commit(boolean force, IProgressMonitor monitor) throws JavaModelException; /** * Destroys this working copy, closing its buffer and discarding * its structure. Subsequent attempts to access non-handle information * for this working copy will result in IJavaModelExceptions. Has * no effect if this element is not a working copy. *

* If this working copy is shared, it is destroyed only when the number of calls to * destroy() is the same as the number of calls to * getSharedWorkingCopy(IProgressMonitor, IBufferFactory). *

* When it is destroyed, a REMOVED IJavaElementDelta is reported on this * working copy. *

* @deprecated Use {@link ICompilationUnit#discardWorkingCopy()} instead. */ void destroy(); /** * Finds the shared working copy for this element, given a IBuffer factory. * If no working copy has been created for this element associated with this * buffer factory, returns null. *

* Users of this method must not destroy the resulting working copy. * * @param bufferFactory the given IBuffer factory * @return the found shared working copy for this element, null if none * @see IBufferFactory * @since 2.0 * * @deprecated Use {@link ICompilationUnit#findWorkingCopy(WorkingCopyOwner)} instead. */ IJavaElement findSharedWorkingCopy(IBufferFactory bufferFactory); /** * Returns the original element the specified working copy element was created from, * or null if this is not a working copy element. This is a handle * only method, the returned element may or may not exist. * * @param workingCopyElement the specified working copy element * @return the original element the specified working copy element was created from, * or null if this is not a working copy element * * @deprecated Use {@link IJavaElement#getPrimaryElement()} instead. */ IJavaElement getOriginal(IJavaElement workingCopyElement); /** * Returns the original element this working copy was created from, * or null if this is not a working copy. * * @return the original element this working copy was created from, * or null if this is not a working copy * * @deprecated Use {@link ICompilationUnit#getPrimaryElement()} instead. */ IJavaElement getOriginalElement(); /** * Finds the elements in this compilation unit that correspond to * the given element. * An element A corresponds to an element B if: *

    *
  • A has the same element name as B. *
  • If A is a method, A must have the same number of arguments as * B and the simple names of the argument types must be equals. *
  • The parent of A corresponds to the parent of B recursively up to * their respective compilation units. *
  • A exists. *
* Returns null if no such java elements can be found * or if the given element is not included in a compilation unit. * * @param element the given element * @return the found elements in this compilation unit that correspond to the given element * @since 2.0 * * @deprecated Use {@link ICompilationUnit#findElements(IJavaElement)} instead. */ IJavaElement[] findElements(IJavaElement element); /** * Finds the primary type of this compilation unit (that is, the type with the same name as the * compilation unit), or null if no such a type exists. * * @return the found primary type of this compilation unit, or null if no such a type exists * @since 2.0 * * @deprecated Use {@link ITypeRoot#findPrimaryType()} instead. */ IType findPrimaryType(); /** * Returns a shared working copy on this element using the given factory to create * the buffer, or this element if this element is already a working copy. * This API can only answer an already existing working copy if it is based on the same * original compilation unit AND was using the same buffer factory (that is, as defined by Object.equals). *

* The life time of a shared working copy is as follows: *

    *
  • The first call to getSharedWorkingCopy(...) creates a new working copy for this * element
  • *
  • Subsequent calls increment an internal counter.
  • *
  • A call to destroy() decrements the internal counter.
  • *
  • When this counter is 0, the working copy is destroyed. *
* So users of this method must destroy exactly once the working copy. *

* Note that the buffer factory will be used for the life time of this working copy, that is if the * working copy is closed then reopened, this factory will be used. * The buffer will be automatically initialized with the original's compilation unit content * upon creation. *

* When the shared working copy instance is created, an ADDED IJavaElementDelta is reported on this * working copy. * * @param monitor a progress monitor used to report progress while opening this compilation unit * or null if no progress should be reported * @param factory the factory that creates a buffer that is used to get the content of the working copy * or null if the internal factory should be used * @param problemRequestor a requestor which will get notified of problems detected during * reconciling as they are discovered. The requestor can be set to null indicating * that the client is not interested in problems. * @exception JavaModelException if the contents of this element can * not be determined. * @return a shared working copy on this element using the given factory to create * the buffer, or this element if this element is already a working copy * @see IBufferFactory * @see IProblemRequestor * @since 2.0 * * @deprecated Use {@link ICompilationUnit#getWorkingCopy(WorkingCopyOwner, IProblemRequestor, IProgressMonitor)} instead. */ IJavaElement getSharedWorkingCopy( IProgressMonitor monitor, IBufferFactory factory, IProblemRequestor problemRequestor) throws JavaModelException; /** * Returns a new working copy of this element if this element is not * a working copy, or this element if this element is already a working copy. *

* Note: if intending to share a working copy amongst several clients, then * #getSharedWorkingCopy should be used instead. *

* When the working copy instance is created, an ADDED IJavaElementDelta is * reported on this working copy. *

* Since 2.1, a working copy can be created on a not-yet existing compilation * unit. In particular, such a working copy can then be committed in order to create * the corresponding compilation unit. *

* @exception JavaModelException if the contents of this element can * not be determined. * @return a new working copy of this element if this element is not * a working copy, or this element if this element is already a working copy * * @deprecated Use {@link ICompilationUnit#getWorkingCopy(IProgressMonitor)} instead. */ IJavaElement getWorkingCopy() throws JavaModelException; /** * Returns a new working copy of this element using the given factory to create * the buffer, or this element if this element is already a working copy. * Note that this factory will be used for the life time of this working copy, that is if the * working copy is closed then reopened, this factory will be reused. * The buffer will be automatically initialized with the original's compilation unit content * upon creation. *

* Note: if intending to share a working copy amongst several clients, then * #getSharedWorkingCopy should be used instead. *

* When the working copy instance is created, an ADDED IJavaElementDelta is * reported on this working copy. *

* Since 2.1, a working copy can be created on a not-yet existing compilation * unit. In particular, such a working copy can then be committed in order to create * the corresponding compilation unit. *

* @param monitor a progress monitor used to report progress while opening this compilation unit * or null if no progress should be reported * @param factory the factory that creates a buffer that is used to get the content of the working copy * or null if the internal factory should be used * @param problemRequestor a requestor which will get notified of problems detected during * reconciling as they are discovered. The requestor can be set to null indicating * that the client is not interested in problems. * @exception JavaModelException if the contents of this element can * not be determined. * @return a new working copy of this element using the given factory to create * the buffer, or this element if this element is already a working copy * @since 2.0 * * @deprecated Use {@link ICompilationUnit#getWorkingCopy(WorkingCopyOwner, IProblemRequestor, IProgressMonitor)} instead. */ IJavaElement getWorkingCopy( IProgressMonitor monitor, IBufferFactory factory, IProblemRequestor problemRequestor) throws JavaModelException; /** * Returns whether this working copy's original element's content * has not changed since the inception of this working copy. * * @param resource this working copy's resource * @return true if this working copy's original element's content * has not changed since the inception of this working copy, false otherwise * * @deprecated Use {@link ICompilationUnit#hasResourceChanged()} instead. */ boolean isBasedOn(IResource resource); /** * Returns whether this element is a working copy. * * @return true if this element is a working copy, false otherwise * * @deprecated Use {@link ICompilationUnit#isWorkingCopy()} instead. */ boolean isWorkingCopy(); /** * Reconciles the contents of this working copy. * It performs the reconciliation by locally caching the contents of * the working copy, updating the contents, then creating a delta * over the cached contents and the new contents, and finally firing * this delta. *

* If the working copy hasn't changed, then no problem will be detected, * this is equivalent to IWorkingCopy#reconcile(false, null).

*

* Compilation problems found in the new contents are notified through the * IProblemRequestor interface which was passed at * creation, and no longer as transient markers. Therefore this API will * return null.

*

* Note: Since 3.0 added/removed/changed inner types generate change deltas.

* * @exception JavaModelException if the contents of the original element * cannot be accessed. Reasons include: *
    *
  • The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)
  • *
* @return null * * @deprecated Use {@link ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)} instead. */ IMarker[] reconcile() throws JavaModelException; /** * Reconciles the contents of this working copy. * It performs the reconciliation by locally caching the contents of * the working copy, updating the contents, then creating a delta * over the cached contents and the new contents, and finally firing * this delta. *

* The boolean argument allows to force problem detection even if the * working copy is already consistent.

*

* Compilation problems found in the new contents are notified through the * IProblemRequestor interface which was passed at * creation, and no longer as transient markers. Therefore this API answers * nothing.

*

* Note: Since 3.0 added/removed/changed inner types generate change deltas.

* * @param forceProblemDetection boolean indicating whether problem should be recomputed * even if the source hasn't changed. * @param monitor a progress monitor * @exception JavaModelException if the contents of the original element * cannot be accessed. Reasons include: *
    *
  • The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)
  • *
* @since 2.0 * * @deprecated Use {@link ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)} instead. */ void reconcile(boolean forceProblemDetection, IProgressMonitor monitor) throws JavaModelException; /** * Restores the contents of this working copy to the current contents of * this working copy's original element. Has no effect if this element * is not a working copy. * *

Note: This is the inverse of committing the content of the * working copy to the original element with commit(boolean, IProgressMonitor). * * @exception JavaModelException if the contents of the original element * cannot be accessed. Reasons include: *

    *
  • The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)
  • *
* @deprecated Use {@link ICompilationUnit#restore()} instead. */ void restore() throws JavaModelException; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy