package jetbrains.mps.lang.plugin.scripts; /*Generated by MPS */ import jetbrains.mps.lang.script.runtime.BaseMigrationScript; import jetbrains.mps.lang.script.runtime.AbstractMigrationRefactoring; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.internal.collections.runtime.Sequence; import org.jetbrains.mps.openapi.model.SReference; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.smodel.DynamicReference; import java.util.Map; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import jetbrains.mps.internal.collections.runtime.SetSequence; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.model.SNodeReference; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; public final class FixDynamicReferences_MigrationScript extends BaseMigrationScript { public FixDynamicReferences_MigrationScript() { super("Replace dynamic references with static references"); this.addRefactoring(new AbstractMigrationRefactoring() { @Override public String getName() { return "dynamic refs"; } @Override public String getAdditionalInfo() { return "dynamic refs"; } @Override public SAbstractConcept getApplicableConcept() { return MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept"); } @Override public boolean isApplicableInstanceNode(SNode node) { return Sequence.fromIterable(((Iterable<SReference>) node.getReferences())).any(new IWhereFilter<SReference>() { public boolean accept(SReference it) { return it instanceof DynamicReference; } }); } @Override public void doUpdateInstanceNode(SNode node) { Map<String, SNode> roleToTarget = MapSequence.fromMap(new HashMap<String, SNode>()); for (SReference ref : Sequence.fromIterable(node.getReferences())) { if (!(ref instanceof DynamicReference)) { continue; } MapSequence.fromMap(roleToTarget).put(ref.getRole(), ref.getTargetNode()); } for (Map.Entry<String, SNode> m : SetSequence.fromSet(roleToTarget.entrySet())) { node.setReferenceTarget(m.getKey(), m.getValue()); } } @Override public boolean isShowAsIntention() { return false; } }); } @Nullable @Override public SNodeReference getScriptNode() { return PersistenceFacade.getInstance().createNodeReference("r:00000000-0000-4000-0000-011c89590367(jetbrains.mps.lang.plugin.scripts)/930311433812684751"); } }