Class ModelDependenciesManager


  • public class ModelDependenciesManager
    extends Object
    NOTE: THIS CLASS MAKES DUBIOUS ASSUMPTIONS, USES SOME DEPRECATED API, ITS USE IS DISCOURAGED. Chances are we replace it with another facility or drop altogether (there's little value in model dependency caching) Please use ModelDependencyResolver instead

    Build (and optionally maintain) set of all languages, imported directly and indirectly. The manager represents snapshot of all imported languages and doesn't update in unless invalidated. With trackModelChanges() it tracks changes in the designated model and updates own state appropriately. With trackRepositoryChanges(org.jetbrains.mps.openapi.module.SRepository), changes to repository would invalidate the manager.

    Generally, there are two distinct patterns in using this manager, "lifecycle" and "snapshot":

       ModelDependenciesManager mdm = new ModelDependenciesManager(model).trackModelChanges().trackRepositoryChanges(repo);
       process(mdm.getAllImportedLanguages());
       ...
       // changes in models are reflected in MDM
       process(mdm.getAllImportedLanguages());
       ...
       // much later
       mdm.dispose();
     
    vs.
       ModelDependenciesManager mdm = new ModelDependenciesManager(model)
       process(mdm.getAllImportedModels());
       mdm.dispose();
     

    FIXME perhaps, worth moving to subpackage of j.m.smodel, as it's pure model functionality, unrelated to project

    • Constructor Detail

      • ModelDependenciesManager

        public ModelDependenciesManager​(@NotNull
                                        SModel model)
    • Method Detail

      • getAllImportedLanguagesIds

        public Collection<SLanguage> getAllImportedLanguagesIds()
        Returns:
        snapshot of model dependencies (up-to-date state depends on listeners installed)
      • dispose

        public void dispose()
      • getModel

        protected SModel getModel()
      • isDependency

        protected boolean isDependency​(SLanguage langId)
      • invalidate

        public void invalidate()
      • handle

        protected void handle​(SLanguage lang,
                              Collection<SLanguage> retval)
        Process language reference dependency
        Parameters:
        lang - reference to language module, never null. Language it points to not necessarily resolves
        retval - collection to fill with languages of interest
      • handle

        protected void handle​(DevKit devkit,
                              Collection<SLanguage> retval)
        Process devkit dependency
        Parameters:
        devkit - reference to devkit, not null.
        retval - collection to fill with languages of interest
      • trackModelChanges

        public ModelDependenciesManager trackModelChanges()
        Attach a listener to the model to track dependencies added through SModelInternal
        Returns:
        this for convenience
      • trackRepositoryChanges

        public ModelDependenciesManager trackRepositoryChanges​(SRepository repository)
        Attach a listener to given repository to reflect changes in model's dependencies
        Returns:
        this for convenience