org.eclipse.handly.xtext.ui.editor

## Class HandlyXtextDocument

- java.lang.Object
- - org.eclipse.jface.text.AbstractDocument
  - - org.eclipse.jface.text.Document
    - - org.eclipse.xtext.ui.editor.model.XtextDocument
      - - org.eclipse.handly.xtext.ui.editor.HandlyXtextDocument

- All Implemented Interfaces:
    IHandlyXtextDocument, org.eclipse.jface.text.IDocument, org.eclipse.jface.text.IDocumentExtension, org.eclipse.jface.text.IDocumentExtension2, org.eclipse.jface.text.IDocumentExtension3, org.eclipse.jface.text.IDocumentExtension4, org.eclipse.jface.text.IRepairableDocument, org.eclipse.jface.text.IRepairableDocumentExtension, org.eclipse.xtext.ui.editor.model.IXtextDocument, org.eclipse.xtext.util.concurrent.IReadAccess<org.eclipse.xtext.resource.XtextResource>, org.eclipse.xtext.util.concurrent.IReadAccess.Priority<org.eclipse.xtext.resource.XtextResource>, org.eclipse.xtext.util.concurrent.IWriteAccess<org.eclipse.xtext.resource.XtextResource>

      public class HandlyXtextDocument
      extends org.eclipse.xtext.ui.editor.model.XtextDocument
      implements IHandlyXtextDocument

  Extends `XtextDocument` for Handly reconciling story. Implements `IHandlyXtextDocument`.

  Bind this class in place of the default `XtextDocument` if you have `HandlyXtextEditorCallback` configured. Note that if you bind this class, you should also bind other classes pertaining to Handly/Xtext integration:

       public Class<? extends XtextDocument> bindXtextDocument() {
           return HandlyXtextDocument.class;
       }

       public Class<? extends IReconciler> bindIReconciler() {
           return HandlyXtextReconciler.class;
       }

       public Class<? extends DirtyStateEditorSupport> bindDirtyStateEditorSupport() {
           return HandlyDirtyStateEditorSupport.class; // or its subclass
       }

  Restriction:
    This class is not intended to be extended by clients.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.eclipse.xtext.ui.editor.model.XtextDocument

      `org.eclipse.xtext.ui.editor.model.XtextDocument.XtextDocumentLocker`

    - ### Nested classes/interfaces inherited from interface org.eclipse.handly.xtext.ui.editor.IHandlyXtextDocument

      `IHandlyXtextDocument.IUndoableUnitOfWork<R,P>`

    - ### Nested classes/interfaces inherited from interface org.eclipse.xtext.util.concurrent.IReadAccess

      `org.eclipse.xtext.util.concurrent.IReadAccess.Priority<State>`

    - ### Nested classes/interfaces inherited from interface org.eclipse.jface.text.IDocumentExtension

      `org.eclipse.jface.text.IDocumentExtension.IReplace`

  - ### Field Summary

    - ### Fields inherited from interface org.eclipse.jface.text.IDocument

      `DEFAULT_CATEGORY, DEFAULT_CONTENT_TYPE`

    - ### Fields inherited from interface org.eclipse.jface.text.IDocumentExtension3

      `DEFAULT_PARTITIONING`

    - ### Fields inherited from interface org.eclipse.jface.text.IDocumentExtension4

      `UNKNOWN_MODIFICATION_STAMP`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HandlyXtextDocument(org.eclipse.xtext.ui.editor.model.DocumentTokenSource tokenSource, org.eclipse.xtext.ui.editor.model.edit.ITextEditComposer composer)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `IDocumentChange` | `applyChange(IDocumentChange change)` Applies the given change to this document.
    `void` | `disposeInput()`
    `ISnapshot` | `getReconciledSnapshot()` Returns the document snapshot that the document model was most recently `reconciled` with.
    `<T> T` | `modify(org.eclipse.xtext.util.concurrent.IUnitOfWork<T,org.eclipse.xtext.resource.XtextResource> work)` Executes the given unit of work under the document's write lock.
    `boolean` | `needsReconciling()` Returns whether the document model is out of sync with the document text and needs to be `reconciled`.
    `void` | `reconcile(boolean force, org.eclipse.core.runtime.IProgressMonitor monitor)` Reconciles the document model so it is up to date again.
    `void` | `setInput(org.eclipse.xtext.resource.XtextResource resource)`

    - ### Methods inherited from class org.eclipse.xtext.ui.editor.model.XtextDocument

      `addModelListener, addPosition, addPosition, addXtextDocumentContentObserver, checkAndUpdateAnnotations, createDocumentLocker, ensureThatStateIsNotReturned, fireDocumentChanged, fireRewriteSessionChanged, getAdapter, getCancelIndicator, getLastDamage, getPositions, getPositions, getResourceLock, getResourceURI, getTokens, getValidationJob, hasPendingUpdates, internalModify, notifyModelListeners, priorityReadOnly, readOnly, removeModelListener, removePosition, removePosition, removeXtextDocumentContentObserver, setOutdated, setValidationJob, updateContentBeforeRead`

    - ### Methods inherited from class org.eclipse.jface.text.Document

      `isLineInformationRepairNeeded`

    - ### Methods inherited from class org.eclipse.jface.text.AbstractDocument

      `acceptPostNotificationReplaces, addDocumentListener, addDocumentPartitioningListener, addDocumentRewriteSessionListener, addPositionCategory, addPositionUpdater, addPrenotifiedDocumentListener, checkStateOfPartitioner, completeInitialization, computeIndexInCategory, computeIndexInPositionList, computeIndexInPositionList, computeNumberOfLines, computePartitioning, computePartitioning, containsPosition, containsPositionCategory, doFireDocumentChanged, doFireDocumentChanged, doFireDocumentChanged2, fireDocumentAboutToBeChanged, fireDocumentPartitioningChanged, fireDocumentPartitioningChanged, fireDocumentPartitioningChanged, get, get, getActiveRewriteSession, getChar, getContentType, getContentType, getDefaultLineDelimiter, getDocumentListeners, getDocumentManagedPositions, getDocumentPartitioner, getDocumentPartitioner, getDocumentPartitioningListeners, getLegalContentTypes, getLegalContentTypes, getLegalLineDelimiters, getLength, getLineDelimiter, getLineInformation, getLineInformationOfOffset, getLineLength, getLineOffset, getLineOfOffset, getModificationStamp, getNumberOfLines, getNumberOfLines, getPartition, getPartition, getPartitionings, getPositionCategories, getPositionUpdaters, getStore, getTracker, ignorePostNotificationReplaces, insertPositionUpdater, registerPostNotificationReplace, removeDocumentListener, removeDocumentPartitioningListener, removeDocumentRewriteSessionListener, removePositionCategory, removePositionUpdater, removePrenotifiedDocumentListener, repairLineInformation, replace, replace, resumeListenerNotification, resumePostNotificationProcessing, search, set, set, setDocumentPartitioner, setDocumentPartitioner, setInitialLineDelimiter, setLineTracker, setTextStore, startRewriteSession, startRewriteSessionOnPartitioners, startSequentialRewrite, stopListenerNotification, stopPostNotificationProcessing, stopRewriteSession, stopRewriteSessionOnPartitioners, stopSequentialRewrite, updateDocumentStructures, updatePositions`

    - ### 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.xtext.ui.editor.IHandlyXtextDocument

      `readOnly`

    - ### Methods inherited from interface org.eclipse.xtext.ui.editor.model.IXtextDocument

      `addModelListener, addXtextDocumentContentObserver, getAdapter, getResourceURI, removeModelListener, removeXtextDocumentContentObserver`

    - ### Methods inherited from interface org.eclipse.jface.text.IDocument

      `addDocumentListener, addDocumentPartitioningListener, addPosition, addPosition, addPositionCategory, addPositionUpdater, addPrenotifiedDocumentListener, computeIndexInCategory, computeNumberOfLines, computePartitioning, containsPosition, containsPositionCategory, get, get, getChar, getContentType, getDocumentPartitioner, getLegalContentTypes, getLegalLineDelimiters, getLength, getLineDelimiter, getLineInformation, getLineInformationOfOffset, getLineLength, getLineOffset, getLineOfOffset, getNumberOfLines, getNumberOfLines, getPartition, getPositionCategories, getPositions, getPositionUpdaters, insertPositionUpdater, removeDocumentListener, removeDocumentPartitioningListener, removePosition, removePosition, removePositionCategory, removePositionUpdater, removePrenotifiedDocumentListener, replace, search, set, setDocumentPartitioner`

    - ### Methods inherited from interface org.eclipse.jface.text.IDocumentExtension3

      `computePartitioning, getContentType, getDocumentPartitioner, getLegalContentTypes, getPartition, getPartitionings, setDocumentPartitioner`

    - ### Methods inherited from interface org.eclipse.xtext.util.concurrent.IReadAccess

      `tryReadOnly, tryReadOnly, tryReadOnly`

    - ### Methods inherited from interface org.eclipse.xtext.util.concurrent.IReadAccess.Priority

      `priorityReadOnly, tryPriorityReadOnly, tryPriorityReadOnly, tryPriorityReadOnly`

    - ### Methods inherited from interface org.eclipse.xtext.util.concurrent.IWriteAccess

      `tryModify, tryModify, tryModify`

