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.language.SLanguage; import java.util.Collection; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.util.IterableUtil; import jetbrains.mps.smodel.SModelOperations; import jetbrains.mps.ide.findusages.model.SearchResult; /** * Look up imports of the language (aka used language) in scope models. * Doesn't look into actual model content, use {@link jetbrains.mps.ide.ui.finders.LanguageUsagesFinder } to find actual usages instead. * Tolerates single {@link org.jetbrains.mps.openapi.language.SLanguage } as lookup object, use {@link jetbrains.mps.findUsages.CompositeFinder } to look up few languages at once */ public class LanguageModelImportFinder extends BaseFinder { public LanguageModelImportFinder() { } @Override public String getDescription() { return "Language Usages in Imports"; } public SearchResults find(SearchQuery query, ProgressMonitor monitor) { SearchResults searchResults = new SearchResults(); Object lookupObject = query.getObjectHolder().getObject(); if (!(lookupObject instanceof SLanguage)) { return searchResults; } final SLanguage language2lookup = (SLanguage) lookupObject; searchResults.getSearchedNodes().add(language2lookup); Collection<SModel> models = IterableUtil.asCollection(query.getScope().getModels()); monitor.start("Look up language imports", models.size()); for (SModel model : models) { if (monitor.isCanceled()) { return searchResults; } // XXX next code originates from ModuleUsagesFinder#collectUsagesInModels // I don't understand reason for isUserModel check, hence had dropped it if (SModelOperations.getAllLanguageImports(model).contains(language2lookup)) { searchResults.add(new SearchResult<SModel>(model, "model imports")); } monitor.advance(1); } monitor.done(); return searchResults; } }