Eclipse JDT
2.0

org.eclipse.jdt.core
Interface IWorkingCopy

All Known Subinterfaces:
ICompilationUnit

public interface IWorkingCopy

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.

This interface is not intended to be implemented by clients.


Method Summary
 void commit(boolean force, IProgressMonitor monitor)
          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.
 void destroy()
          Destroys this working copy, closing its buffer and discarding its structure.
 IJavaElement[] findElements(IJavaElement element)
          Finds the elements in this compilation unit that correspond to the given element.
 IType findPrimaryType()
          Finds the primary type of this compilation unit (i.e. the type with the same name as the compilation unit), or null if no such a type exists.
 IJavaElement findSharedWorkingCopy(IBufferFactory bufferFactory)
          Finds the shared working copy for this element, given a IBuffer factory.
 IJavaElement getOriginal(IJavaElement workingCopyElement)
          Returns the original element the specified working copy element was created from, or null if this is not a working copy element.
 IJavaElement getOriginalElement()
          Returns the original element this working copy was created from, or null if this is not a working copy.
 IJavaElement getSharedWorkingCopy(IProgressMonitor monitor, IBufferFactory factory, IProblemRequestor problemRequestor)
          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.
 IJavaElement getWorkingCopy()
          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.
 IJavaElement getWorkingCopy(IProgressMonitor monitor, IBufferFactory factory, IProblemRequestor problemRequestor)
          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.
 boolean isBasedOn(IResource resource)
          Returns whether this working copy's original element's content has not changed since the inception of this working copy.
 boolean isWorkingCopy()
          Returns whether this element is a working copy.
 IMarker[] reconcile()
          Reconciles the contents of this working copy.
 void reconcile(boolean forceProblemDetection, IProgressMonitor monitor)
          Reconciles the contents of this working copy.
 void restore()
          Restores the contents of this working copy to the current contents of this working copy's original element.
 

Method Detail

commit

public void commit(boolean force,
                   IProgressMonitor monitor)
            throws JavaModelException
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 effects the resolution of such a conflict:

Parameters:
force - a flag to handle the cases when the contents of the original resource have changed since this working copy was created
monitor - the given progress monitor
Throws:
JavaModelException - if this working copy could not commit. Reasons include:
  • The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)
  • 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)

destroy

public void destroy()
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). A REMOVED IJavaElementDelta is then reported on this working copy.


findSharedWorkingCopy

public IJavaElement findSharedWorkingCopy(IBufferFactory bufferFactory)
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.

Parameters:
bufferFactory - the given IBuffer factory
Returns:
the found shared working copy for this element, null if none
Since:
2.0
See Also:
IBufferFactory

getOriginal

public IJavaElement getOriginal(IJavaElement workingCopyElement)
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.

Returns:
the original element the specified working copy element was created from, or null if this is not a working copy element

getOriginalElement

public IJavaElement getOriginalElement()
Returns the original element this working copy was created from, or null if this is not a working copy.

Returns:
the original element this working copy was created from, or null if this is not a working copy

findElements

public IJavaElement[] findElements(IJavaElement element)
Finds the elements in this compilation unit that correspond to the given element. An element A corresponds to an element B if: Returns null if no such java elements can be found or if the given element is not included in a compilation unit.

Parameters:
element - the given element
Returns:
the found elements in this compilation unit that correspond to the given element
Since:
2.0

findPrimaryType

public IType findPrimaryType()
Finds the primary type of this compilation unit (i.e. the type with the same name as the compilation unit), or null if no such a type exists.

Returns:
the found primary type of this compilation unit, or null if no such a type exists
Since:
2.0

getSharedWorkingCopy

public IJavaElement getSharedWorkingCopy(IProgressMonitor monitor,
                                         IBufferFactory factory,
                                         IProblemRequestor problemRequestor)
                                  throws JavaModelException
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 (i.e. as defined by Object#equals).

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

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, i.e. 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.

Parameters:
monitor - a progress monitor used to report progress while opening this compilation unit or null if no progress should be reported
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
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.
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
Throws:
JavaModelException - if the contents of this element can not be determined. Reasons include:
  • This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
Since:
2.0
See Also:
IBufferFactory, IProblemRequestor

getWorkingCopy

public IJavaElement getWorkingCopy()
                            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.

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
Throws:
JavaModelException - if the contents of this element can not be determined. Reasons include:
  • This Java element does not exist (ELEMENT_DOES_NOT_EXIST)

getWorkingCopy

public IJavaElement getWorkingCopy(IProgressMonitor monitor,
                                   IBufferFactory factory,
                                   IProblemRequestor problemRequestor)
                            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, i.e. 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.

Parameters:
monitor - a progress monitor used to report progress while opening this compilation unit or null if no progress should be reported
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
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.
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
Throws:
JavaModelException - if the contents of this element can not be determined. Reasons include:
  • This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
Since:
2.0

isBasedOn

public boolean isBasedOn(IResource resource)
Returns whether this working copy's original element's content has not changed since the inception of this working copy.

Returns:
true if this working copy's original element's content has not changed since the inception of this working copy, false otherwise

isWorkingCopy

public boolean isWorkingCopy()
Returns whether this element is a working copy.

Returns:
true if this element is a working copy, false otherwise

reconcile

public 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.

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: It has been assumed that added inner types should not generate change deltas. The implementation has been modified to reflect this assumption.

Returns:
null
Throws:
JavaModelException - if the contents of the original element cannot be accessed. Reasons include:
  • The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)

reconcile

public void reconcile(boolean forceProblemDetection,
                      IProgressMonitor monitor)
               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: It has been assumed that added inner types should not generate change deltas. The implementation has been modified to reflect this assumption.

Parameters:
forceProblemDetection - boolean indicating whether problem should be recomputed even if the source hasn't changed.
monitor - a progress monitor
Throws:
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

restore

public void restore()
             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).

Throws:
JavaModelException - if the contents of the original element cannot be accessed. Reasons include:
  • The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)

Eclipse JDT
2.0

Copyright (c) IBM Corp. and others 2000, 2002. All Rights Reserved.