// ---- PsiAccessors.java ----------------- //header.txt package ; import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiBuilder.Marker; import static generated.GeneratedTypes.*; import static PsiGenUtil.*; import com.intellij.psi.tree.IElementType; import com.intellij.lang.ASTNode; import com.intellij.psi.tree.TokenSet; import com.intellij.lang.PsiParser; import com.intellij.lang.LightPsiParser; @SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"}) public class PsiAccessors implements PsiParser, LightPsiParser { public ASTNode parse(IElementType root_, PsiBuilder builder_) { parseLight(root_, builder_); return builder_.getTreeBuilt(); } public void parseLight(IElementType root_, PsiBuilder builder_) { boolean result_; builder_ = adapt_builder_(root_, builder_, this, null); Marker marker_ = enter_section_(builder_, 0, _COLLAPSE_, null); if (root_ == EXPRESSION) { result_ = expression(builder_, 0); } else { result_ = parse_root_(root_, builder_, 0); } exit_section_(builder_, 0, marker_, root_, result_, true, TRUE_CONDITION); } protected boolean parse_root_(IElementType root_, PsiBuilder builder_, int level_) { return root(builder_, level_ + 1); } /* ********************************************************** */ // expression operator expression public static boolean binary(PsiBuilder builder_, int level_) { if (!recursion_guard_(builder_, level_, "binary")) return false; if (!nextTokenIs(builder_, ID)) return false; boolean result_, pinned_; Marker marker_ = enter_section_(builder_, level_, _NONE_, BINARY, null); result_ = expression(builder_, level_ + 1); result_ = result_ && operator(builder_, level_ + 1); pinned_ = result_; // pin = operator result_ = result_ && expression(builder_, level_ + 1); exit_section_(builder_, level_, marker_, result_, pinned_, null); return result_ || pinned_; } /* ********************************************************** */ // value '*' value public static boolean expression(PsiBuilder builder_, int level_) { if (!recursion_guard_(builder_, level_, "expression")) return false; if (!nextTokenIs(builder_, ID)) return false; boolean result_; Marker marker_ = enter_section_(builder_); result_ = value(builder_, level_ + 1); result_ = result_ && consumeToken(builder_, "*"); result_ = result_ && value(builder_, level_ + 1); exit_section_(builder_, marker_, EXPRESSION, result_); return result_; } /* ********************************************************** */ // '+' | '-' public static boolean operator(PsiBuilder builder_, int level_) { if (!recursion_guard_(builder_, level_, "operator")) return false; boolean result_; Marker marker_ = enter_section_(builder_, level_, _NONE_, OPERATOR, "<operator>"); result_ = consumeToken(builder_, "+"); if (!result_) result_ = consumeToken(builder_, "-"); exit_section_(builder_, level_, marker_, result_, false, null); return result_; } /* ********************************************************** */ // binary static boolean root(PsiBuilder builder_, int level_) { return binary(builder_, level_ + 1); } /* ********************************************************** */ // id public static boolean value(PsiBuilder builder_, int level_) { if (!recursion_guard_(builder_, level_, "value")) return false; if (!nextTokenIs(builder_, ID)) return false; boolean result_; Marker marker_ = enter_section_(builder_); result_ = consumeToken(builder_, ID); exit_section_(builder_, marker_, VALUE, result_); return result_; } }