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