package org.fandev.lang.fan.parsing.auxiliary.facets; import com.intellij.lang.PsiBuilder; import org.fandev.lang.fan.FanBundle; import org.fandev.lang.fan.FanElementTypes; import org.fandev.lang.fan.FanTokenTypes; import static org.fandev.lang.fan.FanTokenTypes.*; import org.fandev.lang.fan.parsing.util.ParserUtils; import org.fandev.lang.fan.parsing.expression.Expression; /** * @author Dror Bereznitsky * @date Jan 14, 2009 11:15:08 PM */ public class Facet { // Facets are defined as "@name=value" prefixed before a type or slot definition // @<id>[=<expr>]<eos> public static boolean parse(final PsiBuilder builder) { ParserUtils.removeNls(builder); while (AT.equals(builder.getTokenType())) { final PsiBuilder.Marker facetMarker = builder.mark(); builder.advanceLexer(); // Annotation itself if (!ParserUtils.parseName(builder)) { facetMarker.drop(); return false; } if (FanTokenTypes.EQ.equals(builder.getTokenType())) { ParserUtils.advanceNoNls(builder); Expression.parseExpr(builder,EOS,FanElementTypes.FACET_VALUE); } facetMarker.done(FanElementTypes.FACET); ParserUtils.removeStoppers(builder, SEPARATOR, SEPARATOR); } return true; } }