@Override
  protected void performChange(IEditorPart part, IDocument document) throws CoreException {
    try {
      super.performChange(part, document);
      if (part == null) {
        return;
      }

      if (fLinkedProposalModel != null) {
        if (fLinkedProposalModel.hasLinkedPositions() && part instanceof CEditor) {
          // enter linked mode
          ITextViewer viewer = ((CEditor) part).getViewer();
          new LinkedProposalModelPresenter().enterLinkedMode(viewer, part, fLinkedProposalModel);
        } else if (part instanceof ITextEditor) {
          LinkedProposalPositionGroup.PositionInformation endPosition =
              fLinkedProposalModel.getEndPosition();
          if (endPosition != null) {
            // select a result
            int pos = endPosition.getOffset() + endPosition.getLength();
            ((ITextEditor) part).selectAndReveal(pos, 0);
          }
        }
      }
    } catch (BadLocationException e) {
      throw new CoreException(CUIStatus.createError(IStatus.ERROR, e));
    }
  }