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