Package org.eclipse.handly.ui.texteditor

## Class SourceFileDocumentProvider

- java.lang.Object
- - org.eclipse.ui.editors.text.TextFileDocumentProvider
  - - org.eclipse.handly.ui.texteditor.SourceFileDocumentProvider

- All Implemented Interfaces:
    `IWorkingCopyManager`, `org.eclipse.ui.editors.text.IStorageDocumentProvider`, `org.eclipse.ui.texteditor.IDocumentProvider`, `org.eclipse.ui.texteditor.IDocumentProviderExtension`, `org.eclipse.ui.texteditor.IDocumentProviderExtension2`, `org.eclipse.ui.texteditor.IDocumentProviderExtension3`, `org.eclipse.ui.texteditor.IDocumentProviderExtension4`, `org.eclipse.ui.texteditor.IDocumentProviderExtension5`

      public abstract class SourceFileDocumentProvider
      extends org.eclipse.ui.editors.text.TextFileDocumentProvider
      implements IWorkingCopyManager

  Subclass of `TextFileDocumentProvider` specialized for working copy management of source files.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected static class` | `SourceFileDocumentProvider.SourceFileInfo` | Subclass of `FileInfo` that can retain a reference to a working copy of a source file.

    - ### Nested classes/interfaces inherited from class org.eclipse.ui.editors.text.TextFileDocumentProvider

      `org.eclipse.ui.editors.text.TextFileDocumentProvider.DocumentProviderOperation, org.eclipse.ui.editors.text.TextFileDocumentProvider.FileBufferListener, org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo, org.eclipse.ui.editors.text.TextFileDocumentProvider.NullProvider`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `SourceFileDocumentProvider()` | Creates a new source file document provider with no parent.
    `SourceFileDocumentProvider​(org.eclipse.ui.texteditor.IDocumentProvider parent)` | Creates a new source file document provider with the given parent.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected ISourceFile` | `acquireWorkingCopy​(java.lang.Object element, org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo info)` | Attempts to acquire a working copy for the given element.
    `protected org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo` | `createEmptyFileInfo()`
    `protected org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo` | `createFileInfo​(java.lang.Object element)`
    `protected void` | `disposeFileInfo​(java.lang.Object element, org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo info)`
    `protected abstract ISourceFile` | `getSourceFile​(java.lang.Object element)` | Returns the source file for the given element.
    `ISourceFile[]` | `getWorkingCopies()` | Returns all working copies that are currently managed by this manager.
    `ISourceFile` | `getWorkingCopy​(java.lang.Object element)` | Returns the working copy managed for the given element, or `null` if this manager does not currently manage a working copy for the element.
    `ISourceFile` | `getWorkingCopy​(org.eclipse.jface.text.IDocument document)` | Returns the working copy managed for the given document, or `null` if this manager does not currently manage a working copy for the document.
    `protected void` | `releaseWorkingCopy​(ISourceFile workingCopy, java.lang.Object element, org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo info)` | Releases the given working copy that was acquired via a call to `acquireWorkingCopy`.

    - ### Methods inherited from class org.eclipse.ui.editors.text.TextFileDocumentProvider

      `aboutToChange, addElementStateListener, canSaveDocument, changed, commitFileBuffer, computeSchedulingRule, connect, createAnnotationModel, createFileFromDocument, createSaveOperation, disconnect, executeOperation, fireElementStateChangeFailed, fireElementStateChanging, getAnnotationModel, getConnectedElementsIterator, getContentType, getDefaultEncoding, getDocument, getElements, getEncoding, getFileInfo, getFileInfosIterator, getFileStore, getModificationStamp, getOperationRunner, getParentProvider, getProgressMonitor, getStatus, getSynchronizationStamp, getSystemFile, handleCoreException, isDeleted, isModifiable, isNotSynchronizedException, isReadOnly, isStateValidated, isSynchronized, isSystemFileReadOnly, mustSaveDocument, removeElementStateListener, resetDocument, saveDocument, setCanSaveDocument, setEncoding, setParentDocumentProvider, setProgressMonitor, setUpSynchronization, synchronize, updateStateCache, validateState`

    - ### 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.ui.IWorkingCopyManager

      `connect, disconnect`

