pm - a progress monitor, or null if progress reporting and
cancellation are not desired. The monitor is only valid for the duration
of the invocation of this method. Callers may call IProgressMonitor.done()
after this method returns or throws an exception, but this is not strictly
required.