package jetbrains.mps.ide.ui.finders;
/*Generated by MPS */
import jetbrains.mps.ide.findusages.findalgorithm.finders.BaseFinder;
import jetbrains.mps.ide.findusages.model.SearchResults;
import jetbrains.mps.ide.findusages.model.SearchQuery;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.model.SModelReference;
import java.util.Set;
import org.jetbrains.mps.openapi.module.FindUsagesFacade;
import java.util.Collections;
import jetbrains.mps.smodel.SModelStereotype;
import jetbrains.mps.ide.findusages.model.SearchResult;
/**
* Look up SModelReference in imports of models from the scope.
* Search results are of type SModel
* FIXME I've got no idea why it resides in UI package, nor why it's in BL when it's plain Java
*/
public class ModelImportsUsagesFinder extends BaseFinder {
public ModelImportsUsagesFinder() {
}
@Override
public String getDescription() {
return "Usages in Imports";
}
@Override
public SearchResults find(SearchQuery query, ProgressMonitor monitor) {
SearchResults<SModel> searchResults = new SearchResults<SModel>();
Object value = query.getObjectHolder().getObject();
if (!(value instanceof SModelReference)) {
return searchResults;
}
SModelReference modelReference = (SModelReference) value;
searchResults.getSearchedNodes().add(modelReference);
Set<SModel> usages = FindUsagesFacade.getInstance().findModelUsages(query.getScope(), Collections.singleton(modelReference), monitor);
for (SModel modelDescriptor : usages) {
if (monitor.isCanceled()) {
return searchResults;
}
if (!(SModelStereotype.isUserModel(modelDescriptor))) {
continue;
}
searchResults.add(new SearchResult<SModel>(modelDescriptor, "usages in imports"));
}
return searchResults;
}
}