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; } }