- - ### Constructor Detail

    - #### SourceFileDocumentProvider

          public SourceFileDocumentProvider()

      Creates a new source file document provider with no parent.

    - #### SourceFileDocumentProvider

          public SourceFileDocumentProvider​(org.eclipse.ui.texteditor.IDocumentProvider parent)

      Creates a new source file document provider with the given parent.
      Parameters:
        `parent` - the parent document provider

  - ### Method Detail

    - #### getWorkingCopy

          public ISourceFile getWorkingCopy​(java.lang.Object element)

      Returns the working copy managed for the given element, or `null` if this manager does not currently manage a working copy for the element.

      This implementation returns the working copy retained by the file info for the given element. The file info is obtained via `TextFileDocumentProvider.getFileInfo(Object)`.

      Specified by:
        `getWorkingCopy` in interface `IWorkingCopyManager`
      Parameters:
        `element` - the element for which to find the working copy, or `null`
      Returns:
        the working copy managed for the given element, or `null` if none

    - #### getWorkingCopy

          public ISourceFile getWorkingCopy​(org.eclipse.jface.text.IDocument document)

      Returns the working copy managed for the given document, or `null` if this manager does not currently manage a working copy for the document.

      Note: An implementation of this method may go through the list of working copies and test whether the working copy buffer's document equals the given document. Therefore, this method should not be used in performance critical code.

      This implementation returns the working copy retained by the file info for the given document. The file info is found by iterating over this provider's file info objects via `TextFileDocumentProvider.getFileInfosIterator()` and testing whether the document of the file info's text file buffer equals the given document.

      Specified by:
        `getWorkingCopy` in interface `IWorkingCopyManager`
      Parameters:
        `document` - the document for which to find the working copy, or `null`
      Returns:
        the working copy managed for the given document, or `null` if none

    - #### getWorkingCopies

          public ISourceFile[] getWorkingCopies()

      Returns all working copies that are currently managed by this manager.

      This implementation iterates over this provider's file info objects via `TextFileDocumentProvider.getFileInfosIterator()` and collects the working copies they retain.

      Specified by:
        `getWorkingCopies` in interface `IWorkingCopyManager`
      Returns:
        the working copies currently managed by this manager (never `null`)

    - #### getSourceFile

          protected abstract ISourceFile getSourceFile​(java.lang.Object element)

      Returns the source file for the given element.
      Parameters:
        `element` - the element
      Returns:
        the source file for the given element, or `null` if none

    - #### createEmptyFileInfo

          protected org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo createEmptyFileInfo()

      This implementation returns a new instance of `SourceFileInfo`.

      Overrides:
        `createEmptyFileInfo` in class `org.eclipse.ui.editors.text.TextFileDocumentProvider`

    - #### createFileInfo

          protected org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo createFileInfo​(java.lang.Object element)
                                                                                          throws org.eclipse.core.runtime.CoreException

      This implementation invokes the superclass implementation to create the file info object. It then attempts to `acquire` a working copy for the given element if the created object is an instance of `SourceFileInfo` and, if successful, stores a reference to the acquired working copy in the created file info.

      Overrides:
        `createFileInfo` in class `org.eclipse.ui.editors.text.TextFileDocumentProvider`
      Throws:
        `org.eclipse.core.runtime.CoreException`

    - #### disposeFileInfo

          protected void disposeFileInfo​(java.lang.Object element,
                                         org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo info)

      This implementation invokes the superclass implementation after trying to `release` the working copy retained by the given file info object.

      Overrides:
        `disposeFileInfo` in class `org.eclipse.ui.editors.text.TextFileDocumentProvider`

    - #### acquireWorkingCopy

          protected ISourceFile acquireWorkingCopy​(java.lang.Object element,
                                                   org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo info)
                                            throws org.eclipse.core.runtime.CoreException

      Attempts to acquire a working copy for the given element. A working copy acquired by this method must be released eventually via a call to `releaseWorkingCopy`.

      This implementation obtains a source file for the given element via `getSourceFile(Object)` and, if the source file implements `ISourceFileImplExtension`, invokes ``becomeWorkingCopy_`(EMPTY_CONTEXT, null)` on it and returns the acquired working copy. Otherwise, `null` is returned.

      Parameters:
        `element` - the element
        `info` - the element info
      Returns:
        the acquired working copy, or `null` if no working copy can be acquired for the given element
      Throws:
        `org.eclipse.core.runtime.CoreException` - if the working copy could not be acquired successfully

    - #### releaseWorkingCopy

          protected void releaseWorkingCopy​(ISourceFile workingCopy,
                                            java.lang.Object element,
                                            org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo info)

      Releases the given working copy that was acquired via a call to `acquireWorkingCopy`.

      This implementation invokes `((ISourceFileImplExtension)workingCopy).`releaseWorkingCopy_()``.

      Parameters:
        `workingCopy` - the working copy to release
        `element` - the element
        `info` - the element info