fInformationPresenter.setDocumentPartitioning(IJavaPartitions.JAVA_PARTITIONING);
		public void run() {			/**			 * Information provider used to present the information.			 * 			 * @since 3.0			 */			class InformationProvider implements IInformationProvider, IInformationProviderExtension2 {				private IRegion fHoverRegion;				private String fHoverInfo;				private IInformationControlCreator fControlCreator;								InformationProvider(IRegion hoverRegion, String hoverInfo, IInformationControlCreator controlCreator) {					fHoverRegion= hoverRegion;					fHoverInfo= hoverInfo;					fControlCreator= controlCreator;				}				/*				 * @see org.eclipse.jface.text.information.IInformationProvider#getSubject(org.eclipse.jface.text.ITextViewer, int)				 */				public IRegion getSubject(ITextViewer textViewer, int invocationOffset) {										return fHoverRegion;				}				/*				 * @see org.eclipse.jface.text.information.IInformationProvider#getInformation(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)				 */				public String getInformation(ITextViewer textViewer, IRegion subject) {					return fHoverInfo;				}				/*				 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()				 * @since 3.0				 */				public IInformationControlCreator getInformationPresenterControlCreator() {					return fControlCreator;				}			}			ISourceViewer sourceViewer= getSourceViewer();			if (sourceViewer == null) {					fTextOperationAction.run();				return;			}							if (sourceViewer instanceof ITextViewerExtension4)  {				ITextViewerExtension4 extension4= (ITextViewerExtension4) sourceViewer;				if (extension4.moveFocusToWidgetToken())					return;			}						if (! (sourceViewer instanceof ITextViewerExtension2)) {				fTextOperationAction.run();				return;			}							ITextViewerExtension2 textViewerExtension2= (ITextViewerExtension2) sourceViewer;						// does a text hover exist?			ITextHover textHover= textViewerExtension2.getCurrentTextHover();			if (textHover == null) {				fTextOperationAction.run();				return;							}			Point hoverEventLocation= textViewerExtension2.getHoverEventLocation();			int offset= computeOffsetAtLocation(sourceViewer, hoverEventLocation.x, hoverEventLocation.y);			if (offset == -1) {				fTextOperationAction.run();				return;							}							try {				// get the text hover content				String contentType= TextUtilities.getContentType(sourceViewer.getDocument(), IJavaPartitions.JAVA_PARTITIONING, offset);				IRegion hoverRegion= textHover.getHoverRegion(sourceViewer, offset);										if (hoverRegion == null)					return;								String hoverInfo= textHover.getHoverInfo(sourceViewer, hoverRegion);				IInformationControlCreator controlCreator= null;								if (textHover instanceof IInformationProviderExtension2)					controlCreator= ((IInformationProviderExtension2)textHover).getInformationPresenterControlCreator();					IInformationProvider informationProvider= new InformationProvider(hoverRegion, hoverInfo, controlCreator);				fInformationPresenter.setOffset(offset);					fInformationPresenter.setInformationProvider(informationProvider, contentType);				fInformationPresenter.showInformation();			} catch (BadLocationException e) {							}		}