public static SNode getContextForInnerClass( TemplateQueryContext genContext, SNode node, boolean topmost) { SNode usage = genContext.getOutputNodeByInputNodeAndMappingLabel( SLinkOperations.getTarget(node, "inner", true), "classUsageExpr"); if ((usage != null)) { if (SPropertyOperations.getBoolean(node, "nonStatic")) { return SNodeOperations.getAncestor( usage, "jetbrains.mps.baseLanguage.structure.ClassConcept", false, false); } if (topmost) { return ListSequence.fromList( SNodeOperations.getAncestors( usage, "jetbrains.mps.baseLanguage.structure.ClassConcept", false)) .last(); } else { return ListSequence.fromList( SNodeOperations.getAncestors( usage, "jetbrains.mps.baseLanguage.structure.ClassConcept", false)) .where( new IWhereFilter<SNode>() { public boolean accept(SNode it) { return BehaviorReflection.invokeVirtual( Boolean.TYPE, it, "virtual_isStatic_7405920559687241224", new Object[] {}); } }) .first(); } } else { SNode outclass = genContext.getCopiedOutputNodeForInputNode( SNodeOperations.getAncestor( node, "jetbrains.mps.baseLanguage.structure.ClassConcept", false, false)); if ((outclass != null)) { return ListSequence.fromList( SNodeOperations.getAncestors( outclass, "jetbrains.mps.baseLanguage.structure.ClassConcept", true)) .last(); } } return null; }
public static SNode findEnclosingTableClass2(SNode node, TemplateQueryContext genctx) { SNode table = SNodeOperations.getAncestor( node, "jetbrains.mps.baseLanguage.dates.structure.DateFormatsTable", true, false); return genctx.getOutputNodeByInputNodeAndMappingLabel(table, "FormatTableClass"); }