package jetbrains.mps.baseLanguage.textGen;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.text.rt.TextGenContext;
import jetbrains.mps.text.impl.TextGenSupport;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.baseLanguage.behavior.Classifier__BehaviorDescriptor;
import jetbrains.mps.baseLanguage.behavior.ClassifierMember__BehaviorDescriptor;
public abstract class BaseClassConceptTextGen {
public static void membersWithBrackets(SNode classifier, boolean newLineOnEmptyMembers, final TextGenContext ctx) {
final TextGenSupport tgs = new TextGenSupport(ctx);
if (Sequence.fromIterable(Classifier__BehaviorDescriptor.members_id1hodSy8nQmC.invoke(classifier)).isNotEmpty() || newLineOnEmptyMembers) {
tgs.append("{");
tgs.newLine();
ctx.getBuffer().area().increaseIndent();
BaseClassConceptTextGen.members(classifier, ctx);
ctx.getBuffer().area().decreaseIndent();
tgs.indent();
tgs.append("}");
} else {
tgs.append("{}");
}
}
public static void members(SNode classifier, final TextGenContext ctx) {
final TextGenSupport tgs = new TextGenSupport(ctx);
// just for first element
boolean isWrappedElementBefore = true;
SNode lastMember = Sequence.fromIterable(Classifier__BehaviorDescriptor.members_id1hodSy8nQmC.invoke(classifier)).last();
// FIXME can't use members child as there are still uses of deprecated containment roles (e.g. Classifier.method)
for (SNode member : Classifier__BehaviorDescriptor.members_id1hodSy8nQmC.invoke(classifier)) {
boolean needsLineBefore = (boolean) ClassifierMember__BehaviorDescriptor.needsEmptyLineBefore_idzB21h1tQit.invoke(member);
boolean needsLineAfter = (boolean) ClassifierMember__BehaviorDescriptor.needsEmptyLineAfter_idzB21h1tQNm.invoke(member);
BaseLanguageTextGen.newLine(needsLineBefore && !(isWrappedElementBefore), ctx);
tgs.appendNode(member);
BaseLanguageTextGen.newLine(needsLineAfter && !((lastMember == member)), ctx);
isWrappedElementBefore = needsLineAfter;
}
}
}