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