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