package jetbrains.mps.editor.runtime.impl;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.openapi.editor.cells.EditorCell;
import jetbrains.mps.editor.runtime.style.StyleAttributes;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.smodel.behaviour.BHReflection;
import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId;
import jetbrains.mps.smodel.runtime.ConceptPresentation;
import jetbrains.mps.kernel.language.ConceptAspectsHelper;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import org.jetbrains.mps.openapi.language.SContainmentLink;
public class CellUtil {
public CellUtil() {
}
public static void setupIDeprecatableStyles(SNode node, EditorCell cell) {
if (isNodeDeprecated(node)) {
cell.getStyle().set(StyleAttributes.STRIKE_OUT, true);
}
}
private static boolean isNodeDeprecated(SNode node) {
if (isConceptDeprecated(node)) {
return true;
}
if (!(SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x11d205fe38dL, "jetbrains.mps.lang.core.structure.IDeprecatable")))) {
return false;
}
return ((boolean) (Boolean) BHReflection.invoke(SNodeOperations.cast(node, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x11d205fe38dL, "jetbrains.mps.lang.core.structure.IDeprecatable")), SMethodTrimmedId.create("isDeprecated", null, "hOwoPtR")));
}
private static boolean isConceptDeprecated(SNode node) {
ConceptPresentation cp = ConceptAspectsHelper.getPresentationAspect(node);
if (cp == null) {
return false;
}
return cp.isDeprecated();
}
public static SNode getNodeToDelete(SNode node) {
while (SNodeOperations.isInstanceOf(SNodeOperations.getParent(node), MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x11c6fd75034L, "jetbrains.mps.lang.core.structure.IWrapper"))) {
node = SNodeOperations.getParent(node);
}
return node;
}
/**
* TODO: think of moving jetbrains.mps.lang.editor.generator.internal into MPS
*/
public static SNode getLinkDeclarationTarget(SNode linkDeclaration) {
return SLinkOperations.getTarget(linkDeclaration, MetaAdapterFactory.getReferenceLink(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979bd086aL, 0xf98055fef0L, "target"));
}
public static String getLinkDeclarationRole(SNode linkDeclaration) {
return SPropertyOperations.getString(linkDeclaration, MetaAdapterFactory.getProperty(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979bd086aL, 0xf98052f333L, "role"));
}
public static SContainmentLink getCellContainmentLink(EditorCell cell) {
SNode node = cell.getSNode();
if (node == null) {
return null;
}
String role = cell.getRole();
if (role == null) {
return null;
}
// todo remove getLink(role) when cell will have link
for (SContainmentLink link : node.getConcept().getContainmentLinks()) {
if (link.getName().equals(role)) {
return link;
}
}
return null;
}
}