package jetbrains.mps.tool.environment; /*Generated by MPS */ import jetbrains.mps.project.Project; import jetbrains.mps.library.ModulesMiner; import org.jetbrains.annotations.NotNull; import jetbrains.mps.smodel.ModuleRepositoryFacade; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.smodel.Generator; /** * Allows to fill an empty project with given modules at runtime */ public final class ProjectModulesFiller { private final Project myProject; private final Iterable<ModulesMiner.ModuleHandle> myHandlesToLoad; public ProjectModulesFiller(@NotNull Project project, Iterable<ModulesMiner.ModuleHandle> moduleHandles) { myProject = project; myHandlesToLoad = moduleHandles; } public Project load() { final ModuleRepositoryFacade rf = new ModuleRepositoryFacade(myProject); myProject.getModelAccess().runWriteAction(new Runnable() { public void run() { for (ModulesMiner.ModuleHandle moduleHandle : myHandlesToLoad) { SModule module = rf.instantiateModule(moduleHandle, myProject); if (module instanceof Generator) { // With MM delivering GeneratorDescriptors and MRF capable of instantiating them, we can face Generator here // FIXME at the moment, Project is not ready to receive Generator as a module to add need to refactor it first. continue; } myProject.addModule(module); } } }); return myProject; } }