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