display_.getSearchOracle().navigationTargetFromSuggestion(
event.getSelectedItem());
// create full file path and position
String srcFile = target.getFile();
final FileSystemItem srcItem = FileSystemItem.createFile(srcFile);
final FilePosition pos = target.getPosition();
// fire editing event (delayed so the Enter keystroke
// doesn't get routed into the source editor)
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute()
{
display_.getSearchDisplay().clear();
display_.getSearchOracle().clear();
if (observer_ != null)
observer_.onCompleted();
fileTypeRegistry.editFile(srcItem, pos);
}
});
}
});
searchDisplay.addCloseHandler(new CloseHandler<SearchDisplay>() {
@Override
public void onClose(CloseEvent<SearchDisplay> event)
{
display_.getSearchDisplay().clear();
if (observer_ != null)
observer_.onCancel();
}
});
// various conditions invalidate the search oracle's cache
searchDisplay.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event)
{
display_.getSearchOracle().clear();
}
});
searchDisplay.addFocusHandler(new FocusHandler() {
@Override
public void onFocus(FocusEvent event)
{
display_.getSearchOracle().clear();
}
});
eventBusHandlers_.add(
eventBus.addHandler(FileChangeEvent.TYPE, new FileChangeHandler() {
@Override
public void onFileChange(FileChangeEvent event)
{
// if this was an R file then invalide the cache
CodeSearchOracle oracle = display_.getSearchOracle();
if (oracle.hasCachedResults())
{
FileSystemItem fsi = event.getFileChange().getFile();
if (fsi.getExtension().toLowerCase().equals(".r"))
oracle.clear();
}
}
}));