package jetbrains.mps.ide.mpsmigration.v_2017_1;
/*Generated by MPS */
import jetbrains.mps.migration.global.BaseProjectMigration;
import jetbrains.mps.project.Project;
import org.jetbrains.mps.openapi.module.SearchScope;
import jetbrains.mps.lang.smodel.query.runtime.CommandUtil;
import jetbrains.mps.lang.smodel.query.runtime.QueryExecutionContext;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.smodel.Language;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import jetbrains.mps.generator.GenerationFacade;
import jetbrains.mps.internal.collections.runtime.IVisitor;
import jetbrains.mps.generator.impl.dependencies.GenerationDependenciesCache;
public class SetGenRequiredToEmptyAspects extends BaseProjectMigration {
public SetGenRequiredToEmptyAspects() {
super("jetbrains.mps.ide.mpsmigration.v35." + SetGenRequiredToEmptyAspects.class.getSimpleName());
}
@Override
public boolean doExecute(Project project) {
{
final SearchScope scope = CommandUtil.createScope(project);
final QueryExecutionContext context = new QueryExecutionContext() {
public SearchScope getDefaultSearchScope() {
return scope;
}
};
final Wrappers._T<Iterable<SModel>> modelsToClean = new Wrappers._T<Iterable<SModel>>();
project.getRepository().getModelAccess().runReadAction(new Runnable() {
public void run() {
modelsToClean.value = Sequence.fromIterable(CommandUtil.modules(CommandUtil.createConsoleScope(null, false, context))).ofType(Language.class).translate(new ITranslator2<Language, SModel>() {
public Iterable<SModel> translate(Language it) {
return it.getModels();
}
}).where(new IWhereFilter<SModel>() {
public boolean accept(SModel it) {
return !(it.getRootNodes().iterator().hasNext());
}
});
}
});
Sequence.fromIterable(modelsToClean.value).where(new IWhereFilter<SModel>() {
public boolean accept(SModel it) {
return GenerationFacade.canGenerate(it);
}
}).visitAll(new IVisitor<SModel>() {
public void visit(SModel it) {
GenerationDependenciesCache.getInstance().discard(it);
}
});
}
return true;
}
@Override
public String getDescription() {
return "Make empty language aspects 'generation required'";
}
}