FAQ How do I implement a search operation?

A search operation is initiated from the performAction method
on a search page. The search can run either in a blocking manner, thus preventing
the user from doing further work until the search is done, or
in the background. To run the search in a blocking manner, use the
IRunnableContext available from the ISearchPageContainer
instance:

To run your query in the background, create and schedule a
subclass of Job. Regardless of whether the search is
run in the foreground or the background, the mechanics of the search
operation itself will usually be the same.

If your search is operating on files in the workspace, you should ensure
that changes are batched to prevent autobuilds every time a search
result is created. Do this by making your operation subclass
WorkspaceModifyOperation in the blocking case or
WorkspaceJob in the nonblocking case.
For the rest of this FAQ, we&#146;ll assume

that you&#146;re writing a search on the workspace.

The purpose of your search operation is to locate the files that match
the search parameters and to generate search result markers for each
match. One common method of doing this is to use a resource visitor.
Here is the general structure of a simple search operation:

If your search is located within a specific portion of the file, you should fill in the appropriate
attributes on the search result marker (LINE_NUMBER, CHAR_START,
and CHAR_END from IMarker). None of these attributes is required;
in some cases, a search can simply identify an entire file.