package jetbrains.mps.ide.migration.wizard; /*Generated by MPS */ import java.util.List; import jetbrains.mps.ide.migration.ScriptApplied; import jetbrains.mps.lang.migration.runtime.base.Problem; import com.intellij.openapi.progress.ProgressIndicator; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.lang.migration.runtime.base.BaseScriptReference; import jetbrains.mps.lang.migration.runtime.base.MigrationScriptReference; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.internal.collections.runtime.SetSequence; import jetbrains.mps.migration.component.util.MigrationsUtil; import jetbrains.mps.ide.migration.check.MissingMigrationProblem; import java.util.Collections; import jetbrains.mps.lang.migration.runtime.base.RefactoringScriptReference; import jetbrains.mps.project.AbstractModule; public class MigrationsMissingError extends MigrationErrorDescriptor { private List<ScriptApplied> errors; public MigrationsMissingError(List<ScriptApplied> errors) { this.errors = errors; } public String getMessage() { return "Some migration scripts are missing.<br><br>" + "Missing scripts will be shown in ModelChecker after the migration wizard is closed.<br><br>" + "Migration can't continue."; } public Iterable<Problem> getProblems(ProgressIndicator progressIndicator) { final List<SModule> modules = ListSequence.fromList(errors).select(new ISelector<ScriptApplied, SModule>() { public SModule select(ScriptApplied it) { return it.getModule(); } }).toListSequence(); List<BaseScriptReference> sRefs = ListSequence.fromList(errors).select(new ISelector<ScriptApplied, BaseScriptReference>() { public BaseScriptReference select(ScriptApplied it) { return it.getScriptReference(); } }).distinct().toListSequence(); return ListSequence.fromList(sRefs).ofType(MigrationScriptReference.class).select(new ISelector<MigrationScriptReference, Problem>() { public Problem select(final MigrationScriptReference it) { List<SModule> languageUsages = ListSequence.fromList(modules).where(new IWhereFilter<SModule>() { public boolean accept(SModule module) { return SetSequence.fromSet(MigrationsUtil.getUsedLanguages(module)).contains(it.getLanguage()); } }).toListSequence(); return (Problem) new MissingMigrationProblem.MissingMigrationScriptProblem(it, Collections.min(ListSequence.fromList(languageUsages).select(new ISelector<SModule, Integer>() { public Integer select(SModule module) { return module.getUsedLanguageVersion(it.getLanguage()); } }).toListSequence())); } }).concat(ListSequence.fromList(sRefs).ofType(RefactoringScriptReference.class).select(new ISelector<RefactoringScriptReference, Problem>() { public Problem select(final RefactoringScriptReference it) { List<SModule> languageUsages = ListSequence.fromList(modules).where(new IWhereFilter<SModule>() { public boolean accept(SModule module) { return SetSequence.fromSet(MigrationsUtil.getModuleDependencies(module)).contains(it.getModule()); } }).toListSequence(); return (Problem) new MissingMigrationProblem.MissingRefactoringLogProblem(it, Collections.min(ListSequence.fromList(languageUsages).select(new ISelector<SModule, Integer>() { public Integer select(SModule module) { return ((AbstractModule) module).getDependencyVersion(it.getModule()); } }).toListSequence())); } })); } @Override public boolean canIgnore() { return false; } }