Package org.eclipse.handly.ui.outline

# Class SourceElementLinkingHelper

java.lang.Object
org.eclipse.ui.OpenAndLinkWithEditorHelper
org.eclipse.handly.ui.outline.OutlineLinkingHelper
org.eclipse.handly.ui.outline.SourceElementLinkingHelper

public class SourceElementLinkingHelper extends OutlineLinkingHelper
Implements linking logic for outlines of `ISourceElement`s.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final IInputElementProvider`
  `inputElementProvider`
  The input element provider for this linking helper.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SourceElementLinkingHelper(ICommonOutlinePage outlinePage, IInputElementProvider inputElementProvider)`
  Creates a new source element linking helper for the given outline page with the given input element provider.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `dispose()`
  `protected IContentAdapter`
  `getContentAdapter()`
  Returns the installed content adapter, or a `NullContentAdapter` if none.
  `protected org.eclipse.jface.viewers.IStructuredSelection`
  `getLinkedSelection(org.eclipse.jface.text.ITextSelection selection, org.eclipse.core.runtime.IProgressMonitor monitor)`
  Returns the outline selection corresponding to the given text selection in the editor.
  `protected org.eclipse.jface.viewers.IStructuredSelection`
  `getLinkedSelection(org.eclipse.jface.viewers.ISelection selection, org.eclipse.core.runtime.IProgressMonitor monitor)`
  Returns the outline selection corresponding to the given selection in the editor.
  `protected org.eclipse.ui.IEditorPart`
  `getTargetEditor()`
  Returns the editor the outline should be linked to.
  `protected boolean`
  `isInEditor(IElement element, org.eclipse.ui.IEditorPart editor)`
  Returns whether the given element is contained in the given editor.
  `protected void`
  `linkToEditor(org.eclipse.jface.viewers.ISelection selection)`
  Tells to link the given outline selection to the editor.
  `protected void`
  `linkToEditor(org.eclipse.ui.texteditor.ITextEditor editor, org.eclipse.jface.viewers.IStructuredSelection selection)`
  Tells to link the given outline selection to the given text editor.
  `protected final void`
  `linkToOutline(org.eclipse.jface.viewers.ISelection selection)`
  Tells to link the given editor selection to the outline.

  ### Methods inherited from class org.eclipse.handly.ui.outline.OutlineLinkingHelper

  `activate, getOutlinePage, open, setLinkWithEditor`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### inputElementProvider

    protected final IInputElementProvider inputElementProvider
    The input element provider for this linking helper.

- ## Constructor Details

  - ### SourceElementLinkingHelper

    public SourceElementLinkingHelper(ICommonOutlinePage outlinePage, IInputElementProvider inputElementProvider)
    Creates a new source element linking helper for the given outline page with the given input element provider.
    Parameters:
      `outlinePage` - not `null`
      `inputElementProvider` - an input element provider

- ## Method Details

  - ### dispose

    public void dispose()
    Overrides:
      `dispose` in class `OutlineLinkingHelper`

  - ### linkToOutline

    protected final void linkToOutline(org.eclipse.jface.viewers.ISelection selection)
    Tells to link the given editor selection to the outline.

    This implementation does nothing if the given selection is `null` or empty. Otherwise, it schedules a background job to compute and set the new outline selection. The selection is computed using `getLinkedSelection(ISelection, IProgressMonitor)`.

    Specified by:
      `linkToOutline` in class `OutlineLinkingHelper`
    Parameters:
      `selection` - the editor selection (may be `null` or empty)

  - ### linkToEditor

    protected void linkToEditor(org.eclipse.jface.viewers.ISelection selection)
    Tells to link the given outline selection to the editor.

    This implementation does nothing if the given selection is `null` or empty. Otherwise, it calls `getTargetEditor()` to determine the editor that the outline should be linked to. It then delegates to `linkToEditor(ITextEditor, IStructuredSelection)` if the target editor is a text editor. Otherwise, it simply passes the given selection to the editor's selection provider.

    Specified by:
      `linkToEditor` in class `OutlineLinkingHelper`
    Parameters:
      `selection` - the outline selection (may be `null` or empty)

  - ### linkToEditor

    protected void linkToEditor(org.eclipse.ui.texteditor.ITextEditor editor, org.eclipse.jface.viewers.IStructuredSelection selection)
    Tells to link the given outline selection to the given text editor.

    This implementation attempts to adapt the selection's first element to an `IElement` through the `content adapter`. If the adapter element is an `ISourceElement` and is contained in the given editor as computed by `isInEditor(IElement, IEditorPart)`, the identifying range of the source element is selected and revealed in the text editor.

    Parameters:
      `editor` - the text editor (never `null`)
      `selection` - the outline selection (never `null`, never empty)

  - ### getLinkedSelection

    protected org.eclipse.jface.viewers.IStructuredSelection getLinkedSelection(org.eclipse.jface.viewers.ISelection selection, org.eclipse.core.runtime.IProgressMonitor monitor)
    Returns the outline selection corresponding to the given selection in the editor.

    This implementation delegates to `getLinkedSelection(ITextSelection, IProgressMonitor)` if the given selection is a text selection. If the given selection is a structured selection, it is returned unchanged. Otherwise, `null` is returned.

    Parameters:
      `selection` - the selection in the editor (never `null`, never empty)
      `monitor` - a progress monitor (never `null`). The caller must not rely on `IProgressMonitor.done()` having been called by the receiver
    Returns:
      the outline selection corresponding to the given selection in the editor, or `null`
    Throws:
      `org.eclipse.core.runtime.OperationCanceledException` - if this method is canceled

  - ### getLinkedSelection

    protected org.eclipse.jface.viewers.IStructuredSelection getLinkedSelection(org.eclipse.jface.text.ITextSelection selection, org.eclipse.core.runtime.IProgressMonitor monitor)
    Returns the outline selection corresponding to the given text selection in the editor.

    This implementation finds the smallest `ISourceElement` that includes the offset of the given selection and returns a selection containing a single outline element corresponding to the found source element, as determined by the `content adapter`.

    Parameters:
      `selection` - the text selection in the editor (never `null`, never empty)
      `monitor` - a progress monitor (never `null`). The caller must not rely on `IProgressMonitor.done()` having been called by the receiver
    Returns:
      the outline selection corresponding to the given selection in the editor, or `null`
    Throws:
      `org.eclipse.core.runtime.OperationCanceledException` - if this method is canceled

  - ### getTargetEditor

    protected org.eclipse.ui.IEditorPart getTargetEditor()
    Returns the editor the outline should be linked to.

    This implementation returns the editor that created the outline page or, if that editor is a multi-page editor, the currently selected editor page.

    Returns:
      the editor the outline should be linked to, or `null`

  - ### isInEditor

    protected boolean isInEditor(IElement element, org.eclipse.ui.IEditorPart editor)
    Returns whether the given element is contained in the given editor.

    This implementation uses the `input element provider` to obtain an `IElement` corresponding to the editor input. It then checks whether the `IElement` `contains` the given element and returns the result.

    Parameters:
      `element` - may be `null`
      `editor` - not `null`
    Returns:
      `true` if the element is contained in the editor, and `false` otherwise

  - ### getContentAdapter

    protected IContentAdapter getContentAdapter()
    Returns the installed content adapter, or a `NullContentAdapter` if none.

    This implementation returns the content adapter provided by the outline page, if the outline page is an `IContentAdapterProvider`.

    Returns:
      an `IContentAdapter` (never `null`)