package jetbrains.mps.ide.actions; /*Generated by MPS */ import jetbrains.mps.ide.util.GroupedNodesChooser; import javax.swing.JCheckBox; import org.jetbrains.mps.openapi.model.SNodeReference; import com.intellij.openapi.project.Project; import jetbrains.mps.plugins.projectplugins.ProjectPluginManager; import com.intellij.ui.NonFocusableCheckBox; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.smodel.behaviour.BHReflection; import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId; import java.util.Map; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import java.util.List; import jetbrains.mps.internal.collections.runtime.Sequence; import java.util.Comparator; import jetbrains.mps.util.IterableUtil; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.smodel.SNodePointer; import org.jetbrains.mps.openapi.language.SContainmentLink; public class OverrideConceptMethodsDialog extends GroupedNodesChooser { private JCheckBox myRemoveAttributes; private JCheckBox myAddReturn; private BehaviorDialogsPersistentOptions_PreferencesComponent myOptions; public OverrideConceptMethodsDialog(SNodeReference[] methods, Project project) { super(methods, false, true, project); } @Override protected void initOptions() { try { myOptions = myProject.getComponent(ProjectPluginManager.class).getPrefsComponent(BehaviorDialogsPersistentOptions_PreferencesComponent.class); } catch (Exception e) { myOptions = null; } myAddReturn = new NonFocusableCheckBox("Add return keyword"); myAddReturn.setMnemonic('r'); myRemoveAttributes = new NonFocusableCheckBox("Remove Attributes"); myRemoveAttributes.setMnemonic('t'); myOptionControls = new JCheckBox[]{myAddReturn, myRemoveAttributes}; } protected boolean showInsertOverride() { return true; } @Override protected String getText(SNode node) { if (SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d43447b1aL, "jetbrains.mps.lang.behavior.structure.ConceptBehavior"))) { SNode concept = SLinkOperations.getTarget(SNodeOperations.cast(node, MetaAdapterFactory.getConcept(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d43447b1aL, "jetbrains.mps.lang.behavior.structure.ConceptBehavior")), MetaAdapterFactory.getReferenceLink(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d43447b1aL, 0x11d43447b1fL, "concept")); if ((concept != null)) { return ((String) BHReflection.invoke(concept, SMethodTrimmedId.create("getFqName", null, "hEwIO9y"))); } } return super.getText(node); } @Override protected void customizeOptionsPanel() { myAddReturn.setSelected((myOptions != null ? myOptions.getStateObject().addReturnsOnImplement : false)); myRemoveAttributes.setSelected((myOptions != null ? myOptions.getStateObject().removeAttributes : true)); } public boolean isAddReturn() { return myAddReturn.isSelected(); } public boolean isRemoveAttributes() { return myRemoveAttributes.isSelected(); } @Override public void dispose() { if (myOptions != null) { myOptions.getStateObject().addReturnsOnImplement = myAddReturn.isSelected(); myOptions.getStateObject().removeAttributes = myRemoveAttributes.isSelected(); } super.dispose(); } public static Iterable<SNode> sortMethods(SNode baseClass, Iterable<SNode> methods) { final Map<SNode, Integer> containerIndex = MapSequence.fromMap(new HashMap<SNode, Integer>()); int i = 1; for (SNode c : ((List<SNode>) BHReflection.invoke(baseClass, SMethodTrimmedId.create("getAllSuperBehaviors", MetaAdapterFactory.getConcept(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d43447b1aL, "jetbrains.mps.lang.behavior.structure.ConceptBehavior"), "1$X$vL9L8i8")))) { MapSequence.fromMap(containerIndex).put(c, i++); } return Sequence.fromIterable(methods).sort(new Comparator<SNode>() { public int compare(SNode a, SNode b) { SNode parentA = SNodeOperations.getParent(a); SNode parentB = SNodeOperations.getParent(b); if (parentA == parentB) { String aRole = check_6zqknj_a0a0c0a0a3a11(SNodeOperations.getContainingLink(a)); String bRole = check_6zqknj_a0b0c0a0a3a11(SNodeOperations.getContainingLink(b)); if (neq_6zqknj_a0d0c0a0a0a0d0l(aRole, bRole)) { return aRole.compareTo(bRole); } return new Integer(IterableUtil.asList(parentA.getChildren(aRole)).indexOf(a)).compareTo(IterableUtil.asList(parentB.getChildren(bRole)).indexOf(b)); } int iA = (parentA != null && MapSequence.fromMap(containerIndex).containsKey(parentA) ? MapSequence.fromMap(containerIndex).get(parentA) : 0); int iB = (parentB != null && MapSequence.fromMap(containerIndex).containsKey(parentB) ? MapSequence.fromMap(containerIndex).get(parentB) : 0); return new Integer(iA).compareTo(iB); } }, true); } public static SNodeReference[] toNodePointers(Iterable<SNode> methods) { return Sequence.fromIterable(methods).select(new ISelector<SNode, SNodePointer>() { public SNodePointer select(SNode it) { return new SNodePointer(it); } }).toGenericArray(SNodePointer.class); } private static String check_6zqknj_a0a0c0a0a3a11(SContainmentLink checkedDotOperand) { if (null != checkedDotOperand) { return checkedDotOperand.getName(); } return null; } private static String check_6zqknj_a0b0c0a0a3a11(SContainmentLink checkedDotOperand) { if (null != checkedDotOperand) { return checkedDotOperand.getName(); } return null; } private static boolean neq_6zqknj_a0d0c0a0a0a0d0l(Object a, Object b) { return !(((a != null ? a.equals(b) : a == b))); } }