getTextWidget().showSelection();
		public void run() {			try {				final ISourceViewer viewer= getSourceViewer();				final IDocument document= viewer.getDocument();					int position= widgetOffset2ModelOffset(viewer, viewer.getTextWidget().getCaretOffset());							// Check whether we are in a java code partititon and the preference is enabled				final IPreferenceStore store= getPreferenceStore();				final ITypedRegion region= TextUtilities.getPartition(document, IJavaPartitions.JAVA_PARTITIONING, position);				if (!store.getBoolean(PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION)) {					super.run();					return;								}				// Check whether right hand character of caret is valid identifier start				if (Character.isJavaIdentifierStart(document.getChar(position))) {					int offset= 0;					int order= CollationElementIterator.NULLORDER;					short previous= Short.MAX_VALUE;					short next= Short.MAX_VALUE;					// Acquire collator for partition around caret					final String buffer= document.get(position, region.getOffset() + region.getLength() - position);					final CollationElementIterator iterator= fCollator.getCollationElementIterator(buffer);					// Iterate to first upper-case character					do {						// Check whether we reached end of word						offset= iterator.getOffset();						if (!Character.isJavaIdentifierPart(document.getChar(position + offset)))							throw new BadLocationException();						// Test next characters						order= iterator.next();						next= CollationElementIterator.tertiaryOrder(order);						if (next <= previous)							previous= next;						else							break;					} while (order != CollationElementIterator.NULLORDER);					// Check for leading underscores									position += offset;					if (Character.getType(document.getChar(position - 1)) != Character.CONNECTOR_PUNCTUATION) {						setCaretPosition(position);						fireSelectionChanged();						return;					}				}			} catch (BadLocationException exception) {				// Use default behavior			}			super.run();		}