OccurrencesFinder finder = new OccurrencesFinder();
ASTNode node= NodeFinder.perform(astRoot, selection.getOffset(), selection.getLength()); if (!(node instanceof Name)) { if (!fStickyOccurrenceAnnotations) removeOccurrenceAnnotations(); return; }  IBinding binding= ((Name)node).resolveBinding(); if (binding == null && fStickyOccurrenceAnnotations) return;   OccurrencesFinder finder = new OccurrencesFinder(binding);
	protected void updateOccurrenceAnnotations(ITextSelection selection, CompilationUnit astRoot) {		if (!fMarkOccurrenceAnnotations)			return;				if (astRoot == null || selection == null)			return;				IDocument document= getSourceViewer().getDocument();		if (document == null)			return;				if (fOccurrencesFinderJob != null)			fOccurrencesFinderJob.cancel();		ExceptionOccurrencesFinder exceptionFinder= new ExceptionOccurrencesFinder();		String message= exceptionFinder.initialize(astRoot, selection.getOffset(), selection.getLength());		List matches= new ArrayList();		if (message == null) {			matches= exceptionFinder.perform();		}		if (matches.size() == 0) {		// Find the matches && extract positions so we can forget the AST			OccurrencesFinder finder = new OccurrencesFinder();			message= finder.initialize(astRoot, selection.getOffset(), selection.getLength());			if (message == null) {				matches= finder.perform();			}		}				Position[] positions= new Position[matches.size()];		int i= 0;		for (Iterator each= matches.iterator(); each.hasNext();) {			ASTNode currentNode= (ASTNode)each.next();			positions[i++]= new Position(currentNode.getStartPosition(), currentNode.getLength());		}				fOccurrencesFinderJob= new OccurrencesFinderJob(document, positions);		//fOccurrencesFinderJob.setPriority(Job.DECORATE);		//fOccurrencesFinderJob.setSystem(true);		//fOccurrencesFinderJob.schedule();		((OccurrencesFinderJob) fOccurrencesFinderJob).run(new NullProgressMonitor());			}