package org.fandev.lang.fan.parsing.statements.declaration; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; import static org.fandev.lang.fan.FanTokenTypes.*; /** * @author Dror Bereznitsky * @date Jan 10, 2009 5:22:55 PM */ public enum DeclarationType { CLASS(CLASS_KEYWORD, CLASS_MODIFIERS), MIXIN(MIXIN_KEYWORD, MIXIN_MODIFIERS), ENUM(ENUM_KEYWORD, PROTECTION), CONSTRUCTOR(NEW_KEYWORD, PROTECTION), INNER_SET(PROTECTION), METHOD(METHOD_MODIFIERS), FIELD(FIELD_MODIFIERS); private final IElementType keyword; private final TokenSet modifiersSet; DeclarationType(final IElementType keyword, final TokenSet modifiersSet) { this.keyword = keyword; this.modifiersSet = modifiersSet; } DeclarationType(final TokenSet modifiersSet) { this.keyword = null; this.modifiersSet = modifiersSet; } public IElementType getKeyword() { return keyword; } public TokenSet getModifiersSet() { return modifiersSet; } public String errorMessage() { final StringBuilder builder = new StringBuilder("Modifiers ( "); modifiersSet.getTypes(); boolean first = true; for (final IElementType type : modifiersSet.getTypes()) { if (!first) { builder.append(", "); } builder.append(type.toString()); first = false; } builder.append(" )"); if (getKeyword() != null) { builder.append(" or keyword ").append(getKeyword()); } return builder.toString(); } }