Class Buffer
- All Implemented Interfaces:
AutoCloseable
,IBuffer
,ISnapshotProvider
,IReferenceCountable
- Direct Known Subclasses:
ChildBuffer
IBuffer
implementation. This implementation is not backed
by an underlying resource, so saving the buffer only modifies its "dirty"
state; it does not really save its contents.
An instance of this class is safe for use by multiple threads. Clients can use this class as it stands or subclass it as circumstances warrant.
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addListener
(IBufferListener listener) Adds the given listener to this buffer.void
addRef()
Spawns a new independent ownership of this object.applyChange
(IBufferChange change, org.eclipse.core.runtime.IProgressMonitor monitor) Applies the given change to this buffer.protected org.eclipse.jface.text.IDocument
protected void
org.eclipse.jface.text.IDocument
Returns the underlying document of this buffer.protected Iterable<IBufferListener>
Returns the current snapshot of this buffer.int
Returns a bit-mask describing the listener methods supported by this buffer.boolean
isDirty()
Returns whether this buffer has been modified since the last time it was opened or saved.void
release()
Relinquishes an independent ownership of this object.void
removeListener
(IBufferListener listener) Removes the given listener from this buffer.void
Saves this buffer.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.eclipse.handly.buffer.IBuffer
getAnnotationModel
Methods inherited from interface org.eclipse.handly.util.IReferenceCountable
close
-
Constructor Details
-
Buffer
public Buffer()Creates a new buffer instance that is initially empty.It is the client responsibility to
release
the created buffer after it is no longer needed. -
Buffer
Creates a new buffer instance and initializes it with the given contents.It is the client responsibility to
release
the created buffer after it is no longer needed.- Parameters:
contents
- initial contents
-
-
Method Details
-
getDocument
public org.eclipse.jface.text.IDocument getDocument()Description copied from interface:IBuffer
Returns the underlying document of this buffer. The relationship between a buffer and its document does not change over the lifetime of the buffer.- Specified by:
getDocument
in interfaceIBuffer
- Returns:
- the buffer's underlying document (never
null
)
-
getSnapshot
Description copied from interface:IBuffer
Returns the current snapshot of this buffer. The returned snapshot may immediately become stale or expire.Note that it is possible to obtain a
non-expiring
snapshot from the buffer, although protractedly holding on non-expiring snapshots is not recommended as they may potentially consume large amount of space.- Specified by:
getSnapshot
in interfaceIBuffer
- Specified by:
getSnapshot
in interfaceISnapshotProvider
- Returns:
- the buffer's current snapshot (never
null
)
-
applyChange
public IBufferChange applyChange(IBufferChange change, org.eclipse.core.runtime.IProgressMonitor monitor) throws org.eclipse.core.runtime.CoreException Description copied from interface:IBuffer
Applies the given change to this buffer.Note that an update conflict may occur if the buffer's contents have changed since the inception of the snapshot on which the change is based. In that case, a
StaleSnapshotException
is thrown.- Specified by:
applyChange
in interfaceIBuffer
- Parameters:
change
- a buffer change (notnull
)monitor
- a progress monitor, ornull
if progress reporting is not desired. The caller must not rely onIProgressMonitor.done()
having been called by the receiver- Returns:
- undo change, if requested by the change. Otherwise,
null
- Throws:
org.eclipse.core.runtime.CoreException
- if the change's edit tree is not in a valid state, or if one of the edits in the tree could not be executed, or if save is requested by the change but the buffer could not be saved
-
save
public void save(IContext context, org.eclipse.core.runtime.IProgressMonitor monitor) throws org.eclipse.core.runtime.CoreException Description copied from interface:IBuffer
Saves this buffer. It is up to the implementors of this method to decide what saving means. Typically, the contents of the underlying resource is changed to the contents of the buffer.- Specified by:
save
in interfaceIBuffer
- Parameters:
context
- the operation context (notnull
)monitor
- a progress monitor, ornull
if progress reporting is not desired. The caller must not rely onIProgressMonitor.done()
having been called by the receiver- Throws:
org.eclipse.core.runtime.CoreException
- if the buffer could not be saved
-
isDirty
public boolean isDirty()Description copied from interface:IBuffer
Returns whether this buffer has been modified since the last time it was opened or saved. -
getSupportedListenerMethods
public int getSupportedListenerMethods()Description copied from interface:IBuffer
Returns a bit-mask describing the listener methods supported by this buffer. The buffer will never invoke a listener method it does not support.- Specified by:
getSupportedListenerMethods
in interfaceIBuffer
- Returns:
- a bit-mask describing the supported listener methods
- See Also:
-
addListener
Description copied from interface:IBuffer
Adds the given listener to this buffer. Has no effect if the same listener is already registered.- Specified by:
addListener
in interfaceIBuffer
- Parameters:
listener
- notnull
-
removeListener
Description copied from interface:IBuffer
Removes the given listener from this buffer. Has no effect if the same listener was not already registered.- Specified by:
removeListener
in interfaceIBuffer
- Parameters:
listener
- notnull
-
addRef
public void addRef()Description copied from interface:IReferenceCountable
Spawns a new independent ownership of this object. Each successful call toaddRef()
must ultimately be followed by exactly one call toIReferenceCountable.release()
.- Specified by:
addRef
in interfaceIBuffer
- Specified by:
addRef
in interfaceIReferenceCountable
- Specified by:
addRef
in interfaceISnapshotProvider
-
release
public void release()Description copied from interface:IReferenceCountable
Relinquishes an independent ownership of this object. Each independent ownership of the object must ultimately end with exactly one call to this method.- Specified by:
release
in interfaceIBuffer
- Specified by:
release
in interfaceIReferenceCountable
- Specified by:
release
in interfaceISnapshotProvider
- See Also:
-
createEmptyDocument
protected org.eclipse.jface.text.IDocument createEmptyDocument() -
doSave
protected void doSave(IContext context, org.eclipse.core.runtime.IProgressMonitor monitor) throws org.eclipse.core.runtime.CoreException - Throws:
org.eclipse.core.runtime.CoreException
-
getListeners
- Since:
- 1.4
-