- - ### Constructor Detail

    - #### HandlyXtextDocument

          @Inject
          public HandlyXtextDocument(org.eclipse.xtext.ui.editor.model.DocumentTokenSource tokenSource,
                                             org.eclipse.xtext.ui.editor.model.edit.ITextEditComposer composer)

  - ### Method Detail

    - #### setInput

          public void setInput(org.eclipse.xtext.resource.XtextResource resource)

      Overrides:
        `setInput` in class `org.eclipse.xtext.ui.editor.model.XtextDocument`

    - #### disposeInput

          public void disposeInput()

      Overrides:
        `disposeInput` in class `org.eclipse.xtext.ui.editor.model.XtextDocument`

    - #### getReconciledSnapshot

          public ISnapshot getReconciledSnapshot()

      Description copied from interface: `IHandlyXtextDocument`
      Returns the document snapshot that the document model was most recently `reconciled` with. Returns `null` if this document has no Xtext resource (i.e., either the resource has yet to be set or it has already been disposed).
      Specified by:
        `getReconciledSnapshot` in interface `IHandlyXtextDocument`
      Returns:
        the most recently reconciled snapshot, or `null`

    - #### needsReconciling

          public boolean needsReconciling()

      Description copied from interface: `IHandlyXtextDocument`
      Returns whether the document model is out of sync with the document text and needs to be `reconciled`.
      Specified by:
        `needsReconciling` in interface `IHandlyXtextDocument`
      Returns:
        `true` if reconciling is needed, and `false` otherwise

    - #### reconcile

          public void reconcile(boolean force,
                                org.eclipse.core.runtime.IProgressMonitor monitor)

      Description copied from interface: `IHandlyXtextDocument`
      Reconciles the document model so it is up to date again.

      Note that a document model with cross-document references may become out of date even when it is in sync with the document text. The `force` parameter controls whether the document model has to be reconciled even if it is already in sync with the document text.

      Specified by:
        `reconcile` in interface `IHandlyXtextDocument`
      Parameters:
        `force` - controls whether the document model has to be reconciled even if it is already in sync with the the document text
        `monitor` - a progress monitor, or `null` if progress reporting is not desired. The caller must not rely on `IProgressMonitor.done()` having been called by the receiver

    - #### modify

          public <T> T modify(org.eclipse.xtext.util.concurrent.IUnitOfWork<T,org.eclipse.xtext.resource.XtextResource> work)

      Description copied from interface: `IHandlyXtextDocument`
      Executes the given unit of work under the document's write lock. The unit of work may modify the Xtext resource but must not expose any references to it.

      The document text is automatically updated so it is reconciled with the resource modifications performed by the unit of work. Units of work may be nested; changes are only applied to the document after successful completion of the top-level modification, i.e., when all work is done. If the top-level unit of work is `undoable`, it will be `informed` of an undo change that can be `applied` to the document to revert any modifications made by the whole transaction.

      Before the top-level unit of work is run, the Xtext resource is guaranteed to be based on the most recently `reconciled snapshot`. That snapshot is regarded as the base snapshot for the whole transaction, i.e., if it turns out to be stale when changes are to be applied to the document, this method will throw a `StaleSnapshotException`. Usually, there is no need for clients to invoke `reconcile` before calling this method to ensure a fresh snapshot; reconciling happens automatically before the top-level unit of work is run.

      Specified by:
        `modify` in interface `IHandlyXtextDocument`
      Specified by:
        `modify` in interface `org.eclipse.xtext.util.concurrent.IWriteAccess<org.eclipse.xtext.resource.XtextResource>`
      Overrides:
        `modify` in class `org.eclipse.xtext.ui.editor.model.XtextDocument`
      Parameters:
        `work` - a modifying unit of work (not `null`)
      Returns:
        the unit of work's result (may be `null`). Must not contain any references to the Xtext resource or its contents (semantic objects or parse tree nodes)

    - #### applyChange

          public IDocumentChange applyChange(IDocumentChange change)
                                      throws org.eclipse.jface.text.BadLocationException

      Description copied from interface: `IHandlyXtextDocument`
      Applies the given change to this document.

      Note that an update conflict may occur if the document text has changed since the inception of the snapshot on which the given change is based. In that case, a `StaleSnapshotException` is thrown.

      Specified by:
        `applyChange` in interface `IHandlyXtextDocument`
      Parameters:
        `change` - a document change (not `null`)
      Returns:
        undo change, if requested by the given change. Otherwise, `null`
      Throws:
        `org.eclipse.jface.text.BadLocationException` - if one of the edits in the change's edit tree could not be executed

Copyright (c) 2014, 2020 1C-Soft LLC and others. Made available under the Eclipse Public License 2.0