code: protected INode computeHighlightRangeSourceReference() {
  		ISourceViewer sourceViewer = getSourceViewer();
  		if (sourceViewer == null)
  			return null;
  
  		StyledText styledText = sourceViewer.getTextWidget();
  		if (styledText == null)
  			return null;
  
  		int caret = 0;
  		if (sourceViewer instanceof ITextViewerExtension5) {
  			ITextViewerExtension5 extension = (ITextViewerExtension5) sourceViewer;
  			caret = extension.widgetOffset2ModelOffset(styledText
  					.getCaretOffset());
  		} else {
  			int offset = sourceViewer.getVisibleRegion().getOffset();
  			caret = offset + styledText.getCaretOffset();
  		}
  		// System.out.println("Compute element at "+caret);
  		INode element = getElementAt(caret, false);
  
  		// if (!(element instanceof INode))
  		// return null;
  
  		// if (element.getElementType() == IJavaElement.IMPORT_DECLARATION) {
  		//
  		// IImportDeclaration declaration= (IImportDeclaration) element;
  		// IImportContainer container= (IImportContainer)
  		// declaration.getParent();
  		// ISourceRange srcRange= null;
  		//
  		// try {
  		// srcRange= container.getSourceRange();
  		// } catch (JavaModelException e) {
  		// }
  		//
  		// if (srcRange != null && srcRange.getOffset() == caret)
  		// return container;
  		// }
  
  		return element;
  	}
docs: Computes and returns the source reference that includes the caret and
  serves as provider for the outline page selection and the editor range
  indication.
  
  @return the computed source reference
  @since 3.0