package jetbrains.mps.lang.actions.migration;
/*Generated by MPS */
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.smodel.Language;
import java.util.Map;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.util.Pair;
import java.util.List;
import java.util.HashMap;
import java.util.Set;
import java.util.HashSet;
import org.jetbrains.mps.openapi.module.SearchScope;
import jetbrains.mps.lang.smodel.query.runtime.CommandUtil;
import jetbrains.mps.lang.smodel.query.runtime.QueryExecutionContext;
import java.util.Collection;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.internal.collections.runtime.CollectionSequence;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.IAttributeDescriptor;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import java.util.ArrayList;
import org.jetbrains.mps.openapi.persistence.PersistenceFacade;
import jetbrains.mps.smodel.SModelUtil_new;
import org.jetbrains.mps.openapi.model.SNodeAccessUtil;
/*package*/ class SideTransformActionsMigrationHelper {
private SModule myModule;
private Language myLanguage;
private Map<SNode, Map<Pair<SNode, String>, List<SNode>>> myActionsToConceptAndTagToBuilder = new HashMap<SNode, Map<Pair<SNode, String>, List<SNode>>>();
private Map<Pair<SNode, String>, Set<SNode>> myConceptAndTagToActions = new HashMap<Pair<SNode, String>, Set<SNode>>();
private Map<Pair<SNode, String>, SNode> myMainMenus = new HashMap<Pair<SNode, String>, SNode>();
private Set<SNode> myNewlyCreatedMenus = new HashSet<SNode>();
private boolean myMigrateConceptFromSameLanguage;
/*package*/ SideTransformActionsMigrationHelper(SModule m, boolean migrateConceptFromThisLanguage) {
myModule = m;
myMigrateConceptFromSameLanguage = migrateConceptFromThisLanguage;
if (myModule instanceof Language) {
myLanguage = ((Language) myModule);
}
}
public void migrate() {
if (myLanguage == null) {
return;
}
{
final SearchScope scope = CommandUtil.createScope(myModule);
QueryExecutionContext context = new QueryExecutionContext() {
public SearchScope getDefaultSearchScope() {
return scope;
}
};
Collection<SNode> allSideTransformActions = CommandUtil.instances(CommandUtil.createConsoleScope(null, false, context), MetaAdapterFactory.getConcept(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108fad1c116L, "jetbrains.mps.lang.actions.structure.SideTransformHintSubstituteActions"), false);
for (SNode actions : CollectionSequence.fromCollection(allSideTransformActions)) {
for (SNode builder : ListSequence.fromList(SLinkOperations.getChildren(actions, MetaAdapterFactory.getContainmentLink(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108fad1c116L, 0x108fad1c117L, "actionsBuilder"))).where(new IWhereFilter<SNode>() {
public boolean accept(SNode it) {
return myMigrateConceptFromSameLanguage == isDefinedInSameLanguage(SLinkOperations.getTarget(it, MetaAdapterFactory.getReferenceLink(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x108facec6d6L, "applicableConcept")));
}
})) {
if (!(SConceptOperations.isExactly(SNodeOperations.asSConcept(SNodeOperations.getConcept(builder)), MetaAdapterFactory.getConcept(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, "jetbrains.mps.lang.actions.structure.SideTransformHintSubstituteActionsBuilder")))) {
AttributeOperations.setAttribute(builder, new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x7ce019826543db5L, "jetbrains.mps.lang.actions.structure.MigrateManuallyAnnotation")), SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x7ce019826543db5L, "jetbrains.mps.lang.actions.structure.MigrateManuallyAnnotation")));
continue;
}
addToConceptAndTagToBuilderMap(actions, builder);
addToBuilderToMenuMap(actions, builder);
}
}
Set<SNode> actionsKeySet = myActionsToConceptAndTagToBuilder.keySet();
for (SNode actions : SetSequence.fromSet(actionsKeySet)) {
Map<Pair<SNode, String>, List<SNode>> conceptAndTagToBuilder = myActionsToConceptAndTagToBuilder.get(actions);
for (Pair<SNode, String> key : SetSequence.fromSet(conceptAndTagToBuilder.keySet())) {
migrateSideTransformActions(actions, key.o1, key.o2, conceptAndTagToBuilder.get(key));
}
}
}
ActionMigrationHelper.addMissingImports(myNewlyCreatedMenus, ActionMigrationHelper.getEditorAspect(myLanguage), ActionMigrationHelper.getActionsAspect(myLanguage), myLanguage.getRepository());
if (!(myNewlyCreatedMenus.isEmpty())) {
ActionMigrationHelper.addModelImport(ActionMigrationHelper.getActionsAspect(myLanguage), ActionMigrationHelper.getEditorAspect(myLanguage));
}
}
private SNode getOrCreateMainMenu(SNode concept, String tag, SModel editorAspect) {
Pair<SNode, String> pair = new Pair<SNode, String>(concept, tag);
SNode menu = myMainMenus.get(pair);
if ((menu != null)) {
return menu;
}
Set<SNode> actions = myConceptAndTagToActions.get(pair);
assert actions.size() > 0;
if (!(myMigrateConceptFromSameLanguage)) {
return createMainContribution(tag, concept, editorAspect);
} else {
return findOrCreateMainMenu(tag, concept, editorAspect);
}
}
private SNode findOrCreateMainMenu(String tag, SNode concept, SModel editorAspect) {
SNode mainMenu;
if (eq_syzi2_a0b0r(tag, "default_RTransform")) {
mainMenu = findDefaultMenu(concept);
if (mainMenu == null) {
mainMenu = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x16be955f384efce1L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Default"));
SLinkOperations.setTarget(SNodeOperations.cast(mainMenu, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x16be955f384efce1L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Default")), MetaAdapterFactory.getReferenceLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x169efbc9a9048c53L, 0x5b7b4c4d511049b4L, "conceptDeclaration"), concept);
SNode leftRightSection = findOrCreateLeftRightSection(mainMenu);
SLinkOperations.addNewChild(leftRightSection, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, 0x6ec02d9918b4efbfL, "parts"), MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x7541587144d24773L, "jetbrains.mps.lang.editor.structure.TransformationMenuPart_Super"));
myNewlyCreatedMenus.add(mainMenu);
editorAspect.addRootNode(mainMenu);
}
} else {
mainMenu = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0ac4ee8L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Named"));
SPropertyOperations.set(mainMenu, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), getMainMenuName(concept, tag));
SLinkOperations.setTarget(SNodeOperations.cast(mainMenu, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0ac4ee8L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Named")), MetaAdapterFactory.getReferenceLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x169efbc9a9048c53L, 0x5b7b4c4d511049b4L, "conceptDeclaration"), concept);
AttributeOperations.createAndSetAttrbiute(SNodeOperations.cast(mainMenu, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0ac4ee8L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Named")), new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x7ce019825aa4e82L, "jetbrains.mps.lang.editor.structure.MigratedSideTransformMenuAttribute")), MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x7ce019825aa4e82L, "jetbrains.mps.lang.editor.structure.MigratedSideTransformMenuAttribute"));
SPropertyOperations.set(AttributeOperations.getAttribute(SNodeOperations.cast(mainMenu, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0ac4ee8L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Named")), new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x7ce019825aa4e82L, "jetbrains.mps.lang.editor.structure.MigratedSideTransformMenuAttribute"))), MetaAdapterFactory.getProperty(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x7ce019825aa4e82L, 0x7ce019825aa4f13L, "transformTag"), tag);
editorAspect.addRootNode(mainMenu);
}
myMainMenus.put(new Pair(concept, tag), mainMenu);
return mainMenu;
}
private SNode createMainContribution(String tag, SNode concept, SModel editorAspect) {
SNode contribution = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0c10ff0L, "jetbrains.mps.lang.editor.structure.TransformationMenuContribution"));
if (eq_syzi2_a0b0s(tag, "default_RTransform")) {
SLinkOperations.setTarget(contribution, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0c10ff0L, 0x5d3b34577b60a0bfL, "menuReference"), _quotation_createNode_syzi2_a0a0b0s(concept));
} else {
SModule module = SNodeOperations.getModel(concept).getModule();
if (module instanceof Language) {
SNode mainMenu = ActionMigrationHelper.findMainNamedMenu(concept, tag);
if (mainMenu != null) {
SLinkOperations.setTarget(contribution, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0c10ff0L, 0x5d3b34577b60a0bfL, "menuReference"), _quotation_createNode_syzi2_a0a0b0b0a1a81(mainMenu));
ActionMigrationHelper.addModelImport(editorAspect, SNodeOperations.getModel(mainMenu));
} else {
AttributeOperations.setAttribute(contribution, new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x7ce0198267c4eb2L, "jetbrains.mps.lang.editor.structure.MigrateManuallyAnnotation")), SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x7ce0198267c4eb2L, "jetbrains.mps.lang.editor.structure.MigrateManuallyAnnotation")));
}
}
}
SPropertyOperations.set(contribution, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), ActionMigrationHelper.getMainMenuContributionName(concept, tag));
myMainMenus.put(new Pair(concept, tag), contribution);
myNewlyCreatedMenus.add(contribution);
editorAspect.addRootNode(contribution);
return contribution;
}
private SNode findDefaultMenu(final SNode concept) {
SModel conceptEditorAspect = ActionMigrationHelper.getEditorAspect(myLanguage);
return ListSequence.fromList(SModelOperations.roots(conceptEditorAspect, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x16be955f384efce1L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Default"))).where(new IWhereFilter<SNode>() {
public boolean accept(SNode it) {
return eq_syzi2_a0a0a0a0a0a1a91(SLinkOperations.getTarget(it, MetaAdapterFactory.getReferenceLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x169efbc9a9048c53L, 0x5b7b4c4d511049b4L, "conceptDeclaration")), concept);
}
}).first();
}
private String getMainMenuName(SNode concept, String tag) {
return SPropertyOperations.getString(concept, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + "_" + tag + "_Menu";
}
private SNode createAdditionalMenu(SNode concept, String tag, SNode actions, SModel editorAspect) {
String newName = getAdditionalMenuName(actions, concept, tag);
SNode menu = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0ac4ee8L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Named"));
SPropertyOperations.set(menu, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), newName);
myNewlyCreatedMenus.add(menu);
SLinkOperations.setTarget(menu, MetaAdapterFactory.getReferenceLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x169efbc9a9048c53L, 0x5b7b4c4d511049b4L, "conceptDeclaration"), concept);
editorAspect.addRootNode(menu);
return menu;
}
private String getAdditionalMenuName(SNode actions, SNode concept, String tag) {
boolean isUniqueConcept = true;
boolean isUniqueTag = true;
for (SNode builder : ListSequence.fromList(SLinkOperations.getChildren(actions, MetaAdapterFactory.getContainmentLink(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108fad1c116L, 0x108fad1c117L, "actionsBuilder")))) {
if (neq_syzi2_a0a0c0y(SLinkOperations.getTarget(builder, MetaAdapterFactory.getReferenceLink(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x108facec6d6L, "applicableConcept")), concept)) {
isUniqueConcept = false;
}
if (neq_syzi2_a0b0c0y(SPropertyOperations.getString_def(builder, MetaAdapterFactory.getProperty(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x1099eb798f9L, "transformTag"), "default_RTransform"), tag)) {
isUniqueTag = false;
}
if (!(isUniqueConcept) && !(isUniqueTag)) {
break;
}
}
String oldName = ActionMigrationHelper.getValidName(SPropertyOperations.getString(actions, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")));
if (oldName == null) {
return SPropertyOperations.getString(concept, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + "_" + shortTag(tag) + "_" + "TransformMenu";
}
String newName;
if (isUniqueConcept) {
if (isUniqueTag) {
newName = oldName;
} else {
newName = oldName + "_" + shortTag(tag);
}
} else {
if (isUniqueTag) {
newName = oldName + "_" + SPropertyOperations.getString(concept, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"));
} else {
newName = oldName + "_" + SPropertyOperations.getString(concept, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + "_" + shortTag(tag);
}
}
return newName;
}
private String shortTag(String tag) {
if (tag == null || !(tag.endsWith("_RTransform"))) {
return tag;
}
return tag.substring(0, tag.length() - 11);
}
private boolean isDefinedInSameLanguage(SNode concept) {
if (concept == null) {
return true;
}
return ActionMigrationHelper.isDefinedInLanguage(concept, myLanguage);
}
private void migrateSideTransformActions(SNode actions, SNode concept, String tag, List<SNode> actionBuilders) {
int size = actionBuilders.size();
if (size == 0) {
return;
}
SModel editorAspect = ActionMigrationHelper.getOrCreateEditorAspect(myLanguage);
Set<SNode> actionsRoots = myConceptAndTagToActions.get(new Pair<SNode, String>(concept, tag));
int numberOfActionRoots = actionsRoots.size();
SNode mainMenu = getOrCreateMainMenu(concept, tag, editorAspect);
if (numberOfActionRoots > 1) {
SNode additionalMenu = createAdditionalMenu(concept, tag, actions, editorAspect);
migrateBuilders(additionalMenu, actionBuilders);
includeAdditionalMenu(mainMenu, additionalMenu);
} else {
migrateBuilders(mainMenu, actionBuilders);
if (SNodeOperations.isInstanceOf(mainMenu, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0c10ff0L, "jetbrains.mps.lang.editor.structure.TransformationMenuContribution"))) {
SPropertyOperations.set(mainMenu, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), getAdditionalMenuName(actions, concept, tag) + "_Contribution");
} else if (SNodeOperations.isInstanceOf(mainMenu, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0ac4ee8L, "jetbrains.mps.lang.editor.structure.TransformationMenu_Named"))) {
SPropertyOperations.set(mainMenu, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), getAdditionalMenuName(actions, concept, tag));
}
}
}
private void includeAdditionalMenu(SNode mainMenu, SNode additionalMenu) {
SNode section = findOrCreateLeftRightSection(mainMenu);
SNode includePart = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0xae2d2fe1c9d6be2L, "jetbrains.mps.lang.editor.structure.TransformationMenuPart_IncludeMenu"));
SNode menuReference = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x5d3b34577b3cff09L, "jetbrains.mps.lang.editor.structure.TransformationMenuReference_Named"));
SLinkOperations.setTarget(menuReference, MetaAdapterFactory.getReferenceLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x5d3b34577b3cff09L, 0x5d3b34577b3cff0aL, "menu"), additionalMenu);
SLinkOperations.setTarget(includePart, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0xae2d2fe1c9d6be2L, 0x5d3b34577b3f7ee5L, "menuReference"), menuReference);
ListSequence.fromList(SLinkOperations.getChildren(section, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, 0x6ec02d9918b4efbfL, "parts"))).addElement(includePart);
}
private SNode findOrCreateLeftRightSection(SNode mainMenu) {
SNode section = findLeftRightSection(mainMenu);
if (section == null) {
section = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, "jetbrains.mps.lang.editor.structure.TransformationMenuSection"));
ListSequence.fromList(SLinkOperations.getChildren(section, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, 0x6ec02d9918b4efbdL, "locations"))).addElement(_quotation_createNode_syzi2_a0a1a1a13());
ListSequence.fromList(SLinkOperations.getChildren(mainMenu, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0c11832L, 0x16be955f384efffcL, "sections"))).addElement(section);
}
return section;
}
private SNode findLeftRightSection(SNode mainMenu) {
return ListSequence.fromList(SLinkOperations.getChildren(mainMenu, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0c11832L, 0x16be955f384efffcL, "sections"))).where(new IWhereFilter<SNode>() {
public boolean accept(SNode it) {
Iterable<SNode> locations = SNodeOperations.ofConcept(SLinkOperations.getChildren(it, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, 0x6ec02d9918b4efbdL, "locations")), MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x28336854e4c19a06L, "jetbrains.mps.lang.editor.structure.TransformationLocation_SideTransform"));
for (SNode location : Sequence.fromIterable(locations)) {
boolean isLeft = false;
boolean isRight = false;
for (SNode place : ListSequence.fromList(SLinkOperations.getChildren(location, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x28336854e4c19a06L, 0x30335f3d1845bdcfL, "placeInCell")))) {
if (SPropertyOperations.hasValue(place, MetaAdapterFactory.getProperty(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x30335f3d1845bdccL, 0x30335f3d1845bdcdL, "placeInCell"), "LEFT", null)) {
isLeft = true;
} else if (SPropertyOperations.hasValue(place, MetaAdapterFactory.getProperty(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x30335f3d1845bdccL, 0x30335f3d1845bdcdL, "placeInCell"), "RIGHT", null)) {
isRight = true;
}
if (isLeft && isRight) {
return true;
}
}
}
return false;
}
}).first();
}
private void migrateBuilders(SNode root, Iterable<SNode> builders) {
migrateBuilders(root, builders, "left");
migrateBuilders(root, builders, "");
migrateBuilders(root, builders, "both");
}
private void migrateBuilders(SNode root, Iterable<SNode> builders, String side) {
final Wrappers._T<String> _side = new Wrappers._T<String>(side);
if (eq_syzi2_a0b0lb(_side.value, "")) {
_side.value = null;
}
Iterable<SNode> filteredBuilders = Sequence.fromIterable(builders).where(new IWhereFilter<SNode>() {
public boolean accept(SNode it) {
return eq_syzi2_a0a0a0a0a0a2a73(SPropertyOperations.getString_def(it, MetaAdapterFactory.getProperty(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x11b07b83602L, "side"), null), _side.value);
}
});
if (Sequence.fromIterable(filteredBuilders).isEmpty()) {
return;
}
SNode location = ActionMigrationHelper.createLocation(_side.value);
SNode section = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, "jetbrains.mps.lang.editor.structure.TransformationMenuSection"));
ListSequence.fromList(SLinkOperations.getChildren(section, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, 0x6ec02d9918b4efbdL, "locations"))).addElement(location);
ListSequence.fromList(SLinkOperations.getChildren(root, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x4e0f93d8a0c11832L, 0x16be955f384efffcL, "sections"))).addElement(section);
for (SNode builder : Sequence.fromIterable(filteredBuilders)) {
List<SNode> parts = new SideTransformBuildersMigrationHelper(builder, root).createMenuParts();
ListSequence.fromList(SLinkOperations.getChildren(section, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, 0x6ec02d9918b4efbfL, "parts"))).addSequence(ListSequence.fromList(parts));
}
if (ListSequence.fromList(SLinkOperations.getChildren(section, MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x6ec02d9918b4efbcL, 0x6ec02d9918b4efbfL, "parts"))).isEmpty()) {
SNodeOperations.deleteNode(section);
}
}
private void addToConceptAndTagToBuilderMap(SNode actions, SNode builder) {
Map<Pair<SNode, String>, List<SNode>> conceptAndTagToBuilder = myActionsToConceptAndTagToBuilder.get(actions);
if (conceptAndTagToBuilder == null) {
conceptAndTagToBuilder = new HashMap<Pair<SNode, String>, List<SNode>>();
myActionsToConceptAndTagToBuilder.put(actions, conceptAndTagToBuilder);
}
Pair<SNode, String> key = new Pair<SNode, String>(SLinkOperations.getTarget(builder, MetaAdapterFactory.getReferenceLink(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x108facec6d6L, "applicableConcept")), SPropertyOperations.getString_def(builder, MetaAdapterFactory.getProperty(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x1099eb798f9L, "transformTag"), "default_RTransform"));
List<SNode> value = conceptAndTagToBuilder.get(key);
if (value == null) {
value = new ArrayList<SNode>();
conceptAndTagToBuilder.put(key, value);
}
value.add(builder);
}
private void addToBuilderToMenuMap(SNode actions, SNode builder) {
Pair<SNode, String> key = new Pair<SNode, String>(SLinkOperations.getTarget(builder, MetaAdapterFactory.getReferenceLink(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x108facec6d6L, "applicableConcept")), SPropertyOperations.getString_def(builder, MetaAdapterFactory.getProperty(0xaee9cad2acd44608L, 0xaef20004f6a1cdbdL, 0x108facec6d2L, 0x1099eb798f9L, "transformTag"), "default_RTransform"));
Set<SNode> value = myConceptAndTagToActions.get(key);
if (value == null) {
value = new HashSet<SNode>();
myConceptAndTagToActions.put(key, value);
}
value.add(actions);
}
private static boolean eq_syzi2_a0b0r(Object a, Object b) {
return (a != null ? a.equals(b) : a == b);
}
private static SNode _quotation_createNode_syzi2_a0a0b0s(Object parameter_1) {
PersistenceFacade facade = PersistenceFacade.getInstance();
SNode quotedNode_2 = null;
quotedNode_2 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(MetaAdapterFactory.getLanguage(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, "jetbrains.mps.lang.editor"), 0x5d3b34577b3cff0cL, "TransformationMenuReference_Default"), null, null, false);
SNodeAccessUtil.setReferenceTarget(quotedNode_2, MetaAdapterFactory.getReferenceLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x169efbc9a90a41c1L, 0x169efbc9a91440deL, "concept"), (SNode) parameter_1);
return quotedNode_2;
}
private static boolean eq_syzi2_a0b0s(Object a, Object b) {
return (a != null ? a.equals(b) : a == b);
}
private static SNode _quotation_createNode_syzi2_a0a0b0b0a1a81(Object parameter_1) {
PersistenceFacade facade = PersistenceFacade.getInstance();
SNode quotedNode_2 = null;
quotedNode_2 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(MetaAdapterFactory.getLanguage(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, "jetbrains.mps.lang.editor"), 0x5d3b34577b3cff09L, "TransformationMenuReference_Named"), null, null, false);
SNodeAccessUtil.setReferenceTarget(quotedNode_2, MetaAdapterFactory.getReferenceLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x5d3b34577b3cff09L, 0x5d3b34577b3cff0aL, "menu"), (SNode) parameter_1);
return quotedNode_2;
}
private static boolean eq_syzi2_a0a0a0a0a0a1a91(Object a, Object b) {
return (a != null ? a.equals(b) : a == b);
}
private static boolean neq_syzi2_a0a0c0y(Object a, Object b) {
return !(((a != null ? a.equals(b) : a == b)));
}
private static boolean neq_syzi2_a0b0c0y(Object a, Object b) {
return !(((a != null ? a.equals(b) : a == b)));
}
private static SNode _quotation_createNode_syzi2_a0a1a1a13() {
PersistenceFacade facade = PersistenceFacade.getInstance();
SNode quotedNode_1 = null;
SNode quotedNode_2 = null;
SNode quotedNode_3 = null;
quotedNode_1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(MetaAdapterFactory.getLanguage(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, "jetbrains.mps.lang.editor"), 0x28336854e4c19a06L, "TransformationLocation_SideTransform"), null, null, false);
quotedNode_2 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(MetaAdapterFactory.getLanguage(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, "jetbrains.mps.lang.editor"), 0x30335f3d1845bdccL, "TransformationLocation_SideTransform_PlaceInCellHolder"), null, null, false);
SNodeAccessUtil.setProperty(quotedNode_2, MetaAdapterFactory.getProperty(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x30335f3d1845bdccL, 0x30335f3d1845bdcdL, "placeInCell"), "LEFT");
quotedNode_1.addChild(MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x28336854e4c19a06L, 0x30335f3d1845bdcfL, "placeInCell"), quotedNode_2);
quotedNode_3 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(MetaAdapterFactory.getLanguage(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, "jetbrains.mps.lang.editor"), 0x30335f3d1845bdccL, "TransformationLocation_SideTransform_PlaceInCellHolder"), null, null, false);
SNodeAccessUtil.setProperty(quotedNode_3, MetaAdapterFactory.getProperty(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x30335f3d1845bdccL, 0x30335f3d1845bdcdL, "placeInCell"), "RIGHT");
quotedNode_1.addChild(MetaAdapterFactory.getContainmentLink(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x28336854e4c19a06L, 0x30335f3d1845bdcfL, "placeInCell"), quotedNode_3);
return quotedNode_1;
}
private static boolean eq_syzi2_a0b0lb(Object a, Object b) {
return (a != null ? a.equals(b) : a == b);
}
private static boolean eq_syzi2_a0a0a0a0a0a2a73(Object a, Object b) {
return (a != null ? a.equals(b) : a == b);
}
}