package jetbrains.mps.lang.migration.runtime.base; /*Generated by MPS */ import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.project.Project; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.project.DevKit; import jetbrains.mps.project.Solution; import jetbrains.mps.smodel.tempmodel.TempModule; import java.util.Set; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.HashSet; import jetbrains.mps.project.dependency.GlobalModuleDependenciesManager; import org.jetbrains.mps.openapi.language.SLanguage; import org.jetbrains.annotations.NotNull; import jetbrains.mps.smodel.SLanguageHierarchy; import jetbrains.mps.smodel.language.LanguageRegistry; import jetbrains.mps.project.AbstractModule; import org.jetbrains.mps.openapi.module.SModuleReference; import jetbrains.mps.project.structure.modules.ModuleDescriptor; public class MigrationModuleUtil { public static Iterable<SModule> getMigrateableModulesFromProject(Project p) { Iterable<SModule> modules = p.getProjectModulesWithGenerators(); return Sequence.fromIterable(modules).where(new IWhereFilter<SModule>() { public boolean accept(SModule it) { return isModuleMigrateable(it); } }).ofType(SModule.class); } public static boolean isModuleMigrateable(SModule m) { return !((m instanceof DevKit)) && !((Solution.isBootstrapSolution(m.getModuleReference()))) && !((m.isReadOnly())) && !((m instanceof TempModule)); } public static Set<SModule> getModuleDependencies(SModule module) { Set<SModule> dependencies = SetSequence.fromSetWithValues(new HashSet<SModule>(), new GlobalModuleDependenciesManager(module).getModules(GlobalModuleDependenciesManager.Deptype.VISIBLE)); SetSequence.fromSet(dependencies).addElement(module); return dependencies; } public static Set<SLanguage> getUsedLanguages(@NotNull SModule module) { return new SLanguageHierarchy(LanguageRegistry.getInstance(module.getRepository()), module.getUsedLanguages()).getExtended(); } public static int getDependencyVersion(@NotNull SModule module, @NotNull SModule dependency) { if (module instanceof AbstractModule) { return ((AbstractModule) module).getDependencyVersion(dependency, false); } throw new IllegalArgumentException("We are able to work only with AbstractModule instances"); } public static int getUsedLanguageVersion(@NotNull SModule module, @NotNull SLanguage usedLang) { if (module instanceof AbstractModule) { return ((AbstractModule) module).getUsedLanguageVersion(usedLang, false); } throw new IllegalArgumentException("We are able to work only with AbstractModule instances"); } public static void setDepVersion(SModule module, SModuleReference dependency, int version) { ModuleDescriptor moduleDescriptor = ((AbstractModule) module).getModuleDescriptor(); if (moduleDescriptor == null) { throw new IllegalArgumentException(); } moduleDescriptor.getDependencyVersions().put(dependency, version); ((AbstractModule) module).setChanged(); } public static boolean allDependenciesActual(SModule module) { for (SModule dep : SetSequence.fromSet(getModuleDependencies(module))) { int currentDepVersion = ((AbstractModule) dep).getModuleVersion(); int ver = getDependencyVersion(module, dep); if (ver != currentDepVersion) { return false; } } return true; } }