package jetbrains.mps.lang.core.util;
/*Generated by MPS */
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import org.jetbrains.mps.openapi.module.SModule;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.internal.collections.runtime.Sequence;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.lang.core.behavior.IOldCommentContainer__BehaviorDescriptor;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.editor.runtime.impl.cellActions.CommentUtil;
import jetbrains.mps.lang.migration.runtime.base.Problem;
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.internal.collections.runtime.CollectionSequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.lang.migration.runtime.base.DeprecatedConceptNotMigratedProblem;
public class OldCommentContainerMigration {
private SAbstractConcept concept;
private SModule module;
public OldCommentContainerMigration(@NotNull SAbstractConcept concept, @NotNull SModule module) {
this.concept = concept;
this.module = module;
}
public void migrate() {
Iterable<SNode> oldComments = Sequence.fromIterable(((Iterable<SModel>) module.getModels())).translate(new ITranslator2<SModel, SNode>() {
public Iterable<SNode> translate(SModel it) {
return it.getRootNodes();
}
}).translate(new ITranslator2<SNode, SNode>() {
public Iterable<SNode> translate(SNode it) {
return SNodeOperations.getNodeDescendants(((SNode) it), SNodeOperations.asSConcept(concept), false, new SAbstractConcept[]{});
}
});
for (SNode comment : Sequence.fromIterable(oldComments)) {
Iterable<SNode> commentedNodes = IOldCommentContainer__BehaviorDescriptor.getCommentedNodes_id3$Sh7m_tmZE.invoke(SNodeOperations.cast(comment, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x39384475a5756fb0L, "jetbrains.mps.lang.core.structure.IOldCommentContainer")));
if (Sequence.fromIterable(commentedNodes).isNotEmpty()) {
SNode next = comment;
for (SNode commentedNode : Sequence.fromIterable(commentedNodes)) {
SNodeOperations.insertNextSiblingChild(next, commentedNode);
next = commentedNode;
}
for (SNode commentedNode : Sequence.fromIterable(commentedNodes)) {
CommentUtil.commentOut(commentedNode);
}
}
SNodeOperations.deleteNode(comment);
}
}
public Iterable<Problem> check() {
{
final SearchScope scope = CommandUtil.createScope(module);
QueryExecutionContext context = new QueryExecutionContext() {
public SearchScope getDefaultSearchScope() {
return scope;
}
};
return CollectionSequence.fromCollection(CommandUtil.instances(CommandUtil.createConsoleScope(null, false, context), SNodeOperations.asSConcept(concept), false)).select(new ISelector<SNode, Problem>() {
public Problem select(SNode it) {
return ((Problem) new DeprecatedConceptNotMigratedProblem(it));
}
});
}
}
}