package jetbrains.mps.ide.findusages.findalgorithm.finders;
/*Generated by MPS */
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.ide.findusages.FindersManager;
import jetbrains.mps.ide.findusages.model.SearchResults;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.ide.findusages.model.SearchQuery;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
/**
* Clients need to persist informations about finders active at some point back in time (e.g. Usages View).
* To accomplish that, we identify finders with a string (finder implementation class fqn, in fact, although we don't load
* classes using it. It's very important to understand the difference). This class knows how to get back to genertated finder from
* this identity string and is a finder proxy, per se.
*/
public final class ReloadableFinder extends BaseFinder {
private final String myFinderIdentity;
public ReloadableFinder(@NotNull String finderClass) {
myFinderIdentity = finderClass;
}
public ReloadableFinder(GeneratedFinder finder) {
myFinderIdentity = finder.getClass().getName();
}
@NotNull
public String getPersistenceIdentity() {
return myFinderIdentity;
}
private IInterfacedFinder getFinder() {
return FindersManager.getInstance().getFinder(myFinderIdentity);
}
@Override
public String getDescription() {
IInterfacedFinder finder = getFinder();
return (finder == null ? super.getDescription() : finder.getDescription());
}
@Override
public SearchResults<SNode> find(SearchQuery query, ProgressMonitor monitor) {
IInterfacedFinder finder = getFinder();
if (finder == null) {
return new SearchResults();
}
return finder.find(query, monitor);
}
}