package org.fandev.lang.fan.parsing.statements.typeDefinitions.blocks; import com.intellij.lang.PsiBuilder; import org.fandev.lang.fan.parsing.util.ParserUtils; import org.fandev.lang.fan.parsing.statements.typeDefinitions.members.SlotDefinition; import org.fandev.lang.fan.parsing.statements.typeDefinitions.members.EnumValueDefinition; import org.fandev.lang.fan.parsing.statements.typeDefinitions.members.FieldDefinition; import org.fandev.lang.fan.parsing.statements.declaration.DeclarationType; import static org.fandev.lang.fan.FanTokenTypes.*; import org.fandev.lang.fan.FanBundle; import org.fandev.lang.fan.FanElementTypes; /** * @author Dror Bereznitsky * @date Jan 14, 2009 11:23:21 PM */ public class PodBlock { /* <symbolName> := <symbolVal> */ public static boolean parse(final PsiBuilder builder) { ParserUtils.removeNls(builder); final PsiBuilder.Marker blockMark = builder.mark(); if (!ParserUtils.getToken(builder, LBRACE)) { blockMark.error(FanBundle.message("lcurly.expected")); return false; } ParserUtils.removeNls(builder); // parse pod fields declaration => symbols while (!builder.eof() && builder.getTokenType() != RBRACE) { if (!FieldDefinition.parse(builder)) { break; } ParserUtils.removeNls(builder); } if (ParserUtils.getToken(builder, RBRACE, FanBundle.message("rcurly.expected"))) { blockMark.done(FanElementTypes.BUILDSCRIPT_BODY); return true; } else { ParserUtils.cleanAfterErrorInBlock(builder); blockMark.done(FanElementTypes.BUILDSCRIPT_BODY); return false; } } private static void eatCommas(final PsiBuilder builder) { ParserUtils.removeNls(builder); while (COMMA == builder.getTokenType()) { builder.error(FanBundle.message("enum.value.expected")); ParserUtils.getToken(builder, COMMA); ParserUtils.removeNls(builder); } } }