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