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