package jetbrains.mps.editor.runtime.impl;
/*Generated by MPS */
import java.util.Comparator;
import jetbrains.mps.openapi.editor.cells.SubstituteAction;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import org.jetbrains.mps.openapi.model.SModel;
@Deprecated
public class NodeSubstituteActionsComparator implements Comparator<SubstituteAction> {
private SNode myContainingRoot;
@Deprecated
public NodeSubstituteActionsComparator(SNode containingRoot) {
myContainingRoot = containingRoot;
}
@Override
public int compare(SubstituteAction action1, SubstituteAction action2) {
Object parameter1 = action1.getParameterObject();
Object parameter2 = action2.getParameterObject();
if (parameter1 instanceof SNode) {
return (parameter2 instanceof SNode ? compare((SNode) parameter1, (SNode) parameter2) : -1);
} else {
return (parameter2 instanceof SNode ? 1 : 0);
}
}
private int compare(SNode node1, SNode node2) {
if (SNodeOperations.isInstanceOf(node1, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration"))) {
return (SNodeOperations.isInstanceOf(node2, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration")) ? 0 : 1);
} else if (SNodeOperations.isInstanceOf(node2, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration"))) {
return -1;
}
SModel containigModel = SNodeOperations.getModel(myContainingRoot);
if (SNodeOperations.getModel(node1) != containigModel) {
return (SNodeOperations.getModel(node2) != containigModel ? 0 : 1);
} else if (SNodeOperations.getModel(node2) != containigModel) {
return -1;
}
if (SNodeOperations.getContainingRoot(node1) != myContainingRoot) {
return (SNodeOperations.getContainingRoot(node2) != myContainingRoot ? 0 : 1);
} else if (SNodeOperations.getContainingRoot(node2) != myContainingRoot) {
return -1;
}
SNode container1 = SNodeOperations.getNodeAncestor(node1, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x11f1e14d895L, "jetbrains.mps.lang.core.structure.IContainer"), true, false);
SNode container2 = SNodeOperations.getNodeAncestor(node2, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x11f1e14d895L, "jetbrains.mps.lang.core.structure.IContainer"), true, false);
if (container1 == container2) {
return 0;
}
while (container1 != null) {
container1 = SNodeOperations.getNodeAncestor(container1, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x11f1e14d895L, "jetbrains.mps.lang.core.structure.IContainer"), false, false);
if (container1 == container2) {
return -1;
}
}
return 1;
}
}