if(historyView != null) { historyView.selectRevision(new SVNRevision.Number(listSelection.getRevision())); }
	private void listSelectionChanged(IStructuredSelection selection) {		// If the editor was closed, reopen it.		if (editor == null || editor.getSelectionProvider() == null) {			try {				contents.reset();				showAnnotations(svnFile, svnAnnotateBlocks, contents, false);			} catch (PartInitException e) {				return;			} catch (IOException e) {				return;			}		}				ISelectionProvider selectionProvider = editor.getSelectionProvider();		if (selectionProvider == null) {			// Failed to open the editor but what else can we do.			return;		}				ITextSelection textSelection = (ITextSelection) selectionProvider.getSelection();		AnnotateBlock listSelection = (AnnotateBlock) selection.getFirstElement();        // IStructuredSelection#getFirstElement can return null        if (listSelection == null) {            return;        }        		/**		 * Ignore event if the current text selection is already equal to the corresponding		 * list selection.  Nothing to do.  This prevents infinite event looping.		 *		 * Extra check to handle single line deltas 		 */				if (textSelection.getStartLine() == listSelection.getStartLine() && textSelection.getEndLine() == listSelection.getEndLine() && selection.equals(previousListSelection)) {			return;		}				// If the last selection was a text selection then bale to prevent a selection loop.		if (!lastSelectionWasText) {			try {				int start = document.getLineOffset(listSelection.getStartLine());				int end = document.getLineOffset(listSelection.getEndLine() + 1);				editor.selectAndReveal(start, end - start);				if (editor != null && !page.isPartVisible(editor)) {					page.activate(editor);				}			} catch (BadLocationException e) {				// Ignore - nothing we can do.			}		}						// Select the revision in the history view.		if(historyView != null) {			historyView.selectRevision(new SVNRevision.Number(listSelection.getRevision()));		}		lastSelectionWasText = false;				}