Package org.jetbrains.mps.openapi.module
Interface SearchScope
- 
- All Known Implementing Classes:
 AllUserModelsScope,BaseScope,ConditionalScope,EditableFilteringScope,EmptySearchScope,FilteredScope,FindUsagesScope,GlobalScope,ModelsScope,ModulesScope,Project.ProjectScope,ProjectScope,VisibleDepsSearchScope
public interface SearchScopeShould be used only as find usages search scope. BEWARE, API here is inconsistent and may be counter-intuitive. In fact, this interface addresses two distinct aspects. First one is to supply set of models/modules where Finder shall look for occurrences. Another is to help finders deal with SModuleReference/SModelReference they may encounter while doing their job. These areresolve(SModelReference),resolve(SModuleReference)andresolve(SNodeReference). General rule is that for reference to any module/model that are part of search scope, respective resolve shall answer with a model object. These methods, however, are not limited to modules/models of the search scope, and may answer models/modules/nodes from a broader scope. Their primary use is to support queries with references instead of full-fledged objects. When a Finder receives a query to find SNodeReference, it might need a mechanism to obtain SNode from the reference, and it uses respective methods of this interface. Indeed, resolve() functionality shall be separate and either extracted into dedicatedResolverinterface available throughjetbrains.mps.ide.findusages.model.SearchQueryor replaced withSRepositoryavailable separately. Perhaps, if the only legitimate use of resolve() is query input,jetbrains.mps.ide.findusages.model.holders.IHolderneeds re-work to pass objects, rather than references (resolve them externally to Finder). There's nowSearchObjectResolverresponsible to translate IHolder's values into model objects, andresolve()methods of this interface serve as fall-back solution only. Besides, presence of bothgetModels()andgetModules()method is confusing as well, as there's no contract whether they are synchronized/aligned (i.e. ifgetModules()yields modules for any model fromgetModels()and vice versa, if a presence of module means its models would be amonggetModels(). E.g. if a Finder looks in models, does it need to combine getModels() + getModules().selectMany(m->m.getModels()) or not? What if a Finder is capable to look into both SModule and SModel? Having said that, it's apparent the interface (and Find Usages subsystem) deserves thorough refactoring/redesign. Alas, there's not enough outer pressure yet to push the change, and we move on, with this comment in a desperate hope future generations forgive us. 
- 
- 
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description Iterable<SModel>getModels()Iterable<SModule>getModules()SModelresolve(SModelReference reference)Finder use this method to go from model reference to SModel object, Find Usages client may use this method to limit what's visible/accessible to a Finder.default SNoderesolve(SNodeReference reference)Find out if a node is visible in the scope.SModuleresolve(SModuleReference reference)Finder use this method to go from module reference to SModule object, Find Usages client may use this method to limit what's visible/accessible to a Finder. 
 - 
 
- 
- 
Method Detail
- 
getModules
@NotNull Iterable<SModule> getModules()
- Returns:
 - all modules 
jetbrains.mps.ide.findusages.findalgorithm.finders.Findershall look into for occurrences 
 
- 
getModels
@NotNull Iterable<SModel> getModels()
- Returns:
 - all models 
jetbrains.mps.ide.findusages.findalgorithm.finders.Findershall look into for occurrences 
 
- 
resolve
@Nullable SModel resolve(@NotNull SModelReference reference)
Finder use this method to go from model reference to SModel object, Find Usages client may use this method to limit what's visible/accessible to a Finder. Generally, finder use this method to resolve references to search values shall always resolve references to models fromgetModels()- Parameters:
 reference- model to look up in the scope- Returns:
 - model instance, or 
nullif model with specified reference is not visible in the scope 
 
- 
resolve
@Nullable SModule resolve(@NotNull SModuleReference reference)
Finder use this method to go from module reference to SModule object, Find Usages client may use this method to limit what's visible/accessible to a Finder. shall always resolve references to modules fromgetModules()- Parameters:
 reference- module to look up in the scope- Returns:
 - module instance, or 
nullif there's no such module in the scope 
 
- 
resolve
@Nullable default SNode resolve(@NotNull SNodeReference reference)
Find out if a node is visible in the scope. Caller is responsible to ensure proper model access- Parameters:
 reference- node to look up in the scope- Returns:
 - node instance of 
nullif scope doesn't know it. 
 
 - 
 
 -