diff --git a/AGENTS.md b/AGENTS.md index 198d615..edf0504 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -78,6 +78,10 @@ Tier 0: lexed 714 files, 17154195 chars, 3009381 tokens cleanly. `~/.local/jai`, keywords/tokens transcribed from the compiler's own lexer. **Read this before writing any lexer or parser code.** - `docs/BUILD_PLAN.md` — phased plan, testing strategy, risks, open questions. +- Local IntelliJ reference projects and documentation in `~/programming/thirdparty`: + - `fortran-plugin` — a simple language plugin to use as reference. + - `intellij-elixir` — a more complex plugin to use as reference. + - `intellij-sdk-docs` — local versions of the IntelliJ SDK documentation. - `mise.toml` → `java = "temurin-21"` (was 17, which was broken). - `jaigradle` — JDK-resolving Gradle wrapper. Executable, verified. - `jaitest` — runs the suite and reports the JUnit XML (see above). @@ -131,9 +135,8 @@ Both are justified in `docs/BUILD_PLAN.md` §2. Do not silently reverse them. Nested block comments need a depth counter. Both would end up as hand-written Java inside JFlex actions anyway. - **Grammar-Kit BNF for parser + PSI.** Verified headless: the plugin ID is - `org.jetbrains.intellij.platform.grammarkit`, bundled in the IntelliJ Platform - Gradle Plugin since 2.12.0 (we run 2.18.1). `generateLexer` / `generateParser` - already appear in `./jaigradle tasks --all` — no extra dependency needed. + `org.jetbrains.intellij.platform.grammarkit`, applied in `build.gradle.kts`. + `generateLexer` / `generateParser` tasks are present in `./jaigradle tasks`. - **Ship highlighting before the parser.** Highlighting needs only the lexer. --- diff --git a/README.md b/README.md index 441cfa4..f1067b0 100644 --- a/README.md +++ b/README.md @@ -52,3 +52,9 @@ Key docs: | `AGENTS.md` | how to work in this repo; current state | | `docs/JAI_LANGUAGE_REFERENCE.md` | the language, transcribed from the compiler | | `docs/BUILD_PLAN.md` | phased plan and testing strategy | + +Local IntelliJ references are available in `~/programming/thirdparty`: + +- `fortran-plugin` — a simple language plugin to use as reference. +- `intellij-elixir` — a more complex plugin to use as reference. +- `intellij-sdk-docs` — local versions of the IntelliJ SDK documentation. diff --git a/build.gradle.kts b/build.gradle.kts index abfb023..d07111b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,6 +4,13 @@ plugins { id("org.jetbrains.kotlin.jvm") id("org.jetbrains.changelog") id("org.jetbrains.intellij.platform") + id("org.jetbrains.intellij.platform.grammarkit") +} + +sourceSets { + main { + java.srcDirs("src/main/gen") + } } // Read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin.html @@ -19,3 +26,11 @@ dependencies { // bundledPlugin("com.intellij.java") } } + +tasks.generateParser { + sourceFile.set(file("src/main/grammar/Jai.bnf")) + targetRootOutputDir.set(file("src/main/gen")) + pathToParser.set("dev/hgh/jai/parser/JaiParser.java") + pathToPsiRoot.set("dev/hgh/jai/psi") + purgeOldFiles.set(true) +} diff --git a/src/main/gen/dev/hgh/jai/parser/JaiParser.java b/src/main/gen/dev/hgh/jai/parser/JaiParser.java new file mode 100644 index 0000000..170e9a2 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/parser/JaiParser.java @@ -0,0 +1,2631 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.parser; + +import com.intellij.lang.PsiBuilder; +import com.intellij.lang.PsiBuilder.Marker; +import static dev.hgh.jai.psi.JaiTypes.*; +import static dev.hgh.jai.parser.JaiParserUtil.*; +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 JaiParser 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, EXTENDS_SETS_); + Marker marker_ = enter_section_(builder_, 0, _COLLAPSE_, null); + result_ = parse_root_(root_, builder_); + exit_section_(builder_, 0, marker_, root_, result_, true, TRUE_CONDITION); + } + + protected boolean parse_root_(IElementType root_, PsiBuilder builder_) { + return parse_root_(root_, builder_, 0); + } + + static boolean parse_root_(IElementType root_, PsiBuilder builder_, int level_) { + return jaiFile(builder_, level_ + 1); + } + + public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] { + create_token_set_(ADD_EXPR, AND_EXPR, ARRAY_LITERAL_EXPR, ARRAY_TYPE_EXPR, + ASSIGN_EXPR, AUTO_CAST_EXPR, BACKTICK_EXPR, BIT_AND_EXPR, + BIT_OR_EXPR, BIT_XOR_EXPR, BUILTIN_CALL_EXPR, CALL_EXPR, + CAST_EXPR, DEREF_EXPR, DIRECTIVE_EXPR, ENUM_EXPR, + EQUALITY_EXPR, EXPR, IFX_EXPR, INDEX_EXPR, + INLINE_EXPR, INTERFACE_EXPR, LAMBDA_EXPR, LITERAL_EXPR, + MEMBER_EXPR, MUL_EXPR, OR_EXPR, PAREN_EXPR, + PREFIX_EXPR, PRIMARY_EXPR, PROC_LITERAL_EXPR, RANGE_EXPR, + REF_EXPR, RELATIONAL_EXPR, SHIFT_EXPR, STRUCT_EXPR, + STRUCT_LITERAL_EXPR, TYPED_ARRAY_LITERAL_EXPR, TYPED_STRUCT_LITERAL_EXPR, UNARY_DOT_EXPR, + UNINITIALIZED_EXPR, UNION_EXPR), + }; + + /* ********************************************************** */ + // argument ((',' | ',,') argument)* [','] + static boolean argList(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "argList")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = argument(builder_, level_ + 1); + result_ = result_ && argList_1(builder_, level_ + 1); + result_ = result_ && argList_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ((',' | ',,') argument)* + private static boolean argList_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "argList_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!argList_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "argList_1", pos_)) break; + } + return true; + } + + // (',' | ',,') argument + private static boolean argList_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "argList_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = argList_1_0_0(builder_, level_ + 1); + result_ = result_ && argument(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ',' | ',,' + private static boolean argList_1_0_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "argList_1_0_0")) return false; + boolean result_; + result_ = consumeToken(builder_, COMMA); + if (!result_) result_ = consumeToken(builder_, DOUBLE_COMMA); + return result_; + } + + // [','] + private static boolean argList_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "argList_2")) return false; + consumeToken(builder_, COMMA); + return true; + } + + /* ********************************************************** */ + // '---' | expr + public static boolean argument(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "argument")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, ARGUMENT, ""); + result_ = consumeToken(builder_, TRIPLE_MINUS); + if (!result_) result_ = expr(builder_, level_ + 1, -1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + /* ********************************************************** */ + // '.[' [argList] ']' + public static boolean arrayLiteralExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "arrayLiteralExpr")) return false; + if (!nextTokenIs(builder_, BEGIN_ARRAY_LITERAL)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, BEGIN_ARRAY_LITERAL); + result_ = result_ && arrayLiteralExpr_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACKET); + exit_section_(builder_, marker_, ARRAY_LITERAL_EXPR, result_); + return result_; + } + + // [argList] + private static boolean arrayLiteralExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "arrayLiteralExpr_1")) return false; + argList(builder_, level_ + 1); + return true; + } + + /* ********************************************************** */ + // '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' + // | '<<=' | '>>=' | '<<<=' | '>>>=' | '&&=' | '||=' + static boolean assignOp_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "assignOp_")) return false; + boolean result_; + result_ = consumeToken(builder_, EQ); + if (!result_) result_ = consumeToken(builder_, PLUS_EQ); + if (!result_) result_ = consumeToken(builder_, MINUS_EQ); + if (!result_) result_ = consumeToken(builder_, STAR_EQ); + if (!result_) result_ = consumeToken(builder_, SLASH_EQ); + if (!result_) result_ = consumeToken(builder_, PERCENT_EQ); + if (!result_) result_ = consumeToken(builder_, AND_EQ); + if (!result_) result_ = consumeToken(builder_, OR_EQ); + if (!result_) result_ = consumeToken(builder_, XOR_EQ); + if (!result_) result_ = consumeToken(builder_, SHL_EQ); + if (!result_) result_ = consumeToken(builder_, SHR_EQ); + if (!result_) result_ = consumeToken(builder_, ROL_EQ); + if (!result_) result_ = consumeToken(builder_, ROR_EQ); + if (!result_) result_ = consumeToken(builder_, AND_AND_EQ); + if (!result_) result_ = consumeToken(builder_, OR_OR_EQ); + return result_; + } + + /* ********************************************************** */ + // '`' (IDENT | 'defer' | 'return' | 'push_context' | 'operator') + public static boolean backtickExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "backtickExpr")) return false; + if (!nextTokenIs(builder_, BACKTICK)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, BACKTICK); + result_ = result_ && backtickExpr_1(builder_, level_ + 1); + exit_section_(builder_, marker_, BACKTICK_EXPR, result_); + return result_; + } + + // IDENT | 'defer' | 'return' | 'push_context' | 'operator' + private static boolean backtickExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "backtickExpr_1")) return false; + boolean result_; + result_ = consumeToken(builder_, IDENT); + if (!result_) result_ = consumeToken(builder_, KW_DEFER); + if (!result_) result_ = consumeToken(builder_, KW_RETURN); + if (!result_) result_ = consumeToken(builder_, KW_PUSH_CONTEXT); + if (!result_) result_ = consumeToken(builder_, KW_OPERATOR); + return result_; + } + + /* ********************************************************** */ + // '{' statement* '}' + public static boolean block(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "block")) return false; + if (!nextTokenIs(builder_, LBRACE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, LBRACE); + result_ = result_ && block_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACE); + exit_section_(builder_, marker_, BLOCK, result_); + return result_; + } + + // statement* + private static boolean block_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "block_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!statement(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "block_1", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // 'break' [IDENT] semi + public static boolean breakStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "breakStatement")) return false; + if (!nextTokenIs(builder_, KW_BREAK)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_BREAK); + result_ = result_ && breakStatement_1(builder_, level_ + 1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, marker_, BREAK_STATEMENT, result_); + return result_; + } + + // [IDENT] + private static boolean breakStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "breakStatement_1")) return false; + consumeToken(builder_, IDENT); + return true; + } + + /* ********************************************************** */ + // builtinName_ '(' [argList] ')' + public static boolean builtinCallExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "builtinCallExpr")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, BUILTIN_CALL_EXPR, ""); + result_ = builtinName_(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, LPAREN); + result_ = result_ && builtinCallExpr_2(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RPAREN); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // [argList] + private static boolean builtinCallExpr_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "builtinCallExpr_2")) return false; + argList(builder_, level_ + 1); + return true; + } + + /* ********************************************************** */ + // 'size_of' | 'type_of' | 'type_info' | 'code_of' + // | 'initializer_of' | 'is_constant' + static boolean builtinName_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "builtinName_")) return false; + boolean result_; + result_ = consumeToken(builder_, KW_SIZE_OF); + if (!result_) result_ = consumeToken(builder_, KW_TYPE_OF); + if (!result_) result_ = consumeToken(builder_, KW_TYPE_INFO); + if (!result_) result_ = consumeToken(builder_, KW_CODE_OF); + if (!result_) result_ = consumeToken(builder_, KW_INITIALIZER_OF); + if (!result_) result_ = consumeToken(builder_, KW_IS_CONSTANT); + return result_; + } + + /* ********************************************************** */ + // 'case' [expr] [';'] statement* + public static boolean caseClause(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "caseClause")) return false; + if (!nextTokenIs(builder_, KW_CASE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_CASE); + result_ = result_ && caseClause_1(builder_, level_ + 1); + result_ = result_ && caseClause_2(builder_, level_ + 1); + result_ = result_ && caseClause_3(builder_, level_ + 1); + exit_section_(builder_, marker_, CASE_CLAUSE, result_); + return result_; + } + + // [expr] + private static boolean caseClause_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "caseClause_1")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + // [';'] + private static boolean caseClause_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "caseClause_2")) return false; + consumeToken(builder_, SEMICOLON); + return true; + } + + // statement* + private static boolean caseClause_3(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "caseClause_3")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!statement(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "caseClause_3", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // 'continue' [IDENT] semi + public static boolean continueStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "continueStatement")) return false; + if (!nextTokenIs(builder_, KW_CONTINUE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_CONTINUE); + result_ = result_ && continueStatement_1(builder_, level_ + 1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, marker_, CONTINUE_STATEMENT, result_); + return result_; + } + + // [IDENT] + private static boolean continueStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "continueStatement_1")) return false; + consumeToken(builder_, IDENT); + return true; + } + + /* ********************************************************** */ + // <> | 'using' + static boolean declModifier_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declModifier_")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dirPlain(builder_, level_ + 1); + if (!result_) result_ = consumeToken(builder_, KW_USING); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // IDENT (',' IDENT)* + public static boolean declNames(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declNames")) return false; + if (!nextTokenIs(builder_, IDENT)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, IDENT); + result_ = result_ && declNames_1(builder_, level_ + 1); + exit_section_(builder_, marker_, DECL_NAMES, result_); + return result_; + } + + // (',' IDENT)* + private static boolean declNames_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declNames_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!declNames_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "declNames_1", pos_)) break; + } + return true; + } + + // ',' IDENT + private static boolean declNames_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declNames_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokens(builder_, 0, COMMA, IDENT); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // ':' [<>] [('=' | ':') initializer] + // | ':=' initializer + // | '::' initializer + static boolean declTail_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail_")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = declTail__0(builder_, level_ + 1); + if (!result_) result_ = declTail__1(builder_, level_ + 1); + if (!result_) result_ = declTail__2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ':' [<>] [('=' | ':') initializer] + private static boolean declTail__0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail__0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COLON); + result_ = result_ && declTail__0_1(builder_, level_ + 1); + result_ = result_ && declTail__0_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [<>] + private static boolean declTail__0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail__0_1")) return false; + exprNoAssign(builder_, level_ + 1); + return true; + } + + // [('=' | ':') initializer] + private static boolean declTail__0_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail__0_2")) return false; + declTail__0_2_0(builder_, level_ + 1); + return true; + } + + // ('=' | ':') initializer + private static boolean declTail__0_2_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail__0_2_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = declTail__0_2_0_0(builder_, level_ + 1); + result_ = result_ && initializer(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // '=' | ':' + private static boolean declTail__0_2_0_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail__0_2_0_0")) return false; + boolean result_; + result_ = consumeToken(builder_, EQ); + if (!result_) result_ = consumeToken(builder_, COLON); + return result_; + } + + // ':=' initializer + private static boolean declTail__1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail__1")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COLON_EQ); + result_ = result_ && initializer(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // '::' initializer + private static boolean declTail__2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declTail__2")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COLON_COLON); + result_ = result_ && initializer(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // <> declModifier_* declNames declTail_ NOTE* semi + public static boolean declaration(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declaration")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, DECLARATION, ""); + result_ = isDeclarationAhead(builder_, level_ + 1); + result_ = result_ && declaration_1(builder_, level_ + 1); + result_ = result_ && declNames(builder_, level_ + 1); + result_ = result_ && declTail_(builder_, level_ + 1); + result_ = result_ && declaration_4(builder_, level_ + 1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // declModifier_* + private static boolean declaration_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declaration_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!declModifier_(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "declaration_1", pos_)) break; + } + return true; + } + + // NOTE* + private static boolean declaration_4(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "declaration_4")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!consumeToken(builder_, NOTE)) break; + if (!empty_element_parsed_guard_(builder_, "declaration_4", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // ['`'] 'defer' statement + public static boolean deferStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "deferStatement")) return false; + if (!nextTokenIs(builder_, "", BACKTICK, KW_DEFER)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, DEFER_STATEMENT, ""); + result_ = deferStatement_0(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, KW_DEFER); + result_ = result_ && statement(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // ['`'] + private static boolean deferStatement_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "deferStatement_0")) return false; + consumeToken(builder_, BACKTICK); + return true; + } + + /* ********************************************************** */ + // <> expr [expr] + // | <> [',' IDENT] block + // | <> [',' IDENT] [expr] + // | <> [',' IDENT] + public static boolean directiveExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _COLLAPSE_, DIRECTIVE_EXPR, ""); + result_ = directiveExpr_0(builder_, level_ + 1); + if (!result_) result_ = directiveExpr_1(builder_, level_ + 1); + if (!result_) result_ = directiveExpr_2(builder_, level_ + 1); + if (!result_) result_ = directiveExpr_3(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // <> expr [expr] + private static boolean directiveExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dir(builder_, level_ + 1, "#assert"); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && directiveExpr_0_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [expr] + private static boolean directiveExpr_0_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_0_2")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + // <> [',' IDENT] block + private static boolean directiveExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_1")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dirWithBlock(builder_, level_ + 1); + result_ = result_ && directiveExpr_1_1(builder_, level_ + 1); + result_ = result_ && block(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [',' IDENT] + private static boolean directiveExpr_1_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_1_1")) return false; + parseTokens(builder_, 0, COMMA, IDENT); + return true; + } + + // <> [',' IDENT] [expr] + private static boolean directiveExpr_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_2")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dirWithOperand(builder_, level_ + 1); + result_ = result_ && directiveExpr_2_1(builder_, level_ + 1); + result_ = result_ && directiveExpr_2_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [',' IDENT] + private static boolean directiveExpr_2_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_2_1")) return false; + parseTokens(builder_, 0, COMMA, IDENT); + return true; + } + + // [expr] + private static boolean directiveExpr_2_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_2_2")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + // <> [',' IDENT] + private static boolean directiveExpr_3(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_3")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dirPlain(builder_, level_ + 1); + result_ = result_ && directiveExpr_3_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [',' IDENT] + private static boolean directiveExpr_3_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveExpr_3_1")) return false; + parseTokens(builder_, 0, COMMA, IDENT); + return true; + } + + /* ********************************************************** */ + // <> [',' IDENT] [';'] + public static boolean directiveStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveStatement")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, DIRECTIVE_STATEMENT, ""); + result_ = dirBare(builder_, level_ + 1); + result_ = result_ && directiveStatement_1(builder_, level_ + 1); + result_ = result_ && directiveStatement_2(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // [',' IDENT] + private static boolean directiveStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveStatement_1")) return false; + parseTokens(builder_, 0, COMMA, IDENT); + return true; + } + + // [';'] + private static boolean directiveStatement_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "directiveStatement_2")) return false; + consumeToken(builder_, SEMICOLON); + return true; + } + + /* ********************************************************** */ + // 'else' statement + public static boolean elseClause(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "elseClause")) return false; + if (!nextTokenIs(builder_, KW_ELSE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_ELSE); + result_ = result_ && statement(builder_, level_ + 1); + exit_section_(builder_, marker_, ELSE_CLAUSE, result_); + return result_; + } + + /* ********************************************************** */ + // ('enum' | 'enum_flags') [!'{' expr] structModifier_* block + public static boolean enumExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "enumExpr")) return false; + if (!nextTokenIs(builder_, "", KW_ENUM, KW_ENUM_FLAGS)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, ENUM_EXPR, ""); + result_ = enumExpr_0(builder_, level_ + 1); + result_ = result_ && enumExpr_1(builder_, level_ + 1); + result_ = result_ && enumExpr_2(builder_, level_ + 1); + result_ = result_ && block(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // 'enum' | 'enum_flags' + private static boolean enumExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "enumExpr_0")) return false; + boolean result_; + result_ = consumeToken(builder_, KW_ENUM); + if (!result_) result_ = consumeToken(builder_, KW_ENUM_FLAGS); + return result_; + } + + // [!'{' expr] + private static boolean enumExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "enumExpr_1")) return false; + enumExpr_1_0(builder_, level_ + 1); + return true; + } + + // !'{' expr + private static boolean enumExpr_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "enumExpr_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = enumExpr_1_0_0(builder_, level_ + 1); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // !'{' + private static boolean enumExpr_1_0_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "enumExpr_1_0_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NOT_); + result_ = !consumeToken(builder_, LBRACE); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // structModifier_* + private static boolean enumExpr_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "enumExpr_2")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!structModifier_(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "enumExpr_2", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // expr (',' expr)* NOTE* semi + public static boolean expressionStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "expressionStatement")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, EXPRESSION_STATEMENT, ""); + result_ = expr(builder_, level_ + 1, -1); + result_ = result_ && expressionStatement_1(builder_, level_ + 1); + result_ = result_ && expressionStatement_2(builder_, level_ + 1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // (',' expr)* + private static boolean expressionStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "expressionStatement_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!expressionStatement_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "expressionStatement_1", pos_)) break; + } + return true; + } + + // ',' expr + private static boolean expressionStatement_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "expressionStatement_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // NOTE* + private static boolean expressionStatement_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "expressionStatement_2")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!consumeToken(builder_, NOTE)) break; + if (!empty_element_parsed_guard_(builder_, "expressionStatement_2", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // '<' | '*' + static boolean forModifier_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forModifier_")) return false; + if (!nextTokenIs(builder_, "", LT, STAR)) return false; + boolean result_; + result_ = consumeToken(builder_, LT); + if (!result_) result_ = consumeToken(builder_, STAR); + return result_; + } + + /* ********************************************************** */ + // IDENT (',' IDENT)* + public static boolean forNames(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forNames")) return false; + if (!nextTokenIs(builder_, IDENT)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, IDENT); + result_ = result_ && forNames_1(builder_, level_ + 1); + exit_section_(builder_, marker_, FOR_NAMES, result_); + return result_; + } + + // (',' IDENT)* + private static boolean forNames_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forNames_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!forNames_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "forNames_1", pos_)) break; + } + return true; + } + + // ',' IDENT + private static boolean forNames_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forNames_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokens(builder_, 0, COMMA, IDENT); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // 'for' [':' expr] forModifier_* [<> forNames ':'] expr statement + public static boolean forStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forStatement")) return false; + if (!nextTokenIs(builder_, KW_FOR)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_FOR); + result_ = result_ && forStatement_1(builder_, level_ + 1); + result_ = result_ && forStatement_2(builder_, level_ + 1); + result_ = result_ && forStatement_3(builder_, level_ + 1); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && statement(builder_, level_ + 1); + exit_section_(builder_, marker_, FOR_STATEMENT, result_); + return result_; + } + + // [':' expr] + private static boolean forStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forStatement_1")) return false; + forStatement_1_0(builder_, level_ + 1); + return true; + } + + // ':' expr + private static boolean forStatement_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forStatement_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COLON); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // forModifier_* + private static boolean forStatement_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forStatement_2")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!forModifier_(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "forStatement_2", pos_)) break; + } + return true; + } + + // [<> forNames ':'] + private static boolean forStatement_3(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forStatement_3")) return false; + forStatement_3_0(builder_, level_ + 1); + return true; + } + + // <> forNames ':' + private static boolean forStatement_3_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "forStatement_3_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = isForNamesAhead(builder_, level_ + 1); + result_ = result_ && forNames(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, COLON); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // 'if' | <> + static boolean ifKeyword_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifKeyword_")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_IF); + if (!result_) result_ = dir(builder_, level_ + 1, "#if"); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // ifKeyword_ [<>] expr (switchBody | ['then'] statement [elseClause]) + public static boolean ifStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifStatement")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, IF_STATEMENT, ""); + result_ = ifKeyword_(builder_, level_ + 1); + result_ = result_ && ifStatement_1(builder_, level_ + 1); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && ifStatement_3(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // [<>] + private static boolean ifStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifStatement_1")) return false; + dir(builder_, level_ + 1, "#complete"); + return true; + } + + // switchBody | ['then'] statement [elseClause] + private static boolean ifStatement_3(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifStatement_3")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = switchBody(builder_, level_ + 1); + if (!result_) result_ = ifStatement_3_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ['then'] statement [elseClause] + private static boolean ifStatement_3_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifStatement_3_1")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = ifStatement_3_1_0(builder_, level_ + 1); + result_ = result_ && statement(builder_, level_ + 1); + result_ = result_ && ifStatement_3_1_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ['then'] + private static boolean ifStatement_3_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifStatement_3_1_0")) return false; + consumeToken(builder_, KW_THEN); + return true; + } + + // [elseClause] + private static boolean ifStatement_3_1_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifStatement_3_1_2")) return false; + elseClause(builder_, level_ + 1); + return true; + } + + /* ********************************************************** */ + // '---' | expr + public static boolean initializer(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "initializer")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, INITIALIZER, ""); + result_ = consumeToken(builder_, TRIPLE_MINUS); + if (!result_) result_ = expr(builder_, level_ + 1, -1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + /* ********************************************************** */ + // 'interface' [expr] + public static boolean interfaceExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "interfaceExpr")) return false; + if (!nextTokenIs(builder_, KW_INTERFACE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_INTERFACE); + result_ = result_ && interfaceExpr_1(builder_, level_ + 1); + exit_section_(builder_, marker_, INTERFACE_EXPR, result_); + return result_; + } + + // [expr] + private static boolean interfaceExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "interfaceExpr_1")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + /* ********************************************************** */ + // statement* + static boolean jaiFile(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "jaiFile")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!statement(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "jaiFile", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // 'if' | 'for' | 'case' | 'enum' | 'cast' | 'union' | 'struct' + // | 'remove' | 'inline' | 'context' | 'operator' | 'interface' + // | 'type_info' | 'using' | 'defer' | 'return' | 'break' + // | 'continue' | 'then' | 'else' | 'while' | 'null' | 'true' | 'false' + static boolean keywordAsName_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "keywordAsName_")) return false; + boolean result_; + result_ = consumeToken(builder_, KW_IF); + if (!result_) result_ = consumeToken(builder_, KW_FOR); + if (!result_) result_ = consumeToken(builder_, KW_CASE); + if (!result_) result_ = consumeToken(builder_, KW_ENUM); + if (!result_) result_ = consumeToken(builder_, KW_CAST); + if (!result_) result_ = consumeToken(builder_, KW_UNION); + if (!result_) result_ = consumeToken(builder_, KW_STRUCT); + if (!result_) result_ = consumeToken(builder_, KW_REMOVE); + if (!result_) result_ = consumeToken(builder_, KW_INLINE); + if (!result_) result_ = consumeToken(builder_, KW_CONTEXT); + if (!result_) result_ = consumeToken(builder_, KW_OPERATOR); + if (!result_) result_ = consumeToken(builder_, KW_INTERFACE); + if (!result_) result_ = consumeToken(builder_, KW_TYPE_INFO); + if (!result_) result_ = consumeToken(builder_, KW_USING); + if (!result_) result_ = consumeToken(builder_, KW_DEFER); + if (!result_) result_ = consumeToken(builder_, KW_RETURN); + if (!result_) result_ = consumeToken(builder_, KW_BREAK); + if (!result_) result_ = consumeToken(builder_, KW_CONTINUE); + if (!result_) result_ = consumeToken(builder_, KW_THEN); + if (!result_) result_ = consumeToken(builder_, KW_ELSE); + if (!result_) result_ = consumeToken(builder_, KW_WHILE); + if (!result_) result_ = consumeToken(builder_, KW_NULL); + if (!result_) result_ = consumeToken(builder_, KW_TRUE); + if (!result_) result_ = consumeToken(builder_, KW_FALSE); + return result_; + } + + /* ********************************************************** */ + // NUMBER | STRING | HERE_STRING | 'true' | 'false' | 'null' | 'context' + public static boolean literalExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "literalExpr")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, LITERAL_EXPR, ""); + result_ = consumeToken(builder_, NUMBER); + if (!result_) result_ = consumeToken(builder_, STRING); + if (!result_) result_ = consumeToken(builder_, HERE_STRING); + if (!result_) result_ = consumeToken(builder_, KW_TRUE); + if (!result_) result_ = consumeToken(builder_, KW_FALSE); + if (!result_) result_ = consumeToken(builder_, KW_NULL); + if (!result_) result_ = consumeToken(builder_, KW_CONTEXT); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + /* ********************************************************** */ + // IDENT | NUMBER | keywordAsName_ + public static boolean memberName(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "memberName")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, MEMBER_NAME, ""); + result_ = consumeToken(builder_, IDENT); + if (!result_) result_ = consumeToken(builder_, NUMBER); + if (!result_) result_ = keywordAsName_(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + /* ********************************************************** */ + // NOTE+ + public static boolean noteStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "noteStatement")) return false; + if (!nextTokenIs(builder_, NOTE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, NOTE); + while (result_) { + int pos_ = current_position_(builder_); + if (!consumeToken(builder_, NOTE)) break; + if (!empty_element_parsed_guard_(builder_, "noteStatement", pos_)) break; + } + exit_section_(builder_, marker_, NOTE_STATEMENT, result_); + return result_; + } + + /* ********************************************************** */ + // 'operator' operatorSymbol '::' expr NOTE* semi + public static boolean operatorDeclaration(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "operatorDeclaration")) return false; + if (!nextTokenIs(builder_, KW_OPERATOR)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_OPERATOR); + result_ = result_ && operatorSymbol(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, COLON_COLON); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && operatorDeclaration_4(builder_, level_ + 1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, marker_, OPERATOR_DECLARATION, result_); + return result_; + } + + // NOTE* + private static boolean operatorDeclaration_4(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "operatorDeclaration_4")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!consumeToken(builder_, NOTE)) break; + if (!empty_element_parsed_guard_(builder_, "operatorDeclaration_4", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // '+' | '-' | '*' | '/' | '%' | '==' | '!=' | '<' | '>' | '<=' | '>=' + // | '&' | '|' | '^' | '~' | '<<' | '>>' | '<<<' | '>>>' + // | '[' ']' | '[' ']' '=' + public static boolean operatorSymbol(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "operatorSymbol")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, OPERATOR_SYMBOL, ""); + result_ = consumeToken(builder_, PLUS); + if (!result_) result_ = consumeToken(builder_, MINUS); + if (!result_) result_ = consumeToken(builder_, STAR); + if (!result_) result_ = consumeToken(builder_, SLASH); + if (!result_) result_ = consumeToken(builder_, PERCENT); + if (!result_) result_ = consumeToken(builder_, EQ_EQ); + if (!result_) result_ = consumeToken(builder_, NOT_EQ); + if (!result_) result_ = consumeToken(builder_, LT); + if (!result_) result_ = consumeToken(builder_, GT); + if (!result_) result_ = consumeToken(builder_, LT_EQ); + if (!result_) result_ = consumeToken(builder_, GT_EQ); + if (!result_) result_ = consumeToken(builder_, AND); + if (!result_) result_ = consumeToken(builder_, OR); + if (!result_) result_ = consumeToken(builder_, XOR); + if (!result_) result_ = consumeToken(builder_, TILDE); + if (!result_) result_ = consumeToken(builder_, SHL); + if (!result_) result_ = consumeToken(builder_, SHR); + if (!result_) result_ = consumeToken(builder_, ROL); + if (!result_) result_ = consumeToken(builder_, ROR); + if (!result_) result_ = parseTokens(builder_, 0, LBRACKET, RBRACKET); + if (!result_) result_ = parseTokens(builder_, 0, LBRACKET, RBRACKET, EQ); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + /* ********************************************************** */ + // parameter (',' parameter)* [','] + static boolean paramList(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramList")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = parameter(builder_, level_ + 1); + result_ = result_ && paramList_1(builder_, level_ + 1); + result_ = result_ && paramList_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // (',' parameter)* + private static boolean paramList_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramList_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!paramList_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "paramList_1", pos_)) break; + } + return true; + } + + // ',' parameter + private static boolean paramList_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramList_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && parameter(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [','] + private static boolean paramList_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramList_2")) return false; + consumeToken(builder_, COMMA); + return true; + } + + /* ********************************************************** */ + // ['$' | '$$'] IDENT + public static boolean paramName(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramName")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, PARAM_NAME, ""); + result_ = paramName_0(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, IDENT); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // ['$' | '$$'] + private static boolean paramName_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramName_0")) return false; + paramName_0_0(builder_, level_ + 1); + return true; + } + + // '$' | '$$' + private static boolean paramName_0_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramName_0_0")) return false; + boolean result_; + result_ = consumeToken(builder_, DOLLAR); + if (!result_) result_ = consumeToken(builder_, DOUBLE_DOLLAR); + return result_; + } + + /* ********************************************************** */ + // paramName (',' paramName)* + public static boolean paramNames(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramNames")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, PARAM_NAMES, ""); + result_ = paramName(builder_, level_ + 1); + result_ = result_ && paramNames_1(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // (',' paramName)* + private static boolean paramNames_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramNames_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!paramNames_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "paramNames_1", pos_)) break; + } + return true; + } + + // ',' paramName + private static boolean paramNames_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramNames_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && paramName(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // ':' [<>] ['=' initializer] + // | ':=' initializer + // | '::' initializer + static boolean paramTypeTail_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramTypeTail_")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = paramTypeTail__0(builder_, level_ + 1); + if (!result_) result_ = paramTypeTail__1(builder_, level_ + 1); + if (!result_) result_ = paramTypeTail__2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ':' [<>] ['=' initializer] + private static boolean paramTypeTail__0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramTypeTail__0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COLON); + result_ = result_ && paramTypeTail__0_1(builder_, level_ + 1); + result_ = result_ && paramTypeTail__0_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [<>] + private static boolean paramTypeTail__0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramTypeTail__0_1")) return false; + exprNoAssign(builder_, level_ + 1); + return true; + } + + // ['=' initializer] + private static boolean paramTypeTail__0_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramTypeTail__0_2")) return false; + paramTypeTail__0_2_0(builder_, level_ + 1); + return true; + } + + // '=' initializer + private static boolean paramTypeTail__0_2_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramTypeTail__0_2_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, EQ); + result_ = result_ && initializer(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ':=' initializer + private static boolean paramTypeTail__1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramTypeTail__1")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COLON_EQ); + result_ = result_ && initializer(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // '::' initializer + private static boolean paramTypeTail__2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "paramTypeTail__2")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COLON_COLON); + result_ = result_ && initializer(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // ['using'] parameterTail_ + public static boolean parameter(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parameter")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, PARAMETER, ""); + result_ = parameter_0(builder_, level_ + 1); + result_ = result_ && parameterTail_(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // ['using'] + private static boolean parameter_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parameter_0")) return false; + consumeToken(builder_, KW_USING); + return true; + } + + /* ********************************************************** */ + // <> paramNames paramTypeTail_ | '..' | expr + static boolean parameterTail_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parameterTail_")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = parameterTail__0(builder_, level_ + 1); + if (!result_) result_ = consumeToken(builder_, DOUBLE_DOT); + if (!result_) result_ = expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // <> paramNames paramTypeTail_ + private static boolean parameterTail__0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parameterTail__0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = isParamNameAhead(builder_, level_ + 1); + result_ = result_ && paramNames(builder_, level_ + 1); + result_ = result_ && paramTypeTail_(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // '(' [expr (',' expr)*] ')' + public static boolean parenExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parenExpr")) return false; + if (!nextTokenIs(builder_, LPAREN)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, LPAREN); + result_ = result_ && parenExpr_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RPAREN); + exit_section_(builder_, marker_, PAREN_EXPR, result_); + return result_; + } + + // [expr (',' expr)*] + private static boolean parenExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parenExpr_1")) return false; + parenExpr_1_0(builder_, level_ + 1); + return true; + } + + // expr (',' expr)* + private static boolean parenExpr_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parenExpr_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = expr(builder_, level_ + 1, -1); + result_ = result_ && parenExpr_1_0_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // (',' expr)* + private static boolean parenExpr_1_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parenExpr_1_0_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!parenExpr_1_0_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "parenExpr_1_0_1", pos_)) break; + } + return true; + } + + // ',' expr + private static boolean parenExpr_1_0_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "parenExpr_1_0_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // '-' | '+' | '!' | '~' | '*' | '..' | '$' | '$$' | '<<' | '>>' + static boolean prefixOp_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "prefixOp_")) return false; + boolean result_; + result_ = consumeToken(builder_, MINUS); + if (!result_) result_ = consumeToken(builder_, PLUS); + if (!result_) result_ = consumeToken(builder_, NOT); + if (!result_) result_ = consumeToken(builder_, TILDE); + if (!result_) result_ = consumeToken(builder_, STAR); + if (!result_) result_ = consumeToken(builder_, DOUBLE_DOT); + if (!result_) result_ = consumeToken(builder_, DOLLAR); + if (!result_) result_ = consumeToken(builder_, DOUBLE_DOLLAR); + if (!result_) result_ = consumeToken(builder_, SHL); + if (!result_) result_ = consumeToken(builder_, SHR); + return result_; + } + + /* ********************************************************** */ + // <> '(' [paramList] ')' ['->' returnTypes_] procModifier* [block] + // | '->' returnTypes_ procModifier* [block] + public static boolean procLiteralExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, PROC_LITERAL_EXPR, ""); + result_ = procLiteralExpr_0(builder_, level_ + 1); + if (!result_) result_ = procLiteralExpr_1(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // <> '(' [paramList] ')' ['->' returnTypes_] procModifier* [block] + private static boolean procLiteralExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = isProcHeaderAhead(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, LPAREN); + result_ = result_ && procLiteralExpr_0_2(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RPAREN); + result_ = result_ && procLiteralExpr_0_4(builder_, level_ + 1); + result_ = result_ && procLiteralExpr_0_5(builder_, level_ + 1); + result_ = result_ && procLiteralExpr_0_6(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [paramList] + private static boolean procLiteralExpr_0_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_0_2")) return false; + paramList(builder_, level_ + 1); + return true; + } + + // ['->' returnTypes_] + private static boolean procLiteralExpr_0_4(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_0_4")) return false; + procLiteralExpr_0_4_0(builder_, level_ + 1); + return true; + } + + // '->' returnTypes_ + private static boolean procLiteralExpr_0_4_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_0_4_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, RIGHT_ARROW); + result_ = result_ && returnTypes_(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // procModifier* + private static boolean procLiteralExpr_0_5(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_0_5")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!procModifier(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "procLiteralExpr_0_5", pos_)) break; + } + return true; + } + + // [block] + private static boolean procLiteralExpr_0_6(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_0_6")) return false; + block(builder_, level_ + 1); + return true; + } + + // '->' returnTypes_ procModifier* [block] + private static boolean procLiteralExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_1")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, RIGHT_ARROW); + result_ = result_ && returnTypes_(builder_, level_ + 1); + result_ = result_ && procLiteralExpr_1_2(builder_, level_ + 1); + result_ = result_ && procLiteralExpr_1_3(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // procModifier* + private static boolean procLiteralExpr_1_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_1_2")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!procModifier(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "procLiteralExpr_1_2", pos_)) break; + } + return true; + } + + // [block] + private static boolean procLiteralExpr_1_3(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procLiteralExpr_1_3")) return false; + block(builder_, level_ + 1); + return true; + } + + /* ********************************************************** */ + // <> block + // | <> [',' IDENT] [expr] + // | <> [',' IDENT] + public static boolean procModifier(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procModifier")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, PROC_MODIFIER, ""); + result_ = procModifier_0(builder_, level_ + 1); + if (!result_) result_ = procModifier_1(builder_, level_ + 1); + if (!result_) result_ = procModifier_2(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // <> block + private static boolean procModifier_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procModifier_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dirWithBlock(builder_, level_ + 1); + result_ = result_ && block(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // <> [',' IDENT] [expr] + private static boolean procModifier_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procModifier_1")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dirWithOperand(builder_, level_ + 1); + result_ = result_ && procModifier_1_1(builder_, level_ + 1); + result_ = result_ && procModifier_1_2(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [',' IDENT] + private static boolean procModifier_1_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procModifier_1_1")) return false; + parseTokens(builder_, 0, COMMA, IDENT); + return true; + } + + // [expr] + private static boolean procModifier_1_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procModifier_1_2")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + // <> [',' IDENT] + private static boolean procModifier_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procModifier_2")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = dirPlain(builder_, level_ + 1); + result_ = result_ && procModifier_2_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [',' IDENT] + private static boolean procModifier_2_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "procModifier_2_1")) return false; + parseTokens(builder_, 0, COMMA, IDENT); + return true; + } + + /* ********************************************************** */ + // ['`'] 'push_context' expr block + public static boolean pushContextStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "pushContextStatement")) return false; + if (!nextTokenIs(builder_, "", BACKTICK, KW_PUSH_CONTEXT)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, PUSH_CONTEXT_STATEMENT, ""); + result_ = pushContextStatement_0(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, KW_PUSH_CONTEXT); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && block(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // ['`'] + private static boolean pushContextStatement_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "pushContextStatement_0")) return false; + consumeToken(builder_, BACKTICK); + return true; + } + + /* ********************************************************** */ + // IDENT + public static boolean refExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "refExpr")) return false; + if (!nextTokenIs(builder_, IDENT)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, IDENT); + exit_section_(builder_, marker_, REF_EXPR, result_); + return result_; + } + + /* ********************************************************** */ + // 'remove' [expr] semi + public static boolean removeStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "removeStatement")) return false; + if (!nextTokenIs(builder_, KW_REMOVE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_REMOVE); + result_ = result_ && removeStatement_1(builder_, level_ + 1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, marker_, REMOVE_STATEMENT, result_); + return result_; + } + + // [expr] + private static boolean removeStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "removeStatement_1")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + /* ********************************************************** */ + // '(' [returnItem (',' returnItem)*] ')' + public static boolean returnGroup(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnGroup")) return false; + if (!nextTokenIs(builder_, LPAREN)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, LPAREN); + result_ = result_ && returnGroup_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RPAREN); + exit_section_(builder_, marker_, RETURN_GROUP, result_); + return result_; + } + + // [returnItem (',' returnItem)*] + private static boolean returnGroup_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnGroup_1")) return false; + returnGroup_1_0(builder_, level_ + 1); + return true; + } + + // returnItem (',' returnItem)* + private static boolean returnGroup_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnGroup_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = returnItem(builder_, level_ + 1); + result_ = result_ && returnGroup_1_0_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // (',' returnItem)* + private static boolean returnGroup_1_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnGroup_1_0_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!returnGroup_1_0_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "returnGroup_1_0_1", pos_)) break; + } + return true; + } + + // ',' returnItem + private static boolean returnGroup_1_0_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnGroup_1_0_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && returnItem(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // [<> IDENT ':'] <> ['=' initializer] + public static boolean returnItem(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnItem")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, RETURN_ITEM, ""); + result_ = returnItem_0(builder_, level_ + 1); + result_ = result_ && exprNoAssign(builder_, level_ + 1); + result_ = result_ && returnItem_2(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + // [<> IDENT ':'] + private static boolean returnItem_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnItem_0")) return false; + returnItem_0_0(builder_, level_ + 1); + return true; + } + + // <> IDENT ':' + private static boolean returnItem_0_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnItem_0_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = isParamNameAhead(builder_, level_ + 1); + result_ = result_ && consumeTokens(builder_, 0, IDENT, COLON); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // ['=' initializer] + private static boolean returnItem_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnItem_2")) return false; + returnItem_2_0(builder_, level_ + 1); + return true; + } + + // '=' initializer + private static boolean returnItem_2_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnItem_2_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, EQ); + result_ = result_ && initializer(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // 'return' [expr (',' expr)*] NOTE* semi + public static boolean returnStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnStatement")) return false; + if (!nextTokenIs(builder_, KW_RETURN)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_RETURN); + result_ = result_ && returnStatement_1(builder_, level_ + 1); + result_ = result_ && returnStatement_2(builder_, level_ + 1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, marker_, RETURN_STATEMENT, result_); + return result_; + } + + // [expr (',' expr)*] + private static boolean returnStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnStatement_1")) return false; + returnStatement_1_0(builder_, level_ + 1); + return true; + } + + // expr (',' expr)* + private static boolean returnStatement_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnStatement_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = expr(builder_, level_ + 1, -1); + result_ = result_ && returnStatement_1_0_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // (',' expr)* + private static boolean returnStatement_1_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnStatement_1_0_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!returnStatement_1_0_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "returnStatement_1_0_1", pos_)) break; + } + return true; + } + + // ',' expr + private static boolean returnStatement_1_0_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnStatement_1_0_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // NOTE* + private static boolean returnStatement_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnStatement_2")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!consumeToken(builder_, NOTE)) break; + if (!empty_element_parsed_guard_(builder_, "returnStatement_2", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // <> returnGroup | returnItem (',' returnItem)* + static boolean returnTypes_(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnTypes_")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = returnTypes__0(builder_, level_ + 1); + if (!result_) result_ = returnTypes__1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // <> returnGroup + private static boolean returnTypes__0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnTypes__0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = isReturnGroupAhead(builder_, level_ + 1); + result_ = result_ && returnGroup(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // returnItem (',' returnItem)* + private static boolean returnTypes__1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnTypes__1")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = returnItem(builder_, level_ + 1); + result_ = result_ && returnTypes__1_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // (',' returnItem)* + private static boolean returnTypes__1_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnTypes__1_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!returnTypes__1_1_0(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "returnTypes__1_1", pos_)) break; + } + return true; + } + + // ',' returnItem + private static boolean returnTypes__1_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "returnTypes__1_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && returnItem(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // ';' | <> + static boolean semi(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "semi")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, SEMICOLON); + if (!result_) result_ = prevEndsConstruct(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // ';' + // | block + // | ifStatement + // | whileStatement + // | forStatement + // | returnStatement + // | breakStatement + // | continueStatement + // | removeStatement + // | deferStatement + // | pushContextStatement + // | operatorDeclaration + // | usingStatement + // | noteStatement + // | directiveStatement + // | declaration + // | expressionStatement + public static boolean statement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "statement")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, STATEMENT, ""); + result_ = consumeToken(builder_, SEMICOLON); + if (!result_) result_ = block(builder_, level_ + 1); + if (!result_) result_ = ifStatement(builder_, level_ + 1); + if (!result_) result_ = whileStatement(builder_, level_ + 1); + if (!result_) result_ = forStatement(builder_, level_ + 1); + if (!result_) result_ = returnStatement(builder_, level_ + 1); + if (!result_) result_ = breakStatement(builder_, level_ + 1); + if (!result_) result_ = continueStatement(builder_, level_ + 1); + if (!result_) result_ = removeStatement(builder_, level_ + 1); + if (!result_) result_ = deferStatement(builder_, level_ + 1); + if (!result_) result_ = pushContextStatement(builder_, level_ + 1); + if (!result_) result_ = operatorDeclaration(builder_, level_ + 1); + if (!result_) result_ = usingStatement(builder_, level_ + 1); + if (!result_) result_ = noteStatement(builder_, level_ + 1); + if (!result_) result_ = directiveStatement(builder_, level_ + 1); + if (!result_) result_ = declaration(builder_, level_ + 1); + if (!result_) result_ = expressionStatement(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + /* ********************************************************** */ + // 'struct' ['(' [paramList] ')'] structModifier_* block + public static boolean structExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "structExpr")) return false; + if (!nextTokenIs(builder_, KW_STRUCT)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_STRUCT); + result_ = result_ && structExpr_1(builder_, level_ + 1); + result_ = result_ && structExpr_2(builder_, level_ + 1); + result_ = result_ && block(builder_, level_ + 1); + exit_section_(builder_, marker_, STRUCT_EXPR, result_); + return result_; + } + + // ['(' [paramList] ')'] + private static boolean structExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "structExpr_1")) return false; + structExpr_1_0(builder_, level_ + 1); + return true; + } + + // '(' [paramList] ')' + private static boolean structExpr_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "structExpr_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, LPAREN); + result_ = result_ && structExpr_1_0_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RPAREN); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [paramList] + private static boolean structExpr_1_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "structExpr_1_0_1")) return false; + paramList(builder_, level_ + 1); + return true; + } + + // structModifier_* + private static boolean structExpr_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "structExpr_2")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!structModifier_(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "structExpr_2", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // '.{' [argList] '}' + public static boolean structLiteralExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "structLiteralExpr")) return false; + if (!nextTokenIs(builder_, BEGIN_STRUCT_LITERAL)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, BEGIN_STRUCT_LITERAL); + result_ = result_ && structLiteralExpr_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACE); + exit_section_(builder_, marker_, STRUCT_LITERAL_EXPR, result_); + return result_; + } + + // [argList] + private static boolean structLiteralExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "structLiteralExpr_1")) return false; + argList(builder_, level_ + 1); + return true; + } + + /* ********************************************************** */ + // procModifier + static boolean structModifier_(PsiBuilder builder_, int level_) { + return procModifier(builder_, level_ + 1); + } + + /* ********************************************************** */ + // '==' '{' caseClause* '}' + public static boolean switchBody(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "switchBody")) return false; + if (!nextTokenIs(builder_, EQ_EQ)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokens(builder_, 0, EQ_EQ, LBRACE); + result_ = result_ && switchBody_2(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACE); + exit_section_(builder_, marker_, SWITCH_BODY, result_); + return result_; + } + + // caseClause* + private static boolean switchBody_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "switchBody_2")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!caseClause(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "switchBody_2", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // '.' memberName + public static boolean unaryDotExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "unaryDotExpr")) return false; + if (!nextTokenIs(builder_, DOT)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, DOT); + result_ = result_ && memberName(builder_, level_ + 1); + exit_section_(builder_, marker_, UNARY_DOT_EXPR, result_); + return result_; + } + + /* ********************************************************** */ + // '---' | '--' + public static boolean uninitializedExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "uninitializedExpr")) return false; + if (!nextTokenIs(builder_, "", DOUBLE_MINUS, TRIPLE_MINUS)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, UNINITIALIZED_EXPR, ""); + result_ = consumeToken(builder_, TRIPLE_MINUS); + if (!result_) result_ = consumeToken(builder_, DOUBLE_MINUS); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + + /* ********************************************************** */ + // 'union' structModifier_* block + public static boolean unionExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "unionExpr")) return false; + if (!nextTokenIs(builder_, KW_UNION)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_UNION); + result_ = result_ && unionExpr_1(builder_, level_ + 1); + result_ = result_ && block(builder_, level_ + 1); + exit_section_(builder_, marker_, UNION_EXPR, result_); + return result_; + } + + // structModifier_* + private static boolean unionExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "unionExpr_1")) return false; + while (true) { + int pos_ = current_position_(builder_); + if (!structModifier_(builder_, level_ + 1)) break; + if (!empty_element_parsed_guard_(builder_, "unionExpr_1", pos_)) break; + } + return true; + } + + /* ********************************************************** */ + // 'using' [',' expr] expr semi + public static boolean usingStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "usingStatement")) return false; + if (!nextTokenIs(builder_, KW_USING)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_USING); + result_ = result_ && usingStatement_1(builder_, level_ + 1); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && semi(builder_, level_ + 1); + exit_section_(builder_, marker_, USING_STATEMENT, result_); + return result_; + } + + // [',' expr] + private static boolean usingStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "usingStatement_1")) return false; + usingStatement_1_0(builder_, level_ + 1); + return true; + } + + // ',' expr + private static boolean usingStatement_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "usingStatement_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, COMMA); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // 'while' [<> IDENT ':'] expr statement + public static boolean whileStatement(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "whileStatement")) return false; + if (!nextTokenIs(builder_, KW_WHILE)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeToken(builder_, KW_WHILE); + result_ = result_ && whileStatement_1(builder_, level_ + 1); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && statement(builder_, level_ + 1); + exit_section_(builder_, marker_, WHILE_STATEMENT, result_); + return result_; + } + + // [<> IDENT ':'] + private static boolean whileStatement_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "whileStatement_1")) return false; + whileStatement_1_0(builder_, level_ + 1); + return true; + } + + // <> IDENT ':' + private static boolean whileStatement_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "whileStatement_1_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = isLabelAhead(builder_, level_ + 1); + result_ = result_ && consumeTokens(builder_, 0, IDENT, COLON); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + /* ********************************************************** */ + // Expression root: expr + // Operator priority table: + // 0: BINARY(assignExpr) + // 1: BINARY(lambdaExpr) + // 2: BINARY(orExpr) + // 3: BINARY(andExpr) + // 4: BINARY(equalityExpr) + // 5: BINARY(relationalExpr) + // 6: BINARY(bitOrExpr) + // 7: BINARY(bitXorExpr) + // 8: BINARY(bitAndExpr) + // 9: BINARY(shiftExpr) + // 10: BINARY(rangeExpr) + // 11: BINARY(addExpr) + // 12: BINARY(mulExpr) + // 13: PREFIX(prefixExpr) + // 14: ATOM(arrayTypeExpr) + // 15: ATOM(castExpr) + // 16: PREFIX(autoCastExpr) + // 17: PREFIX(inlineExpr) + // 18: ATOM(ifxExpr) + // 19: POSTFIX(callExpr) + // 20: POSTFIX(indexExpr) + // 21: POSTFIX(memberExpr) + // 22: POSTFIX(derefExpr) + // 23: POSTFIX(typedStructLiteralExpr) + // 24: POSTFIX(typedArrayLiteralExpr) + // 25: ATOM(primaryExpr) + public static boolean expr(PsiBuilder builder_, int level_, int priority_) { + if (!recursion_guard_(builder_, level_, "expr")) return false; + addVariant(builder_, ""); + boolean result_, pinned_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, ""); + result_ = prefixExpr(builder_, level_ + 1); + if (!result_) result_ = arrayTypeExpr(builder_, level_ + 1); + if (!result_) result_ = castExpr(builder_, level_ + 1); + if (!result_) result_ = autoCastExpr(builder_, level_ + 1); + if (!result_) result_ = inlineExpr(builder_, level_ + 1); + if (!result_) result_ = ifxExpr(builder_, level_ + 1); + if (!result_) result_ = primaryExpr(builder_, level_ + 1); + pinned_ = result_; + result_ = result_ && expr_0(builder_, level_ + 1, priority_); + exit_section_(builder_, level_, marker_, null, result_, pinned_, null); + return result_ || pinned_; + } + + public static boolean expr_0(PsiBuilder builder_, int level_, int priority_) { + if (!recursion_guard_(builder_, level_, "expr_0")) return false; + boolean result_ = true; + while (true) { + Marker marker_ = enter_section_(builder_, level_, _LEFT_, null); + if (priority_ < 0 && assignOp_(builder_, level_ + 1)) { + result_ = expr(builder_, level_, -1); + exit_section_(builder_, level_, marker_, ASSIGN_EXPR, result_, true, null); + } + else if (priority_ < 1 && consumeTokenSmart(builder_, QUICK_LAMBDA)) { + result_ = expr(builder_, level_, 0); + exit_section_(builder_, level_, marker_, LAMBDA_EXPR, result_, true, null); + } + else if (priority_ < 2 && consumeTokenSmart(builder_, OR_OR)) { + result_ = expr(builder_, level_, 2); + exit_section_(builder_, level_, marker_, OR_EXPR, result_, true, null); + } + else if (priority_ < 3 && consumeTokenSmart(builder_, AND_AND)) { + result_ = expr(builder_, level_, 3); + exit_section_(builder_, level_, marker_, AND_EXPR, result_, true, null); + } + else if (priority_ < 4 && equalityExpr_0(builder_, level_ + 1)) { + result_ = expr(builder_, level_, 4); + exit_section_(builder_, level_, marker_, EQUALITY_EXPR, result_, true, null); + } + else if (priority_ < 5 && relationalExpr_0(builder_, level_ + 1)) { + result_ = expr(builder_, level_, 5); + exit_section_(builder_, level_, marker_, RELATIONAL_EXPR, result_, true, null); + } + else if (priority_ < 6 && consumeTokenSmart(builder_, OR)) { + result_ = expr(builder_, level_, 6); + exit_section_(builder_, level_, marker_, BIT_OR_EXPR, result_, true, null); + } + else if (priority_ < 7 && consumeTokenSmart(builder_, XOR)) { + result_ = expr(builder_, level_, 7); + exit_section_(builder_, level_, marker_, BIT_XOR_EXPR, result_, true, null); + } + else if (priority_ < 8 && consumeTokenSmart(builder_, AND)) { + result_ = expr(builder_, level_, 8); + exit_section_(builder_, level_, marker_, BIT_AND_EXPR, result_, true, null); + } + else if (priority_ < 9 && shiftExpr_0(builder_, level_ + 1)) { + result_ = expr(builder_, level_, 9); + exit_section_(builder_, level_, marker_, SHIFT_EXPR, result_, true, null); + } + else if (priority_ < 10 && consumeTokenSmart(builder_, DOUBLE_DOT)) { + result_ = expr(builder_, level_, 10); + exit_section_(builder_, level_, marker_, RANGE_EXPR, result_, true, null); + } + else if (priority_ < 11 && addExpr_0(builder_, level_ + 1)) { + result_ = expr(builder_, level_, 11); + exit_section_(builder_, level_, marker_, ADD_EXPR, result_, true, null); + } + else if (priority_ < 12 && mulExpr_0(builder_, level_ + 1)) { + result_ = expr(builder_, level_, 12); + exit_section_(builder_, level_, marker_, MUL_EXPR, result_, true, null); + } + else if (priority_ < 19 && callExpr_0(builder_, level_ + 1)) { + result_ = true; + exit_section_(builder_, level_, marker_, CALL_EXPR, result_, true, null); + } + else if (priority_ < 20 && indexExpr_0(builder_, level_ + 1)) { + result_ = true; + exit_section_(builder_, level_, marker_, INDEX_EXPR, result_, true, null); + } + else if (priority_ < 21 && memberExpr_0(builder_, level_ + 1)) { + result_ = true; + exit_section_(builder_, level_, marker_, MEMBER_EXPR, result_, true, null); + } + else if (priority_ < 22 && consumeTokenSmart(builder_, POSTFIX_DEREFERENCE)) { + result_ = true; + exit_section_(builder_, level_, marker_, DEREF_EXPR, result_, true, null); + } + else if (priority_ < 23 && typedStructLiteralExpr_0(builder_, level_ + 1)) { + result_ = true; + exit_section_(builder_, level_, marker_, TYPED_STRUCT_LITERAL_EXPR, result_, true, null); + } + else if (priority_ < 24 && typedArrayLiteralExpr_0(builder_, level_ + 1)) { + result_ = true; + exit_section_(builder_, level_, marker_, TYPED_ARRAY_LITERAL_EXPR, result_, true, null); + } + else { + exit_section_(builder_, level_, marker_, null, false, false, null); + break; + } + } + return result_; + } + + // <> | '!=' | '===' + private static boolean equalityExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "equalityExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = eqEqNotSwitch(builder_, level_ + 1); + if (!result_) result_ = consumeTokenSmart(builder_, NOT_EQ); + if (!result_) result_ = consumeTokenSmart(builder_, EQ_EQ_EQ); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // '<' | '>' | '<=' | '>=' + private static boolean relationalExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "relationalExpr_0")) return false; + boolean result_; + result_ = consumeTokenSmart(builder_, LT); + if (!result_) result_ = consumeTokenSmart(builder_, GT); + if (!result_) result_ = consumeTokenSmart(builder_, LT_EQ); + if (!result_) result_ = consumeTokenSmart(builder_, GT_EQ); + return result_; + } + + // '<<' | '>>' | '<<<' | '>>>' + private static boolean shiftExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "shiftExpr_0")) return false; + boolean result_; + result_ = consumeTokenSmart(builder_, SHL); + if (!result_) result_ = consumeTokenSmart(builder_, SHR); + if (!result_) result_ = consumeTokenSmart(builder_, ROL); + if (!result_) result_ = consumeTokenSmart(builder_, ROR); + return result_; + } + + // '+' | '-' + private static boolean addExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "addExpr_0")) return false; + boolean result_; + result_ = consumeTokenSmart(builder_, PLUS); + if (!result_) result_ = consumeTokenSmart(builder_, MINUS); + return result_; + } + + // '*' | '/' | '%' + private static boolean mulExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "mulExpr_0")) return false; + boolean result_; + result_ = consumeTokenSmart(builder_, STAR); + if (!result_) result_ = consumeTokenSmart(builder_, SLASH); + if (!result_) result_ = consumeTokenSmart(builder_, PERCENT); + return result_; + } + + public static boolean prefixExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "prefixExpr")) return false; + boolean result_, pinned_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, null); + result_ = prefixOp_(builder_, level_ + 1); + pinned_ = result_; + result_ = pinned_ && expr(builder_, level_, 13); + exit_section_(builder_, level_, marker_, PREFIX_EXPR, result_, pinned_, null); + return result_ || pinned_; + } + + // '[' ['..' | expr] ']' expr + public static boolean arrayTypeExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "arrayTypeExpr")) return false; + if (!nextTokenIsSmart(builder_, LBRACKET)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, LBRACKET); + result_ = result_ && arrayTypeExpr_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACKET); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, ARRAY_TYPE_EXPR, result_); + return result_; + } + + // ['..' | expr] + private static boolean arrayTypeExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "arrayTypeExpr_1")) return false; + arrayTypeExpr_1_0(builder_, level_ + 1); + return true; + } + + // '..' | expr + private static boolean arrayTypeExpr_1_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "arrayTypeExpr_1_0")) return false; + boolean result_; + result_ = consumeTokenSmart(builder_, DOUBLE_DOT); + if (!result_) result_ = expr(builder_, level_ + 1, -1); + return result_; + } + + // 'cast' [',' IDENT] '(' [expr] ')' expr + public static boolean castExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "castExpr")) return false; + if (!nextTokenIsSmart(builder_, KW_CAST)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, KW_CAST); + result_ = result_ && castExpr_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, LPAREN); + result_ = result_ && castExpr_3(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RPAREN); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, CAST_EXPR, result_); + return result_; + } + + // [',' IDENT] + private static boolean castExpr_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "castExpr_1")) return false; + parseTokensSmart(builder_, 0, COMMA, IDENT); + return true; + } + + // [expr] + private static boolean castExpr_3(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "castExpr_3")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + public static boolean autoCastExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "autoCastExpr")) return false; + if (!nextTokenIsSmart(builder_, KW_XX)) return false; + boolean result_, pinned_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, null); + result_ = autoCastExpr_0(builder_, level_ + 1); + pinned_ = result_; + result_ = pinned_ && expr(builder_, level_, 16); + exit_section_(builder_, level_, marker_, AUTO_CAST_EXPR, result_, pinned_, null); + return result_ || pinned_; + } + + // 'xx' [',' IDENT] + private static boolean autoCastExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "autoCastExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, KW_XX); + result_ = result_ && autoCastExpr_0_1(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [',' IDENT] + private static boolean autoCastExpr_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "autoCastExpr_0_1")) return false; + parseTokensSmart(builder_, 0, COMMA, IDENT); + return true; + } + + public static boolean inlineExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "inlineExpr")) return false; + if (!nextTokenIsSmart(builder_, KW_INLINE, KW_NO_INLINE)) return false; + boolean result_, pinned_; + Marker marker_ = enter_section_(builder_, level_, _NONE_, null); + result_ = inlineExpr_0(builder_, level_ + 1); + pinned_ = result_; + result_ = pinned_ && expr(builder_, level_, 17); + exit_section_(builder_, level_, marker_, INLINE_EXPR, result_, pinned_, null); + return result_ || pinned_; + } + + // 'inline' | 'no_inline' + private static boolean inlineExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "inlineExpr_0")) return false; + boolean result_; + result_ = consumeTokenSmart(builder_, KW_INLINE); + if (!result_) result_ = consumeTokenSmart(builder_, KW_NO_INLINE); + return result_; + } + + // 'ifx' expr ['then'] expr ['else' expr] + public static boolean ifxExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifxExpr")) return false; + if (!nextTokenIsSmart(builder_, KW_IFX)) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, KW_IFX); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && ifxExpr_2(builder_, level_ + 1); + result_ = result_ && expr(builder_, level_ + 1, -1); + result_ = result_ && ifxExpr_4(builder_, level_ + 1); + exit_section_(builder_, marker_, IFX_EXPR, result_); + return result_; + } + + // ['then'] + private static boolean ifxExpr_2(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifxExpr_2")) return false; + consumeTokenSmart(builder_, KW_THEN); + return true; + } + + // ['else' expr] + private static boolean ifxExpr_4(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifxExpr_4")) return false; + ifxExpr_4_0(builder_, level_ + 1); + return true; + } + + // 'else' expr + private static boolean ifxExpr_4_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "ifxExpr_4_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, KW_ELSE); + result_ = result_ && expr(builder_, level_ + 1, -1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // '(' [argList] ')' + private static boolean callExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "callExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, LPAREN); + result_ = result_ && callExpr_0_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RPAREN); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [argList] + private static boolean callExpr_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "callExpr_0_1")) return false; + argList(builder_, level_ + 1); + return true; + } + + // '[' [expr] ']' + private static boolean indexExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "indexExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, LBRACKET); + result_ = result_ && indexExpr_0_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACKET); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [expr] + private static boolean indexExpr_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "indexExpr_0_1")) return false; + expr(builder_, level_ + 1, -1); + return true; + } + + // '.' memberName + private static boolean memberExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "memberExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, DOT); + result_ = result_ && memberName(builder_, level_ + 1); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // '.{' [argList] '}' + private static boolean typedStructLiteralExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "typedStructLiteralExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, BEGIN_STRUCT_LITERAL); + result_ = result_ && typedStructLiteralExpr_0_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACE); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [argList] + private static boolean typedStructLiteralExpr_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "typedStructLiteralExpr_0_1")) return false; + argList(builder_, level_ + 1); + return true; + } + + // '.[' [argList] ']' + private static boolean typedArrayLiteralExpr_0(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "typedArrayLiteralExpr_0")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_); + result_ = consumeTokenSmart(builder_, BEGIN_ARRAY_LITERAL); + result_ = result_ && typedArrayLiteralExpr_0_1(builder_, level_ + 1); + result_ = result_ && consumeToken(builder_, RBRACKET); + exit_section_(builder_, marker_, null, result_); + return result_; + } + + // [argList] + private static boolean typedArrayLiteralExpr_0_1(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "typedArrayLiteralExpr_0_1")) return false; + argList(builder_, level_ + 1); + return true; + } + + // procLiteralExpr + // | structExpr + // | enumExpr + // | unionExpr + // | directiveExpr + // | parenExpr + // | structLiteralExpr + // | arrayLiteralExpr + // | unaryDotExpr + // | backtickExpr + // | builtinCallExpr + // | interfaceExpr + // | literalExpr + // | refExpr + // | uninitializedExpr + public static boolean primaryExpr(PsiBuilder builder_, int level_) { + if (!recursion_guard_(builder_, level_, "primaryExpr")) return false; + boolean result_; + Marker marker_ = enter_section_(builder_, level_, _COLLAPSE_, PRIMARY_EXPR, ""); + result_ = procLiteralExpr(builder_, level_ + 1); + if (!result_) result_ = structExpr(builder_, level_ + 1); + if (!result_) result_ = enumExpr(builder_, level_ + 1); + if (!result_) result_ = unionExpr(builder_, level_ + 1); + if (!result_) result_ = directiveExpr(builder_, level_ + 1); + if (!result_) result_ = parenExpr(builder_, level_ + 1); + if (!result_) result_ = structLiteralExpr(builder_, level_ + 1); + if (!result_) result_ = arrayLiteralExpr(builder_, level_ + 1); + if (!result_) result_ = unaryDotExpr(builder_, level_ + 1); + if (!result_) result_ = backtickExpr(builder_, level_ + 1); + if (!result_) result_ = builtinCallExpr(builder_, level_ + 1); + if (!result_) result_ = interfaceExpr(builder_, level_ + 1); + if (!result_) result_ = literalExpr(builder_, level_ + 1); + if (!result_) result_ = refExpr(builder_, level_ + 1); + if (!result_) result_ = uninitializedExpr(builder_, level_ + 1); + exit_section_(builder_, level_, marker_, result_, false, null); + return result_; + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiAddExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiAddExpr.java new file mode 100644 index 0000000..56d4308 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiAddExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiAddExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiAndExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiAndExpr.java new file mode 100644 index 0000000..392dc82 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiAndExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiAndExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiArgument.java b/src/main/gen/dev/hgh/jai/psi/JaiArgument.java new file mode 100644 index 0000000..346b9b2 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiArgument.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiArgument extends PsiElement { + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiArrayLiteralExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiArrayLiteralExpr.java new file mode 100644 index 0000000..ed9d71d --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiArrayLiteralExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiArrayLiteralExpr extends JaiExpr { + + @NotNull + List getArgumentList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiArrayTypeExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiArrayTypeExpr.java new file mode 100644 index 0000000..3444f3a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiArrayTypeExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiArrayTypeExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiAssignExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiAssignExpr.java new file mode 100644 index 0000000..9332d0a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiAssignExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiAssignExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiAutoCastExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiAutoCastExpr.java new file mode 100644 index 0000000..b398f5b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiAutoCastExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiAutoCastExpr extends JaiExpr { + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiBacktickExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiBacktickExpr.java new file mode 100644 index 0000000..27b5bb0 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiBacktickExpr.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiBacktickExpr extends JaiExpr { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiBitAndExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiBitAndExpr.java new file mode 100644 index 0000000..3fb54b1 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiBitAndExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiBitAndExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiBitOrExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiBitOrExpr.java new file mode 100644 index 0000000..669d016 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiBitOrExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiBitOrExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiBitXorExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiBitXorExpr.java new file mode 100644 index 0000000..855e894 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiBitXorExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiBitXorExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiBlock.java b/src/main/gen/dev/hgh/jai/psi/JaiBlock.java new file mode 100644 index 0000000..509c2ad --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiBlock.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiBlock extends PsiElement { + + @NotNull + List getStatementList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiBreakStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiBreakStatement.java new file mode 100644 index 0000000..9de76a8 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiBreakStatement.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiBreakStatement extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiBuiltinCallExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiBuiltinCallExpr.java new file mode 100644 index 0000000..458381a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiBuiltinCallExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiBuiltinCallExpr extends JaiExpr { + + @NotNull + List getArgumentList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiCallExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiCallExpr.java new file mode 100644 index 0000000..e6c9a6f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiCallExpr.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiCallExpr extends JaiExpr { + + @NotNull + List getArgumentList(); + + @NotNull + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiCaseClause.java b/src/main/gen/dev/hgh/jai/psi/JaiCaseClause.java new file mode 100644 index 0000000..7a53966 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiCaseClause.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiCaseClause extends PsiElement { + + @Nullable + JaiExpr getExpr(); + + @NotNull + List getStatementList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiCastExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiCastExpr.java new file mode 100644 index 0000000..c247a4f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiCastExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiCastExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiContinueStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiContinueStatement.java new file mode 100644 index 0000000..72e459b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiContinueStatement.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiContinueStatement extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiDeclNames.java b/src/main/gen/dev/hgh/jai/psi/JaiDeclNames.java new file mode 100644 index 0000000..f57b1b9 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiDeclNames.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiDeclNames extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiDeclaration.java b/src/main/gen/dev/hgh/jai/psi/JaiDeclaration.java new file mode 100644 index 0000000..6433915 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiDeclaration.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiDeclaration extends PsiElement { + + @NotNull + JaiDeclNames getDeclNames(); + + @Nullable + JaiInitializer getInitializer(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiDeferStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiDeferStatement.java new file mode 100644 index 0000000..48fe8bd --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiDeferStatement.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiDeferStatement extends PsiElement { + + @NotNull + JaiStatement getStatement(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiDerefExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiDerefExpr.java new file mode 100644 index 0000000..1739570 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiDerefExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiDerefExpr extends JaiExpr { + + @NotNull + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiDirectiveExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiDirectiveExpr.java new file mode 100644 index 0000000..3256212 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiDirectiveExpr.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiDirectiveExpr extends JaiExpr { + + @Nullable + JaiBlock getBlock(); + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiDirectiveStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiDirectiveStatement.java new file mode 100644 index 0000000..d81a383 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiDirectiveStatement.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiDirectiveStatement extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiElseClause.java b/src/main/gen/dev/hgh/jai/psi/JaiElseClause.java new file mode 100644 index 0000000..70b0038 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiElseClause.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiElseClause extends PsiElement { + + @NotNull + JaiStatement getStatement(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiEnumExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiEnumExpr.java new file mode 100644 index 0000000..1209ae0 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiEnumExpr.java @@ -0,0 +1,19 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiEnumExpr extends JaiExpr { + + @NotNull + JaiBlock getBlock(); + + @Nullable + JaiExpr getExpr(); + + @NotNull + List getProcModifierList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiEqualityExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiEqualityExpr.java new file mode 100644 index 0000000..c67893a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiEqualityExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiEqualityExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiExpr.java new file mode 100644 index 0000000..5ea6662 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiExpr.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiExpr extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiExpressionStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiExpressionStatement.java new file mode 100644 index 0000000..d356fac --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiExpressionStatement.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiExpressionStatement extends PsiElement { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiForNames.java b/src/main/gen/dev/hgh/jai/psi/JaiForNames.java new file mode 100644 index 0000000..65ae503 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiForNames.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiForNames extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiForStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiForStatement.java new file mode 100644 index 0000000..259561d --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiForStatement.java @@ -0,0 +1,19 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiForStatement extends PsiElement { + + @NotNull + List getExprList(); + + @Nullable + JaiForNames getForNames(); + + @NotNull + JaiStatement getStatement(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiIfStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiIfStatement.java new file mode 100644 index 0000000..d0742c0 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiIfStatement.java @@ -0,0 +1,22 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiIfStatement extends PsiElement { + + @Nullable + JaiElseClause getElseClause(); + + @NotNull + JaiExpr getExpr(); + + @Nullable + JaiStatement getStatement(); + + @Nullable + JaiSwitchBody getSwitchBody(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiIfxExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiIfxExpr.java new file mode 100644 index 0000000..4a3f558 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiIfxExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiIfxExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiIndexExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiIndexExpr.java new file mode 100644 index 0000000..82e1557 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiIndexExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiIndexExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiInitializer.java b/src/main/gen/dev/hgh/jai/psi/JaiInitializer.java new file mode 100644 index 0000000..2bcae33 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiInitializer.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiInitializer extends PsiElement { + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiInlineExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiInlineExpr.java new file mode 100644 index 0000000..13475c3 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiInlineExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiInlineExpr extends JaiExpr { + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiInterfaceExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiInterfaceExpr.java new file mode 100644 index 0000000..2773ee0 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiInterfaceExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiInterfaceExpr extends JaiExpr { + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiLambdaExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiLambdaExpr.java new file mode 100644 index 0000000..68943cd --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiLambdaExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiLambdaExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiLiteralExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiLiteralExpr.java new file mode 100644 index 0000000..830622b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiLiteralExpr.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiLiteralExpr extends JaiExpr { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiMemberExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiMemberExpr.java new file mode 100644 index 0000000..a5f0bf1 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiMemberExpr.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiMemberExpr extends JaiExpr { + + @NotNull + JaiExpr getExpr(); + + @NotNull + JaiMemberName getMemberName(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiMemberName.java b/src/main/gen/dev/hgh/jai/psi/JaiMemberName.java new file mode 100644 index 0000000..c116181 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiMemberName.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiMemberName extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiMulExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiMulExpr.java new file mode 100644 index 0000000..4f35d46 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiMulExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiMulExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiNoteStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiNoteStatement.java new file mode 100644 index 0000000..1acba39 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiNoteStatement.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiNoteStatement extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiOperatorDeclaration.java b/src/main/gen/dev/hgh/jai/psi/JaiOperatorDeclaration.java new file mode 100644 index 0000000..7756544 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiOperatorDeclaration.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiOperatorDeclaration extends PsiElement { + + @NotNull + JaiExpr getExpr(); + + @NotNull + JaiOperatorSymbol getOperatorSymbol(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiOperatorSymbol.java b/src/main/gen/dev/hgh/jai/psi/JaiOperatorSymbol.java new file mode 100644 index 0000000..377231e --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiOperatorSymbol.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiOperatorSymbol extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiOrExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiOrExpr.java new file mode 100644 index 0000000..91dcd7a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiOrExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiOrExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiParamName.java b/src/main/gen/dev/hgh/jai/psi/JaiParamName.java new file mode 100644 index 0000000..8e10eb3 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiParamName.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiParamName extends PsiElement { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiParamNames.java b/src/main/gen/dev/hgh/jai/psi/JaiParamNames.java new file mode 100644 index 0000000..a1df60b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiParamNames.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiParamNames extends PsiElement { + + @NotNull + List getParamNameList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiParameter.java b/src/main/gen/dev/hgh/jai/psi/JaiParameter.java new file mode 100644 index 0000000..5c275c1 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiParameter.java @@ -0,0 +1,19 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiParameter extends PsiElement { + + @Nullable + JaiExpr getExpr(); + + @Nullable + JaiInitializer getInitializer(); + + @Nullable + JaiParamNames getParamNames(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiParenExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiParenExpr.java new file mode 100644 index 0000000..4415f4b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiParenExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiParenExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiPrefixExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiPrefixExpr.java new file mode 100644 index 0000000..c9836fb --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiPrefixExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiPrefixExpr extends JaiExpr { + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiPrimaryExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiPrimaryExpr.java new file mode 100644 index 0000000..99d98a2 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiPrimaryExpr.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiPrimaryExpr extends JaiExpr { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiProcLiteralExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiProcLiteralExpr.java new file mode 100644 index 0000000..988543d --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiProcLiteralExpr.java @@ -0,0 +1,25 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiProcLiteralExpr extends JaiExpr { + + @Nullable + JaiBlock getBlock(); + + @NotNull + List getParameterList(); + + @NotNull + List getProcModifierList(); + + @Nullable + JaiReturnGroup getReturnGroup(); + + @NotNull + List getReturnItemList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiProcModifier.java b/src/main/gen/dev/hgh/jai/psi/JaiProcModifier.java new file mode 100644 index 0000000..c7bc44b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiProcModifier.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiProcModifier extends PsiElement { + + @Nullable + JaiBlock getBlock(); + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiPushContextStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiPushContextStatement.java new file mode 100644 index 0000000..5232622 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiPushContextStatement.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiPushContextStatement extends PsiElement { + + @NotNull + JaiBlock getBlock(); + + @NotNull + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiRangeExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiRangeExpr.java new file mode 100644 index 0000000..f266680 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiRangeExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiRangeExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiRefExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiRefExpr.java new file mode 100644 index 0000000..67c95e3 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiRefExpr.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiRefExpr extends JaiExpr { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiRelationalExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiRelationalExpr.java new file mode 100644 index 0000000..0c26198 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiRelationalExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiRelationalExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiRemoveStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiRemoveStatement.java new file mode 100644 index 0000000..6cc963d --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiRemoveStatement.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiRemoveStatement extends PsiElement { + + @Nullable + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiReturnGroup.java b/src/main/gen/dev/hgh/jai/psi/JaiReturnGroup.java new file mode 100644 index 0000000..3abf828 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiReturnGroup.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiReturnGroup extends PsiElement { + + @NotNull + List getReturnItemList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiReturnItem.java b/src/main/gen/dev/hgh/jai/psi/JaiReturnItem.java new file mode 100644 index 0000000..e294673 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiReturnItem.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiReturnItem extends PsiElement { + + @Nullable + JaiInitializer getInitializer(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiReturnStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiReturnStatement.java new file mode 100644 index 0000000..c9102dc --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiReturnStatement.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiReturnStatement extends PsiElement { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiShiftExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiShiftExpr.java new file mode 100644 index 0000000..d11ada9 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiShiftExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiShiftExpr extends JaiExpr { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiStatement.java new file mode 100644 index 0000000..ae0099b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiStatement.java @@ -0,0 +1,58 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiStatement extends PsiElement { + + @Nullable + JaiBlock getBlock(); + + @Nullable + JaiBreakStatement getBreakStatement(); + + @Nullable + JaiContinueStatement getContinueStatement(); + + @Nullable + JaiDeclaration getDeclaration(); + + @Nullable + JaiDeferStatement getDeferStatement(); + + @Nullable + JaiDirectiveStatement getDirectiveStatement(); + + @Nullable + JaiExpressionStatement getExpressionStatement(); + + @Nullable + JaiForStatement getForStatement(); + + @Nullable + JaiIfStatement getIfStatement(); + + @Nullable + JaiNoteStatement getNoteStatement(); + + @Nullable + JaiOperatorDeclaration getOperatorDeclaration(); + + @Nullable + JaiPushContextStatement getPushContextStatement(); + + @Nullable + JaiRemoveStatement getRemoveStatement(); + + @Nullable + JaiReturnStatement getReturnStatement(); + + @Nullable + JaiUsingStatement getUsingStatement(); + + @Nullable + JaiWhileStatement getWhileStatement(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiStructExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiStructExpr.java new file mode 100644 index 0000000..a1f9f69 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiStructExpr.java @@ -0,0 +1,19 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiStructExpr extends JaiExpr { + + @NotNull + JaiBlock getBlock(); + + @NotNull + List getParameterList(); + + @NotNull + List getProcModifierList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiStructLiteralExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiStructLiteralExpr.java new file mode 100644 index 0000000..111862e --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiStructLiteralExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiStructLiteralExpr extends JaiExpr { + + @NotNull + List getArgumentList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiSwitchBody.java b/src/main/gen/dev/hgh/jai/psi/JaiSwitchBody.java new file mode 100644 index 0000000..610b06e --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiSwitchBody.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiSwitchBody extends PsiElement { + + @NotNull + List getCaseClauseList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiTypedArrayLiteralExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiTypedArrayLiteralExpr.java new file mode 100644 index 0000000..9ad3030 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiTypedArrayLiteralExpr.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiTypedArrayLiteralExpr extends JaiExpr { + + @NotNull + List getArgumentList(); + + @NotNull + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiTypedStructLiteralExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiTypedStructLiteralExpr.java new file mode 100644 index 0000000..0ba1639 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiTypedStructLiteralExpr.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiTypedStructLiteralExpr extends JaiExpr { + + @NotNull + List getArgumentList(); + + @NotNull + JaiExpr getExpr(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiTypes.java b/src/main/gen/dev/hgh/jai/psi/JaiTypes.java new file mode 100644 index 0000000..646a37b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiTypes.java @@ -0,0 +1,418 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.PsiElement; +import com.intellij.lang.ASTNode; +import dev.hgh.jai.lexer.JaiTokenTypes; +import dev.hgh.jai.psi.impl.*; + +public interface JaiTypes { + + IElementType ADD_EXPR = new JaiElementType("ADD_EXPR"); + IElementType AND_EXPR = new JaiElementType("AND_EXPR"); + IElementType ARGUMENT = new JaiElementType("ARGUMENT"); + IElementType ARRAY_LITERAL_EXPR = new JaiElementType("ARRAY_LITERAL_EXPR"); + IElementType ARRAY_TYPE_EXPR = new JaiElementType("ARRAY_TYPE_EXPR"); + IElementType ASSIGN_EXPR = new JaiElementType("ASSIGN_EXPR"); + IElementType AUTO_CAST_EXPR = new JaiElementType("AUTO_CAST_EXPR"); + IElementType BACKTICK_EXPR = new JaiElementType("BACKTICK_EXPR"); + IElementType BIT_AND_EXPR = new JaiElementType("BIT_AND_EXPR"); + IElementType BIT_OR_EXPR = new JaiElementType("BIT_OR_EXPR"); + IElementType BIT_XOR_EXPR = new JaiElementType("BIT_XOR_EXPR"); + IElementType BLOCK = new JaiElementType("BLOCK"); + IElementType BREAK_STATEMENT = new JaiElementType("BREAK_STATEMENT"); + IElementType BUILTIN_CALL_EXPR = new JaiElementType("BUILTIN_CALL_EXPR"); + IElementType CALL_EXPR = new JaiElementType("CALL_EXPR"); + IElementType CASE_CLAUSE = new JaiElementType("CASE_CLAUSE"); + IElementType CAST_EXPR = new JaiElementType("CAST_EXPR"); + IElementType CONTINUE_STATEMENT = new JaiElementType("CONTINUE_STATEMENT"); + IElementType DECLARATION = new JaiElementType("DECLARATION"); + IElementType DECL_NAMES = new JaiElementType("DECL_NAMES"); + IElementType DEFER_STATEMENT = new JaiElementType("DEFER_STATEMENT"); + IElementType DEREF_EXPR = new JaiElementType("DEREF_EXPR"); + IElementType DIRECTIVE_EXPR = new JaiElementType("DIRECTIVE_EXPR"); + IElementType DIRECTIVE_STATEMENT = new JaiElementType("DIRECTIVE_STATEMENT"); + IElementType ELSE_CLAUSE = new JaiElementType("ELSE_CLAUSE"); + IElementType ENUM_EXPR = new JaiElementType("ENUM_EXPR"); + IElementType EQUALITY_EXPR = new JaiElementType("EQUALITY_EXPR"); + IElementType EXPR = new JaiElementType("EXPR"); + IElementType EXPRESSION_STATEMENT = new JaiElementType("EXPRESSION_STATEMENT"); + IElementType FOR_NAMES = new JaiElementType("FOR_NAMES"); + IElementType FOR_STATEMENT = new JaiElementType("FOR_STATEMENT"); + IElementType IFX_EXPR = new JaiElementType("IFX_EXPR"); + IElementType IF_STATEMENT = new JaiElementType("IF_STATEMENT"); + IElementType INDEX_EXPR = new JaiElementType("INDEX_EXPR"); + IElementType INITIALIZER = new JaiElementType("INITIALIZER"); + IElementType INLINE_EXPR = new JaiElementType("INLINE_EXPR"); + IElementType INTERFACE_EXPR = new JaiElementType("INTERFACE_EXPR"); + IElementType LAMBDA_EXPR = new JaiElementType("LAMBDA_EXPR"); + IElementType LITERAL_EXPR = new JaiElementType("LITERAL_EXPR"); + IElementType MEMBER_EXPR = new JaiElementType("MEMBER_EXPR"); + IElementType MEMBER_NAME = new JaiElementType("MEMBER_NAME"); + IElementType MUL_EXPR = new JaiElementType("MUL_EXPR"); + IElementType NOTE_STATEMENT = new JaiElementType("NOTE_STATEMENT"); + IElementType OPERATOR_DECLARATION = new JaiElementType("OPERATOR_DECLARATION"); + IElementType OPERATOR_SYMBOL = new JaiElementType("OPERATOR_SYMBOL"); + IElementType OR_EXPR = new JaiElementType("OR_EXPR"); + IElementType PARAMETER = new JaiElementType("PARAMETER"); + IElementType PARAM_NAME = new JaiElementType("PARAM_NAME"); + IElementType PARAM_NAMES = new JaiElementType("PARAM_NAMES"); + IElementType PAREN_EXPR = new JaiElementType("PAREN_EXPR"); + IElementType PREFIX_EXPR = new JaiElementType("PREFIX_EXPR"); + IElementType PRIMARY_EXPR = new JaiElementType("PRIMARY_EXPR"); + IElementType PROC_LITERAL_EXPR = new JaiElementType("PROC_LITERAL_EXPR"); + IElementType PROC_MODIFIER = new JaiElementType("PROC_MODIFIER"); + IElementType PUSH_CONTEXT_STATEMENT = new JaiElementType("PUSH_CONTEXT_STATEMENT"); + IElementType RANGE_EXPR = new JaiElementType("RANGE_EXPR"); + IElementType REF_EXPR = new JaiElementType("REF_EXPR"); + IElementType RELATIONAL_EXPR = new JaiElementType("RELATIONAL_EXPR"); + IElementType REMOVE_STATEMENT = new JaiElementType("REMOVE_STATEMENT"); + IElementType RETURN_GROUP = new JaiElementType("RETURN_GROUP"); + IElementType RETURN_ITEM = new JaiElementType("RETURN_ITEM"); + IElementType RETURN_STATEMENT = new JaiElementType("RETURN_STATEMENT"); + IElementType SHIFT_EXPR = new JaiElementType("SHIFT_EXPR"); + IElementType STATEMENT = new JaiElementType("STATEMENT"); + IElementType STRUCT_EXPR = new JaiElementType("STRUCT_EXPR"); + IElementType STRUCT_LITERAL_EXPR = new JaiElementType("STRUCT_LITERAL_EXPR"); + IElementType SWITCH_BODY = new JaiElementType("SWITCH_BODY"); + IElementType TYPED_ARRAY_LITERAL_EXPR = new JaiElementType("TYPED_ARRAY_LITERAL_EXPR"); + IElementType TYPED_STRUCT_LITERAL_EXPR = new JaiElementType("TYPED_STRUCT_LITERAL_EXPR"); + IElementType UNARY_DOT_EXPR = new JaiElementType("UNARY_DOT_EXPR"); + IElementType UNINITIALIZED_EXPR = new JaiElementType("UNINITIALIZED_EXPR"); + IElementType UNION_EXPR = new JaiElementType("UNION_EXPR"); + IElementType USING_STATEMENT = new JaiElementType("USING_STATEMENT"); + IElementType WHILE_STATEMENT = new JaiElementType("WHILE_STATEMENT"); + + IElementType AND = JaiTokenTypes.byName("&"); + IElementType AND_AND = JaiTokenTypes.byName("&&"); + IElementType AND_AND_EQ = JaiTokenTypes.byName("&&="); + IElementType AND_EQ = JaiTokenTypes.byName("&="); + IElementType AT = JaiTokenTypes.byName("@"); + IElementType BACKSLASH = JaiTokenTypes.byName("\\"); + IElementType BACKTICK = JaiTokenTypes.byName("`"); + IElementType BEGIN_ARRAY_LITERAL = JaiTokenTypes.byName(".["); + IElementType BEGIN_STRUCT_LITERAL = JaiTokenTypes.byName(".{"); + IElementType BLOCK_COMMENT = JaiTokenTypes.byName("BLOCK_COMMENT"); + IElementType COLON = JaiTokenTypes.byName(":"); + IElementType COLON_COLON = JaiTokenTypes.byName("::"); + IElementType COLON_EQ = JaiTokenTypes.byName(":="); + IElementType COMMA = JaiTokenTypes.byName(","); + IElementType DIRECTIVE = JaiTokenTypes.byName("DIRECTIVE"); + IElementType DOLLAR = JaiTokenTypes.byName("$"); + IElementType DOT = JaiTokenTypes.byName("."); + IElementType DOUBLE_COMMA = JaiTokenTypes.byName(",,"); + IElementType DOUBLE_DOLLAR = JaiTokenTypes.byName("$$"); + IElementType DOUBLE_DOT = JaiTokenTypes.byName(".."); + IElementType DOUBLE_MINUS = JaiTokenTypes.byName("--"); + IElementType EQ = JaiTokenTypes.byName("="); + IElementType EQ_EQ = JaiTokenTypes.byName("=="); + IElementType EQ_EQ_EQ = JaiTokenTypes.byName("==="); + IElementType GT = JaiTokenTypes.byName(">"); + IElementType GT_EQ = JaiTokenTypes.byName(">="); + IElementType HASH = JaiTokenTypes.byName("#"); + IElementType HERE_STRING = JaiTokenTypes.byName("HERE_STRING"); + IElementType IDENT = JaiTokenTypes.byName("IDENT"); + IElementType KW_BREAK = JaiTokenTypes.byName("break"); + IElementType KW_CASE = JaiTokenTypes.byName("case"); + IElementType KW_CAST = JaiTokenTypes.byName("cast"); + IElementType KW_CODE_OF = JaiTokenTypes.byName("code_of"); + IElementType KW_CONTEXT = JaiTokenTypes.byName("context"); + IElementType KW_CONTINUE = JaiTokenTypes.byName("continue"); + IElementType KW_DEFER = JaiTokenTypes.byName("defer"); + IElementType KW_ELSE = JaiTokenTypes.byName("else"); + IElementType KW_ENUM = JaiTokenTypes.byName("enum"); + IElementType KW_ENUM_FLAGS = JaiTokenTypes.byName("enum_flags"); + IElementType KW_FALSE = JaiTokenTypes.byName("false"); + IElementType KW_FOR = JaiTokenTypes.byName("for"); + IElementType KW_IF = JaiTokenTypes.byName("if"); + IElementType KW_IFX = JaiTokenTypes.byName("ifx"); + IElementType KW_INITIALIZER_OF = JaiTokenTypes.byName("initializer_of"); + IElementType KW_INLINE = JaiTokenTypes.byName("inline"); + IElementType KW_INTERFACE = JaiTokenTypes.byName("interface"); + IElementType KW_IS_CONSTANT = JaiTokenTypes.byName("is_constant"); + IElementType KW_NO_INLINE = JaiTokenTypes.byName("no_inline"); + IElementType KW_NULL = JaiTokenTypes.byName("null"); + IElementType KW_OPERATOR = JaiTokenTypes.byName("operator"); + IElementType KW_PUSH_CONTEXT = JaiTokenTypes.byName("push_context"); + IElementType KW_REMOVE = JaiTokenTypes.byName("remove"); + IElementType KW_RETURN = JaiTokenTypes.byName("return"); + IElementType KW_SIZE_OF = JaiTokenTypes.byName("size_of"); + IElementType KW_STRUCT = JaiTokenTypes.byName("struct"); + IElementType KW_THEN = JaiTokenTypes.byName("then"); + IElementType KW_TRUE = JaiTokenTypes.byName("true"); + IElementType KW_TYPE_INFO = JaiTokenTypes.byName("type_info"); + IElementType KW_TYPE_OF = JaiTokenTypes.byName("type_of"); + IElementType KW_UNION = JaiTokenTypes.byName("union"); + IElementType KW_USING = JaiTokenTypes.byName("using"); + IElementType KW_WHILE = JaiTokenTypes.byName("while"); + IElementType KW_XX = JaiTokenTypes.byName("xx"); + IElementType LBRACE = JaiTokenTypes.byName("{"); + IElementType LBRACKET = JaiTokenTypes.byName("["); + IElementType LINE_COMMENT = JaiTokenTypes.byName("LINE_COMMENT"); + IElementType LPAREN = JaiTokenTypes.byName("("); + IElementType LT = JaiTokenTypes.byName("<"); + IElementType LT_EQ = JaiTokenTypes.byName("<="); + IElementType MINUS = JaiTokenTypes.byName("-"); + IElementType MINUS_EQ = JaiTokenTypes.byName("-="); + IElementType NOT = JaiTokenTypes.byName("!"); + IElementType NOTE = JaiTokenTypes.byName("NOTE"); + IElementType NOT_EQ = JaiTokenTypes.byName("!="); + IElementType NUMBER = JaiTokenTypes.byName("NUMBER"); + IElementType OR = JaiTokenTypes.byName("|"); + IElementType OR_EQ = JaiTokenTypes.byName("|="); + IElementType OR_OR = JaiTokenTypes.byName("||"); + IElementType OR_OR_EQ = JaiTokenTypes.byName("||="); + IElementType PERCENT = JaiTokenTypes.byName("%"); + IElementType PERCENT_EQ = JaiTokenTypes.byName("%="); + IElementType PLUS = JaiTokenTypes.byName("+"); + IElementType PLUS_EQ = JaiTokenTypes.byName("+="); + IElementType POSTFIX_DEREFERENCE = JaiTokenTypes.byName(".*"); + IElementType QUESTION = JaiTokenTypes.byName("?"); + IElementType QUICK_LAMBDA = JaiTokenTypes.byName("=>"); + IElementType RBRACE = JaiTokenTypes.byName("}"); + IElementType RBRACKET = JaiTokenTypes.byName("]"); + IElementType RIGHT_ARROW = JaiTokenTypes.byName("->"); + IElementType ROL = JaiTokenTypes.byName("<<<"); + IElementType ROL_EQ = JaiTokenTypes.byName("<<<="); + IElementType ROR = JaiTokenTypes.byName(">>>"); + IElementType ROR_EQ = JaiTokenTypes.byName(">>>="); + IElementType RPAREN = JaiTokenTypes.byName(")"); + IElementType SEMICOLON = JaiTokenTypes.byName(";"); + IElementType SHL = JaiTokenTypes.byName("<<"); + IElementType SHL_EQ = JaiTokenTypes.byName("<<="); + IElementType SHR = JaiTokenTypes.byName(">>"); + IElementType SHR_EQ = JaiTokenTypes.byName(">>="); + IElementType SLASH = JaiTokenTypes.byName("/"); + IElementType SLASH_EQ = JaiTokenTypes.byName("/="); + IElementType STAR = JaiTokenTypes.byName("*"); + IElementType STAR_EQ = JaiTokenTypes.byName("*="); + IElementType STRING = JaiTokenTypes.byName("STRING"); + IElementType TILDE = JaiTokenTypes.byName("~"); + IElementType TRIPLE_MINUS = JaiTokenTypes.byName("---"); + IElementType XOR = JaiTokenTypes.byName("^"); + IElementType XOR_EQ = JaiTokenTypes.byName("^="); + + class Factory { + public static PsiElement createElement(ASTNode node) { + IElementType type = node.getElementType(); + if (type == ADD_EXPR) { + return new JaiAddExprImpl(node); + } + else if (type == AND_EXPR) { + return new JaiAndExprImpl(node); + } + else if (type == ARGUMENT) { + return new JaiArgumentImpl(node); + } + else if (type == ARRAY_LITERAL_EXPR) { + return new JaiArrayLiteralExprImpl(node); + } + else if (type == ARRAY_TYPE_EXPR) { + return new JaiArrayTypeExprImpl(node); + } + else if (type == ASSIGN_EXPR) { + return new JaiAssignExprImpl(node); + } + else if (type == AUTO_CAST_EXPR) { + return new JaiAutoCastExprImpl(node); + } + else if (type == BACKTICK_EXPR) { + return new JaiBacktickExprImpl(node); + } + else if (type == BIT_AND_EXPR) { + return new JaiBitAndExprImpl(node); + } + else if (type == BIT_OR_EXPR) { + return new JaiBitOrExprImpl(node); + } + else if (type == BIT_XOR_EXPR) { + return new JaiBitXorExprImpl(node); + } + else if (type == BLOCK) { + return new JaiBlockImpl(node); + } + else if (type == BREAK_STATEMENT) { + return new JaiBreakStatementImpl(node); + } + else if (type == BUILTIN_CALL_EXPR) { + return new JaiBuiltinCallExprImpl(node); + } + else if (type == CALL_EXPR) { + return new JaiCallExprImpl(node); + } + else if (type == CASE_CLAUSE) { + return new JaiCaseClauseImpl(node); + } + else if (type == CAST_EXPR) { + return new JaiCastExprImpl(node); + } + else if (type == CONTINUE_STATEMENT) { + return new JaiContinueStatementImpl(node); + } + else if (type == DECLARATION) { + return new JaiDeclarationImpl(node); + } + else if (type == DECL_NAMES) { + return new JaiDeclNamesImpl(node); + } + else if (type == DEFER_STATEMENT) { + return new JaiDeferStatementImpl(node); + } + else if (type == DEREF_EXPR) { + return new JaiDerefExprImpl(node); + } + else if (type == DIRECTIVE_EXPR) { + return new JaiDirectiveExprImpl(node); + } + else if (type == DIRECTIVE_STATEMENT) { + return new JaiDirectiveStatementImpl(node); + } + else if (type == ELSE_CLAUSE) { + return new JaiElseClauseImpl(node); + } + else if (type == ENUM_EXPR) { + return new JaiEnumExprImpl(node); + } + else if (type == EQUALITY_EXPR) { + return new JaiEqualityExprImpl(node); + } + else if (type == EXPRESSION_STATEMENT) { + return new JaiExpressionStatementImpl(node); + } + else if (type == FOR_NAMES) { + return new JaiForNamesImpl(node); + } + else if (type == FOR_STATEMENT) { + return new JaiForStatementImpl(node); + } + else if (type == IFX_EXPR) { + return new JaiIfxExprImpl(node); + } + else if (type == IF_STATEMENT) { + return new JaiIfStatementImpl(node); + } + else if (type == INDEX_EXPR) { + return new JaiIndexExprImpl(node); + } + else if (type == INITIALIZER) { + return new JaiInitializerImpl(node); + } + else if (type == INLINE_EXPR) { + return new JaiInlineExprImpl(node); + } + else if (type == INTERFACE_EXPR) { + return new JaiInterfaceExprImpl(node); + } + else if (type == LAMBDA_EXPR) { + return new JaiLambdaExprImpl(node); + } + else if (type == LITERAL_EXPR) { + return new JaiLiteralExprImpl(node); + } + else if (type == MEMBER_EXPR) { + return new JaiMemberExprImpl(node); + } + else if (type == MEMBER_NAME) { + return new JaiMemberNameImpl(node); + } + else if (type == MUL_EXPR) { + return new JaiMulExprImpl(node); + } + else if (type == NOTE_STATEMENT) { + return new JaiNoteStatementImpl(node); + } + else if (type == OPERATOR_DECLARATION) { + return new JaiOperatorDeclarationImpl(node); + } + else if (type == OPERATOR_SYMBOL) { + return new JaiOperatorSymbolImpl(node); + } + else if (type == OR_EXPR) { + return new JaiOrExprImpl(node); + } + else if (type == PARAMETER) { + return new JaiParameterImpl(node); + } + else if (type == PARAM_NAME) { + return new JaiParamNameImpl(node); + } + else if (type == PARAM_NAMES) { + return new JaiParamNamesImpl(node); + } + else if (type == PAREN_EXPR) { + return new JaiParenExprImpl(node); + } + else if (type == PREFIX_EXPR) { + return new JaiPrefixExprImpl(node); + } + else if (type == PROC_LITERAL_EXPR) { + return new JaiProcLiteralExprImpl(node); + } + else if (type == PROC_MODIFIER) { + return new JaiProcModifierImpl(node); + } + else if (type == PUSH_CONTEXT_STATEMENT) { + return new JaiPushContextStatementImpl(node); + } + else if (type == RANGE_EXPR) { + return new JaiRangeExprImpl(node); + } + else if (type == REF_EXPR) { + return new JaiRefExprImpl(node); + } + else if (type == RELATIONAL_EXPR) { + return new JaiRelationalExprImpl(node); + } + else if (type == REMOVE_STATEMENT) { + return new JaiRemoveStatementImpl(node); + } + else if (type == RETURN_GROUP) { + return new JaiReturnGroupImpl(node); + } + else if (type == RETURN_ITEM) { + return new JaiReturnItemImpl(node); + } + else if (type == RETURN_STATEMENT) { + return new JaiReturnStatementImpl(node); + } + else if (type == SHIFT_EXPR) { + return new JaiShiftExprImpl(node); + } + else if (type == STATEMENT) { + return new JaiStatementImpl(node); + } + else if (type == STRUCT_EXPR) { + return new JaiStructExprImpl(node); + } + else if (type == STRUCT_LITERAL_EXPR) { + return new JaiStructLiteralExprImpl(node); + } + else if (type == SWITCH_BODY) { + return new JaiSwitchBodyImpl(node); + } + else if (type == TYPED_ARRAY_LITERAL_EXPR) { + return new JaiTypedArrayLiteralExprImpl(node); + } + else if (type == TYPED_STRUCT_LITERAL_EXPR) { + return new JaiTypedStructLiteralExprImpl(node); + } + else if (type == UNARY_DOT_EXPR) { + return new JaiUnaryDotExprImpl(node); + } + else if (type == UNINITIALIZED_EXPR) { + return new JaiUninitializedExprImpl(node); + } + else if (type == UNION_EXPR) { + return new JaiUnionExprImpl(node); + } + else if (type == USING_STATEMENT) { + return new JaiUsingStatementImpl(node); + } + else if (type == WHILE_STATEMENT) { + return new JaiWhileStatementImpl(node); + } + throw new AssertionError("Unknown element type: " + type); + } + } +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiUnaryDotExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiUnaryDotExpr.java new file mode 100644 index 0000000..d24f1b6 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiUnaryDotExpr.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiUnaryDotExpr extends JaiExpr { + + @NotNull + JaiMemberName getMemberName(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiUninitializedExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiUninitializedExpr.java new file mode 100644 index 0000000..7f51a90 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiUninitializedExpr.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiUninitializedExpr extends JaiExpr { + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiUnionExpr.java b/src/main/gen/dev/hgh/jai/psi/JaiUnionExpr.java new file mode 100644 index 0000000..42ebb2c --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiUnionExpr.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiUnionExpr extends JaiExpr { + + @NotNull + JaiBlock getBlock(); + + @NotNull + List getProcModifierList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiUsingStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiUsingStatement.java new file mode 100644 index 0000000..f692a15 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiUsingStatement.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiUsingStatement extends PsiElement { + + @NotNull + List getExprList(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiVisitor.java b/src/main/gen/dev/hgh/jai/psi/JaiVisitor.java new file mode 100644 index 0000000..a0cacac --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiVisitor.java @@ -0,0 +1,310 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.PsiElement; + +public class JaiVisitor extends PsiElementVisitor { + + public void visitAddExpr(@NotNull JaiAddExpr o) { + visitExpr(o); + } + + public void visitAndExpr(@NotNull JaiAndExpr o) { + visitExpr(o); + } + + public void visitArgument(@NotNull JaiArgument o) { + visitPsiElement(o); + } + + public void visitArrayLiteralExpr(@NotNull JaiArrayLiteralExpr o) { + visitExpr(o); + } + + public void visitArrayTypeExpr(@NotNull JaiArrayTypeExpr o) { + visitExpr(o); + } + + public void visitAssignExpr(@NotNull JaiAssignExpr o) { + visitExpr(o); + } + + public void visitAutoCastExpr(@NotNull JaiAutoCastExpr o) { + visitExpr(o); + } + + public void visitBacktickExpr(@NotNull JaiBacktickExpr o) { + visitExpr(o); + } + + public void visitBitAndExpr(@NotNull JaiBitAndExpr o) { + visitExpr(o); + } + + public void visitBitOrExpr(@NotNull JaiBitOrExpr o) { + visitExpr(o); + } + + public void visitBitXorExpr(@NotNull JaiBitXorExpr o) { + visitExpr(o); + } + + public void visitBlock(@NotNull JaiBlock o) { + visitPsiElement(o); + } + + public void visitBreakStatement(@NotNull JaiBreakStatement o) { + visitPsiElement(o); + } + + public void visitBuiltinCallExpr(@NotNull JaiBuiltinCallExpr o) { + visitExpr(o); + } + + public void visitCallExpr(@NotNull JaiCallExpr o) { + visitExpr(o); + } + + public void visitCaseClause(@NotNull JaiCaseClause o) { + visitPsiElement(o); + } + + public void visitCastExpr(@NotNull JaiCastExpr o) { + visitExpr(o); + } + + public void visitContinueStatement(@NotNull JaiContinueStatement o) { + visitPsiElement(o); + } + + public void visitDeclNames(@NotNull JaiDeclNames o) { + visitPsiElement(o); + } + + public void visitDeclaration(@NotNull JaiDeclaration o) { + visitPsiElement(o); + } + + public void visitDeferStatement(@NotNull JaiDeferStatement o) { + visitPsiElement(o); + } + + public void visitDerefExpr(@NotNull JaiDerefExpr o) { + visitExpr(o); + } + + public void visitDirectiveExpr(@NotNull JaiDirectiveExpr o) { + visitExpr(o); + } + + public void visitDirectiveStatement(@NotNull JaiDirectiveStatement o) { + visitPsiElement(o); + } + + public void visitElseClause(@NotNull JaiElseClause o) { + visitPsiElement(o); + } + + public void visitEnumExpr(@NotNull JaiEnumExpr o) { + visitExpr(o); + } + + public void visitEqualityExpr(@NotNull JaiEqualityExpr o) { + visitExpr(o); + } + + public void visitExpr(@NotNull JaiExpr o) { + visitPsiElement(o); + } + + public void visitExpressionStatement(@NotNull JaiExpressionStatement o) { + visitPsiElement(o); + } + + public void visitForNames(@NotNull JaiForNames o) { + visitPsiElement(o); + } + + public void visitForStatement(@NotNull JaiForStatement o) { + visitPsiElement(o); + } + + public void visitIfStatement(@NotNull JaiIfStatement o) { + visitPsiElement(o); + } + + public void visitIfxExpr(@NotNull JaiIfxExpr o) { + visitExpr(o); + } + + public void visitIndexExpr(@NotNull JaiIndexExpr o) { + visitExpr(o); + } + + public void visitInitializer(@NotNull JaiInitializer o) { + visitPsiElement(o); + } + + public void visitInlineExpr(@NotNull JaiInlineExpr o) { + visitExpr(o); + } + + public void visitInterfaceExpr(@NotNull JaiInterfaceExpr o) { + visitExpr(o); + } + + public void visitLambdaExpr(@NotNull JaiLambdaExpr o) { + visitExpr(o); + } + + public void visitLiteralExpr(@NotNull JaiLiteralExpr o) { + visitExpr(o); + } + + public void visitMemberExpr(@NotNull JaiMemberExpr o) { + visitExpr(o); + } + + public void visitMemberName(@NotNull JaiMemberName o) { + visitPsiElement(o); + } + + public void visitMulExpr(@NotNull JaiMulExpr o) { + visitExpr(o); + } + + public void visitNoteStatement(@NotNull JaiNoteStatement o) { + visitPsiElement(o); + } + + public void visitOperatorDeclaration(@NotNull JaiOperatorDeclaration o) { + visitPsiElement(o); + } + + public void visitOperatorSymbol(@NotNull JaiOperatorSymbol o) { + visitPsiElement(o); + } + + public void visitOrExpr(@NotNull JaiOrExpr o) { + visitExpr(o); + } + + public void visitParamName(@NotNull JaiParamName o) { + visitPsiElement(o); + } + + public void visitParamNames(@NotNull JaiParamNames o) { + visitPsiElement(o); + } + + public void visitParameter(@NotNull JaiParameter o) { + visitPsiElement(o); + } + + public void visitParenExpr(@NotNull JaiParenExpr o) { + visitExpr(o); + } + + public void visitPrefixExpr(@NotNull JaiPrefixExpr o) { + visitExpr(o); + } + + public void visitPrimaryExpr(@NotNull JaiPrimaryExpr o) { + visitExpr(o); + } + + public void visitProcLiteralExpr(@NotNull JaiProcLiteralExpr o) { + visitExpr(o); + } + + public void visitProcModifier(@NotNull JaiProcModifier o) { + visitPsiElement(o); + } + + public void visitPushContextStatement(@NotNull JaiPushContextStatement o) { + visitPsiElement(o); + } + + public void visitRangeExpr(@NotNull JaiRangeExpr o) { + visitExpr(o); + } + + public void visitRefExpr(@NotNull JaiRefExpr o) { + visitExpr(o); + } + + public void visitRelationalExpr(@NotNull JaiRelationalExpr o) { + visitExpr(o); + } + + public void visitRemoveStatement(@NotNull JaiRemoveStatement o) { + visitPsiElement(o); + } + + public void visitReturnGroup(@NotNull JaiReturnGroup o) { + visitPsiElement(o); + } + + public void visitReturnItem(@NotNull JaiReturnItem o) { + visitPsiElement(o); + } + + public void visitReturnStatement(@NotNull JaiReturnStatement o) { + visitPsiElement(o); + } + + public void visitShiftExpr(@NotNull JaiShiftExpr o) { + visitExpr(o); + } + + public void visitStatement(@NotNull JaiStatement o) { + visitPsiElement(o); + } + + public void visitStructExpr(@NotNull JaiStructExpr o) { + visitExpr(o); + } + + public void visitStructLiteralExpr(@NotNull JaiStructLiteralExpr o) { + visitExpr(o); + } + + public void visitSwitchBody(@NotNull JaiSwitchBody o) { + visitPsiElement(o); + } + + public void visitTypedArrayLiteralExpr(@NotNull JaiTypedArrayLiteralExpr o) { + visitExpr(o); + } + + public void visitTypedStructLiteralExpr(@NotNull JaiTypedStructLiteralExpr o) { + visitExpr(o); + } + + public void visitUnaryDotExpr(@NotNull JaiUnaryDotExpr o) { + visitExpr(o); + } + + public void visitUninitializedExpr(@NotNull JaiUninitializedExpr o) { + visitExpr(o); + } + + public void visitUnionExpr(@NotNull JaiUnionExpr o) { + visitExpr(o); + } + + public void visitUsingStatement(@NotNull JaiUsingStatement o) { + visitPsiElement(o); + } + + public void visitWhileStatement(@NotNull JaiWhileStatement o) { + visitPsiElement(o); + } + + public void visitPsiElement(@NotNull PsiElement o) { + visitElement(o); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/JaiWhileStatement.java b/src/main/gen/dev/hgh/jai/psi/JaiWhileStatement.java new file mode 100644 index 0000000..effd5ba --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/JaiWhileStatement.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface JaiWhileStatement extends PsiElement { + + @NotNull + JaiExpr getExpr(); + + @NotNull + JaiStatement getStatement(); + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiAddExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiAddExprImpl.java new file mode 100644 index 0000000..4c85c57 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiAddExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiAddExprImpl extends JaiExprImpl implements JaiAddExpr { + + public JaiAddExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitAddExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiAndExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiAndExprImpl.java new file mode 100644 index 0000000..310a3ae --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiAndExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiAndExprImpl extends JaiExprImpl implements JaiAndExpr { + + public JaiAndExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitAndExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiArgumentImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiArgumentImpl.java new file mode 100644 index 0000000..34e7a4c --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiArgumentImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiArgumentImpl extends ASTWrapperPsiElement implements JaiArgument { + + public JaiArgumentImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitArgument(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiArrayLiteralExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiArrayLiteralExprImpl.java new file mode 100644 index 0000000..dcb9ff8 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiArrayLiteralExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiArrayLiteralExprImpl extends JaiExprImpl implements JaiArrayLiteralExpr { + + public JaiArrayLiteralExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitArrayLiteralExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getArgumentList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiArgument.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiArrayTypeExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiArrayTypeExprImpl.java new file mode 100644 index 0000000..c05903f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiArrayTypeExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiArrayTypeExprImpl extends JaiExprImpl implements JaiArrayTypeExpr { + + public JaiArrayTypeExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitArrayTypeExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiAssignExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiAssignExprImpl.java new file mode 100644 index 0000000..ac7de39 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiAssignExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiAssignExprImpl extends JaiExprImpl implements JaiAssignExpr { + + public JaiAssignExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitAssignExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiAutoCastExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiAutoCastExprImpl.java new file mode 100644 index 0000000..2f6837f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiAutoCastExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiAutoCastExprImpl extends JaiExprImpl implements JaiAutoCastExpr { + + public JaiAutoCastExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitAutoCastExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiBacktickExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiBacktickExprImpl.java new file mode 100644 index 0000000..7878002 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiBacktickExprImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiBacktickExprImpl extends JaiExprImpl implements JaiBacktickExpr { + + public JaiBacktickExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitBacktickExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiBitAndExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiBitAndExprImpl.java new file mode 100644 index 0000000..c698aee --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiBitAndExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiBitAndExprImpl extends JaiExprImpl implements JaiBitAndExpr { + + public JaiBitAndExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitBitAndExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiBitOrExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiBitOrExprImpl.java new file mode 100644 index 0000000..a96e409 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiBitOrExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiBitOrExprImpl extends JaiExprImpl implements JaiBitOrExpr { + + public JaiBitOrExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitBitOrExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiBitXorExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiBitXorExprImpl.java new file mode 100644 index 0000000..130fbfc --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiBitXorExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiBitXorExprImpl extends JaiExprImpl implements JaiBitXorExpr { + + public JaiBitXorExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitBitXorExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiBlockImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiBlockImpl.java new file mode 100644 index 0000000..6225c4d --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiBlockImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiBlockImpl extends ASTWrapperPsiElement implements JaiBlock { + + public JaiBlockImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitBlock(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getStatementList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiStatement.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiBreakStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiBreakStatementImpl.java new file mode 100644 index 0000000..7d2fd9f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiBreakStatementImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiBreakStatementImpl extends ASTWrapperPsiElement implements JaiBreakStatement { + + public JaiBreakStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitBreakStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiBuiltinCallExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiBuiltinCallExprImpl.java new file mode 100644 index 0000000..307e408 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiBuiltinCallExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiBuiltinCallExprImpl extends JaiExprImpl implements JaiBuiltinCallExpr { + + public JaiBuiltinCallExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitBuiltinCallExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getArgumentList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiArgument.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiCallExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiCallExprImpl.java new file mode 100644 index 0000000..ce1638d --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiCallExprImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiCallExprImpl extends JaiExprImpl implements JaiCallExpr { + + public JaiCallExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitCallExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getArgumentList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiArgument.class); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiCaseClauseImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiCaseClauseImpl.java new file mode 100644 index 0000000..d26d3ab --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiCaseClauseImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiCaseClauseImpl extends ASTWrapperPsiElement implements JaiCaseClause { + + public JaiCaseClauseImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitCaseClause(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + + @Override + @NotNull + public List getStatementList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiStatement.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiCastExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiCastExprImpl.java new file mode 100644 index 0000000..b3dcd19 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiCastExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiCastExprImpl extends JaiExprImpl implements JaiCastExpr { + + public JaiCastExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitCastExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiContinueStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiContinueStatementImpl.java new file mode 100644 index 0000000..b07d077 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiContinueStatementImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiContinueStatementImpl extends ASTWrapperPsiElement implements JaiContinueStatement { + + public JaiContinueStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitContinueStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiDeclNamesImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiDeclNamesImpl.java new file mode 100644 index 0000000..c7f3e55 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiDeclNamesImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiDeclNamesImpl extends ASTWrapperPsiElement implements JaiDeclNames { + + public JaiDeclNamesImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitDeclNames(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiDeclarationImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiDeclarationImpl.java new file mode 100644 index 0000000..8a78643 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiDeclarationImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiDeclarationImpl extends ASTWrapperPsiElement implements JaiDeclaration { + + public JaiDeclarationImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitDeclaration(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiDeclNames getDeclNames() { + return findNotNullChildByClass(JaiDeclNames.class); + } + + @Override + @Nullable + public JaiInitializer getInitializer() { + return findChildByClass(JaiInitializer.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiDeferStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiDeferStatementImpl.java new file mode 100644 index 0000000..351092b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiDeferStatementImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiDeferStatementImpl extends ASTWrapperPsiElement implements JaiDeferStatement { + + public JaiDeferStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitDeferStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiStatement getStatement() { + return findNotNullChildByClass(JaiStatement.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiDerefExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiDerefExprImpl.java new file mode 100644 index 0000000..160d252 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiDerefExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiDerefExprImpl extends JaiExprImpl implements JaiDerefExpr { + + public JaiDerefExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitDerefExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiDirectiveExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiDirectiveExprImpl.java new file mode 100644 index 0000000..472c087 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiDirectiveExprImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiDirectiveExprImpl extends JaiExprImpl implements JaiDirectiveExpr { + + public JaiDirectiveExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitDirectiveExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiBlock getBlock() { + return findChildByClass(JaiBlock.class); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiDirectiveStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiDirectiveStatementImpl.java new file mode 100644 index 0000000..e90123f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiDirectiveStatementImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiDirectiveStatementImpl extends ASTWrapperPsiElement implements JaiDirectiveStatement { + + public JaiDirectiveStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitDirectiveStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiElseClauseImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiElseClauseImpl.java new file mode 100644 index 0000000..cb52f03 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiElseClauseImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiElseClauseImpl extends ASTWrapperPsiElement implements JaiElseClause { + + public JaiElseClauseImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitElseClause(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiStatement getStatement() { + return findNotNullChildByClass(JaiStatement.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiEnumExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiEnumExprImpl.java new file mode 100644 index 0000000..16d5b07 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiEnumExprImpl.java @@ -0,0 +1,48 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiEnumExprImpl extends JaiExprImpl implements JaiEnumExpr { + + public JaiEnumExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitEnumExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiBlock getBlock() { + return findNotNullChildByClass(JaiBlock.class); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + + @Override + @NotNull + public List getProcModifierList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiProcModifier.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiEqualityExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiEqualityExprImpl.java new file mode 100644 index 0000000..f9f39c9 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiEqualityExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiEqualityExprImpl extends JaiExprImpl implements JaiEqualityExpr { + + public JaiEqualityExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitEqualityExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiExprImpl.java new file mode 100644 index 0000000..595e80a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiExprImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public abstract class JaiExprImpl extends ASTWrapperPsiElement implements JaiExpr { + + public JaiExprImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiExpressionStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiExpressionStatementImpl.java new file mode 100644 index 0000000..f1c7ac4 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiExpressionStatementImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiExpressionStatementImpl extends ASTWrapperPsiElement implements JaiExpressionStatement { + + public JaiExpressionStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitExpressionStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiForNamesImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiForNamesImpl.java new file mode 100644 index 0000000..8464f19 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiForNamesImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiForNamesImpl extends ASTWrapperPsiElement implements JaiForNames { + + public JaiForNamesImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitForNames(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiForStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiForStatementImpl.java new file mode 100644 index 0000000..b34fc19 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiForStatementImpl.java @@ -0,0 +1,48 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiForStatementImpl extends ASTWrapperPsiElement implements JaiForStatement { + + public JaiForStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitForStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + + @Override + @Nullable + public JaiForNames getForNames() { + return findChildByClass(JaiForNames.class); + } + + @Override + @NotNull + public JaiStatement getStatement() { + return findNotNullChildByClass(JaiStatement.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiIfStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiIfStatementImpl.java new file mode 100644 index 0000000..b7a90a1 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiIfStatementImpl.java @@ -0,0 +1,54 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiIfStatementImpl extends ASTWrapperPsiElement implements JaiIfStatement { + + public JaiIfStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitIfStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiElseClause getElseClause() { + return findChildByClass(JaiElseClause.class); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + + @Override + @Nullable + public JaiStatement getStatement() { + return findChildByClass(JaiStatement.class); + } + + @Override + @Nullable + public JaiSwitchBody getSwitchBody() { + return findChildByClass(JaiSwitchBody.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiIfxExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiIfxExprImpl.java new file mode 100644 index 0000000..ac84059 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiIfxExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiIfxExprImpl extends JaiExprImpl implements JaiIfxExpr { + + public JaiIfxExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitIfxExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiIndexExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiIndexExprImpl.java new file mode 100644 index 0000000..57ba3ef --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiIndexExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiIndexExprImpl extends JaiExprImpl implements JaiIndexExpr { + + public JaiIndexExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitIndexExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiInitializerImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiInitializerImpl.java new file mode 100644 index 0000000..95c57bf --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiInitializerImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiInitializerImpl extends ASTWrapperPsiElement implements JaiInitializer { + + public JaiInitializerImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitInitializer(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiInlineExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiInlineExprImpl.java new file mode 100644 index 0000000..905033e --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiInlineExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiInlineExprImpl extends JaiExprImpl implements JaiInlineExpr { + + public JaiInlineExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitInlineExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiInterfaceExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiInterfaceExprImpl.java new file mode 100644 index 0000000..40b1c92 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiInterfaceExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiInterfaceExprImpl extends JaiExprImpl implements JaiInterfaceExpr { + + public JaiInterfaceExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitInterfaceExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiLambdaExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiLambdaExprImpl.java new file mode 100644 index 0000000..8cffe20 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiLambdaExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiLambdaExprImpl extends JaiExprImpl implements JaiLambdaExpr { + + public JaiLambdaExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitLambdaExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiLiteralExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiLiteralExprImpl.java new file mode 100644 index 0000000..8079bea --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiLiteralExprImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiLiteralExprImpl extends JaiExprImpl implements JaiLiteralExpr { + + public JaiLiteralExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitLiteralExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiMemberExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiMemberExprImpl.java new file mode 100644 index 0000000..f0f5b5d --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiMemberExprImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiMemberExprImpl extends JaiExprImpl implements JaiMemberExpr { + + public JaiMemberExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitMemberExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + + @Override + @NotNull + public JaiMemberName getMemberName() { + return findNotNullChildByClass(JaiMemberName.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiMemberNameImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiMemberNameImpl.java new file mode 100644 index 0000000..2b71f2f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiMemberNameImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiMemberNameImpl extends ASTWrapperPsiElement implements JaiMemberName { + + public JaiMemberNameImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitMemberName(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiMulExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiMulExprImpl.java new file mode 100644 index 0000000..0c6e7f6 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiMulExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiMulExprImpl extends JaiExprImpl implements JaiMulExpr { + + public JaiMulExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitMulExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiNoteStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiNoteStatementImpl.java new file mode 100644 index 0000000..7dc0597 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiNoteStatementImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiNoteStatementImpl extends ASTWrapperPsiElement implements JaiNoteStatement { + + public JaiNoteStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitNoteStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiOperatorDeclarationImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiOperatorDeclarationImpl.java new file mode 100644 index 0000000..1bab492 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiOperatorDeclarationImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiOperatorDeclarationImpl extends ASTWrapperPsiElement implements JaiOperatorDeclaration { + + public JaiOperatorDeclarationImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitOperatorDeclaration(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + + @Override + @NotNull + public JaiOperatorSymbol getOperatorSymbol() { + return findNotNullChildByClass(JaiOperatorSymbol.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiOperatorSymbolImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiOperatorSymbolImpl.java new file mode 100644 index 0000000..b63a18b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiOperatorSymbolImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiOperatorSymbolImpl extends ASTWrapperPsiElement implements JaiOperatorSymbol { + + public JaiOperatorSymbolImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitOperatorSymbol(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiOrExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiOrExprImpl.java new file mode 100644 index 0000000..d1a2a3f --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiOrExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiOrExprImpl extends JaiExprImpl implements JaiOrExpr { + + public JaiOrExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitOrExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiParamNameImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiParamNameImpl.java new file mode 100644 index 0000000..1c37df4 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiParamNameImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiParamNameImpl extends ASTWrapperPsiElement implements JaiParamName { + + public JaiParamNameImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitParamName(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiParamNamesImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiParamNamesImpl.java new file mode 100644 index 0000000..fe64ad7 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiParamNamesImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiParamNamesImpl extends ASTWrapperPsiElement implements JaiParamNames { + + public JaiParamNamesImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitParamNames(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getParamNameList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiParamName.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiParameterImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiParameterImpl.java new file mode 100644 index 0000000..4e34314 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiParameterImpl.java @@ -0,0 +1,48 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiParameterImpl extends ASTWrapperPsiElement implements JaiParameter { + + public JaiParameterImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitParameter(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + + @Override + @Nullable + public JaiInitializer getInitializer() { + return findChildByClass(JaiInitializer.class); + } + + @Override + @Nullable + public JaiParamNames getParamNames() { + return findChildByClass(JaiParamNames.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiParenExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiParenExprImpl.java new file mode 100644 index 0000000..b6840be --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiParenExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiParenExprImpl extends JaiExprImpl implements JaiParenExpr { + + public JaiParenExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitParenExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiPrefixExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiPrefixExprImpl.java new file mode 100644 index 0000000..1c75b8a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiPrefixExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiPrefixExprImpl extends JaiExprImpl implements JaiPrefixExpr { + + public JaiPrefixExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitPrefixExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiPrimaryExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiPrimaryExprImpl.java new file mode 100644 index 0000000..5f3ff8c --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiPrimaryExprImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public abstract class JaiPrimaryExprImpl extends JaiExprImpl implements JaiPrimaryExpr { + + public JaiPrimaryExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitPrimaryExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiProcLiteralExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiProcLiteralExprImpl.java new file mode 100644 index 0000000..5f31609 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiProcLiteralExprImpl.java @@ -0,0 +1,60 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiProcLiteralExprImpl extends JaiExprImpl implements JaiProcLiteralExpr { + + public JaiProcLiteralExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitProcLiteralExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiBlock getBlock() { + return findChildByClass(JaiBlock.class); + } + + @Override + @NotNull + public List getParameterList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiParameter.class); + } + + @Override + @NotNull + public List getProcModifierList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiProcModifier.class); + } + + @Override + @Nullable + public JaiReturnGroup getReturnGroup() { + return findChildByClass(JaiReturnGroup.class); + } + + @Override + @NotNull + public List getReturnItemList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiReturnItem.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiProcModifierImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiProcModifierImpl.java new file mode 100644 index 0000000..f4fde3e --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiProcModifierImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiProcModifierImpl extends ASTWrapperPsiElement implements JaiProcModifier { + + public JaiProcModifierImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitProcModifier(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiBlock getBlock() { + return findChildByClass(JaiBlock.class); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiPushContextStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiPushContextStatementImpl.java new file mode 100644 index 0000000..c1bf6f1 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiPushContextStatementImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiPushContextStatementImpl extends ASTWrapperPsiElement implements JaiPushContextStatement { + + public JaiPushContextStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitPushContextStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiBlock getBlock() { + return findNotNullChildByClass(JaiBlock.class); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiRangeExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiRangeExprImpl.java new file mode 100644 index 0000000..3c09e7e --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiRangeExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiRangeExprImpl extends JaiExprImpl implements JaiRangeExpr { + + public JaiRangeExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitRangeExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiRefExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiRefExprImpl.java new file mode 100644 index 0000000..a8bf2c6 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiRefExprImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiRefExprImpl extends JaiExprImpl implements JaiRefExpr { + + public JaiRefExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitRefExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiRelationalExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiRelationalExprImpl.java new file mode 100644 index 0000000..3dfe547 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiRelationalExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiRelationalExprImpl extends JaiExprImpl implements JaiRelationalExpr { + + public JaiRelationalExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitRelationalExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiRemoveStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiRemoveStatementImpl.java new file mode 100644 index 0000000..dd2ab46 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiRemoveStatementImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiRemoveStatementImpl extends ASTWrapperPsiElement implements JaiRemoveStatement { + + public JaiRemoveStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitRemoveStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiExpr getExpr() { + return findChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnGroupImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnGroupImpl.java new file mode 100644 index 0000000..aaf1fff --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnGroupImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiReturnGroupImpl extends ASTWrapperPsiElement implements JaiReturnGroup { + + public JaiReturnGroupImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitReturnGroup(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getReturnItemList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiReturnItem.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnItemImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnItemImpl.java new file mode 100644 index 0000000..3a80804 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnItemImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiReturnItemImpl extends ASTWrapperPsiElement implements JaiReturnItem { + + public JaiReturnItemImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitReturnItem(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiInitializer getInitializer() { + return findChildByClass(JaiInitializer.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnStatementImpl.java new file mode 100644 index 0000000..f709522 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiReturnStatementImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiReturnStatementImpl extends ASTWrapperPsiElement implements JaiReturnStatement { + + public JaiReturnStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitReturnStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiShiftExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiShiftExprImpl.java new file mode 100644 index 0000000..945e47a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiShiftExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiShiftExprImpl extends JaiExprImpl implements JaiShiftExpr { + + public JaiShiftExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitShiftExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiStatementImpl.java new file mode 100644 index 0000000..e821974 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiStatementImpl.java @@ -0,0 +1,126 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiStatementImpl extends ASTWrapperPsiElement implements JaiStatement { + + public JaiStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public JaiBlock getBlock() { + return findChildByClass(JaiBlock.class); + } + + @Override + @Nullable + public JaiBreakStatement getBreakStatement() { + return findChildByClass(JaiBreakStatement.class); + } + + @Override + @Nullable + public JaiContinueStatement getContinueStatement() { + return findChildByClass(JaiContinueStatement.class); + } + + @Override + @Nullable + public JaiDeclaration getDeclaration() { + return findChildByClass(JaiDeclaration.class); + } + + @Override + @Nullable + public JaiDeferStatement getDeferStatement() { + return findChildByClass(JaiDeferStatement.class); + } + + @Override + @Nullable + public JaiDirectiveStatement getDirectiveStatement() { + return findChildByClass(JaiDirectiveStatement.class); + } + + @Override + @Nullable + public JaiExpressionStatement getExpressionStatement() { + return findChildByClass(JaiExpressionStatement.class); + } + + @Override + @Nullable + public JaiForStatement getForStatement() { + return findChildByClass(JaiForStatement.class); + } + + @Override + @Nullable + public JaiIfStatement getIfStatement() { + return findChildByClass(JaiIfStatement.class); + } + + @Override + @Nullable + public JaiNoteStatement getNoteStatement() { + return findChildByClass(JaiNoteStatement.class); + } + + @Override + @Nullable + public JaiOperatorDeclaration getOperatorDeclaration() { + return findChildByClass(JaiOperatorDeclaration.class); + } + + @Override + @Nullable + public JaiPushContextStatement getPushContextStatement() { + return findChildByClass(JaiPushContextStatement.class); + } + + @Override + @Nullable + public JaiRemoveStatement getRemoveStatement() { + return findChildByClass(JaiRemoveStatement.class); + } + + @Override + @Nullable + public JaiReturnStatement getReturnStatement() { + return findChildByClass(JaiReturnStatement.class); + } + + @Override + @Nullable + public JaiUsingStatement getUsingStatement() { + return findChildByClass(JaiUsingStatement.class); + } + + @Override + @Nullable + public JaiWhileStatement getWhileStatement() { + return findChildByClass(JaiWhileStatement.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiStructExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiStructExprImpl.java new file mode 100644 index 0000000..c6f2c5a --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiStructExprImpl.java @@ -0,0 +1,48 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiStructExprImpl extends JaiExprImpl implements JaiStructExpr { + + public JaiStructExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitStructExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiBlock getBlock() { + return findNotNullChildByClass(JaiBlock.class); + } + + @Override + @NotNull + public List getParameterList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiParameter.class); + } + + @Override + @NotNull + public List getProcModifierList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiProcModifier.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiStructLiteralExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiStructLiteralExprImpl.java new file mode 100644 index 0000000..1745c60 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiStructLiteralExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiStructLiteralExprImpl extends JaiExprImpl implements JaiStructLiteralExpr { + + public JaiStructLiteralExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitStructLiteralExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getArgumentList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiArgument.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiSwitchBodyImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiSwitchBodyImpl.java new file mode 100644 index 0000000..34d1720 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiSwitchBodyImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiSwitchBodyImpl extends ASTWrapperPsiElement implements JaiSwitchBody { + + public JaiSwitchBodyImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitSwitchBody(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getCaseClauseList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiCaseClause.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiTypedArrayLiteralExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiTypedArrayLiteralExprImpl.java new file mode 100644 index 0000000..85fc073 --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiTypedArrayLiteralExprImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiTypedArrayLiteralExprImpl extends JaiExprImpl implements JaiTypedArrayLiteralExpr { + + public JaiTypedArrayLiteralExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitTypedArrayLiteralExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getArgumentList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiArgument.class); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiTypedStructLiteralExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiTypedStructLiteralExprImpl.java new file mode 100644 index 0000000..0c60fcf --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiTypedStructLiteralExprImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiTypedStructLiteralExprImpl extends JaiExprImpl implements JaiTypedStructLiteralExpr { + + public JaiTypedStructLiteralExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitTypedStructLiteralExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getArgumentList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiArgument.class); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiUnaryDotExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiUnaryDotExprImpl.java new file mode 100644 index 0000000..75ef01b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiUnaryDotExprImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiUnaryDotExprImpl extends JaiExprImpl implements JaiUnaryDotExpr { + + public JaiUnaryDotExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitUnaryDotExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiMemberName getMemberName() { + return findNotNullChildByClass(JaiMemberName.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiUninitializedExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiUninitializedExprImpl.java new file mode 100644 index 0000000..cb3ee8b --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiUninitializedExprImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiUninitializedExprImpl extends JaiExprImpl implements JaiUninitializedExpr { + + public JaiUninitializedExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitUninitializedExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiUnionExprImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiUnionExprImpl.java new file mode 100644 index 0000000..cd8c4de --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiUnionExprImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import dev.hgh.jai.psi.*; + +public class JaiUnionExprImpl extends JaiExprImpl implements JaiUnionExpr { + + public JaiUnionExprImpl(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitUnionExpr(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiBlock getBlock() { + return findNotNullChildByClass(JaiBlock.class); + } + + @Override + @NotNull + public List getProcModifierList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiProcModifier.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiUsingStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiUsingStatementImpl.java new file mode 100644 index 0000000..31049ba --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiUsingStatementImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiUsingStatementImpl extends ASTWrapperPsiElement implements JaiUsingStatement { + + public JaiUsingStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitUsingStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getExprList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JaiExpr.class); + } + +} diff --git a/src/main/gen/dev/hgh/jai/psi/impl/JaiWhileStatementImpl.java b/src/main/gen/dev/hgh/jai/psi/impl/JaiWhileStatementImpl.java new file mode 100644 index 0000000..503ee1e --- /dev/null +++ b/src/main/gen/dev/hgh/jai/psi/impl/JaiWhileStatementImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package dev.hgh.jai.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static dev.hgh.jai.psi.JaiTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import dev.hgh.jai.psi.*; + +public class JaiWhileStatementImpl extends ASTWrapperPsiElement implements JaiWhileStatement { + + public JaiWhileStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull JaiVisitor visitor) { + visitor.visitWhileStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof JaiVisitor) accept((JaiVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public JaiExpr getExpr() { + return findNotNullChildByClass(JaiExpr.class); + } + + @Override + @NotNull + public JaiStatement getStatement() { + return findNotNullChildByClass(JaiStatement.class); + } + +} diff --git a/src/main/grammar/Jai.bnf b/src/main/grammar/Jai.bnf new file mode 100644 index 0000000..c9b3696 --- /dev/null +++ b/src/main/grammar/Jai.bnf @@ -0,0 +1,371 @@ +// Jai grammar for Grammar-Kit. +// +// Generated sources land in src/main/gen and are committed; never hand-edit them, +// run `./jaigradle generateParser` instead. +// +// Language facts come from docs/JAI_LANGUAGE_REFERENCE.md, which was derived from +// ~/.local/jai. The gate for this file is JaiCorpusParserTest: parse all 714 corpus +// files with zero PsiErrorElement. +{ + parserClass="dev.hgh.jai.parser.JaiParser" + parserUtilClass="dev.hgh.jai.parser.JaiParserUtil" + + elementTypeHolderClass="dev.hgh.jai.psi.JaiTypes" + elementTypePrefix="" + elementTypeClass="dev.hgh.jai.psi.JaiElementType" + tokenTypeClass="dev.hgh.jai.lexer.JaiTokenType" + // Reuse the lexer's token instances instead of letting Grammar-Kit mint new ones; + // see JaiTokenTypes.byName. + tokenTypeFactory="dev.hgh.jai.lexer.JaiTokenTypes.byName" + + psiPackage="dev.hgh.jai.psi" + psiImplPackage="dev.hgh.jai.psi.impl" + psiClassPrefix="Jai" + + tokens=[ + LINE_COMMENT='LINE_COMMENT' + BLOCK_COMMENT='BLOCK_COMMENT' + IDENT='IDENT' + NUMBER='NUMBER' + STRING='STRING' + HERE_STRING='HERE_STRING' + DIRECTIVE='DIRECTIVE' + NOTE='NOTE' + + KW_IF='if' + KW_XX='xx' + KW_IFX='ifx' + KW_FOR='for' + KW_THEN='then' + KW_ELSE='else' + KW_NULL='null' + KW_CASE='case' + KW_ENUM='enum' + KW_TRUE='true' + KW_CAST='cast' + KW_WHILE='while' + KW_BREAK='break' + KW_USING='using' + KW_DEFER='defer' + KW_FALSE='false' + KW_UNION='union' + KW_RETURN='return' + KW_STRUCT='struct' + KW_REMOVE='remove' + KW_INLINE='inline' + KW_SIZE_OF='size_of' + KW_TYPE_OF='type_of' + KW_CODE_OF='code_of' + KW_CONTEXT='context' + KW_CONTINUE='continue' + KW_OPERATOR='operator' + KW_TYPE_INFO='type_info' + KW_NO_INLINE='no_inline' + KW_INTERFACE='interface' + KW_ENUM_FLAGS='enum_flags' + KW_IS_CONSTANT='is_constant' + KW_PUSH_CONTEXT='push_context' + KW_INITIALIZER_OF='initializer_of' + + PLUS='+' + MINUS='-' + STAR='*' + SLASH='/' + PERCENT='%' + PLUS_EQ='+=' + MINUS_EQ='-=' + STAR_EQ='*=' + SLASH_EQ='/=' + PERCENT_EQ='%=' + EQ='=' + EQ_EQ='==' + EQ_EQ_EQ='===' + NOT_EQ='!=' + NOT='!' + LT='<' + GT='>' + LT_EQ='<=' + GT_EQ='>=' + AND_AND='&&' + OR_OR='||' + AND_AND_EQ='&&=' + OR_OR_EQ='||=' + AND='&' + OR='|' + XOR='^' + TILDE='~' + AND_EQ='&=' + OR_EQ='|=' + XOR_EQ='^=' + SHL='<<' + SHR='>>' + SHL_EQ='<<=' + SHR_EQ='>>=' + ROL='<<<' + ROR='>>>' + ROL_EQ='<<<=' + ROR_EQ='>>>=' + RIGHT_ARROW='->' + QUICK_LAMBDA='=>' + DOUBLE_DOT='..' + TRIPLE_MINUS='---' + DOUBLE_MINUS='--' + DOUBLE_COMMA=',,' + BEGIN_STRUCT_LITERAL='.{' + BEGIN_ARRAY_LITERAL='.[' + POSTFIX_DEREFERENCE='.*' + DOLLAR='$' + DOUBLE_DOLLAR='$$' + COLON=':' + COLON_COLON='::' + COLON_EQ=':=' + SEMICOLON=';' + COMMA=',' + DOT='.' + QUESTION='?' + BACKTICK='`' + BACKSLASH='\' + HASH='#' + AT='@' + LPAREN='(' + RPAREN=')' + LBRACKET='[' + RBRACKET=']' + LBRACE='{' + RBRACE='}' + ] + + extends(".*Expr")=expr +} + +jaiFile ::= statement* + +// ---------------------------------------------------------------------- statements + +statement ::= ';' + | block + | ifStatement + | whileStatement + | forStatement + | returnStatement + | breakStatement + | continueStatement + | removeStatement + | deferStatement + | pushContextStatement + | operatorDeclaration + | usingStatement + | noteStatement + | directiveStatement + | declaration + | expressionStatement + +block ::= '{' statement* '}' + +// `;` is required, except after a token that already closes the construct: `}` for +// `Foo :: struct { }` and `#run { }`, and the terminator line of a here-string for +// `BODY :: #string DONE … DONE`. `x := 1` still needs one. +private semi ::= ';' | <> + +noteStatement ::= NOTE+ + +// `#scope_file`, `#no_padding`, `#placeholder foo` … a directive that takes no operand +// is a statement on its own and carries no `;`. Directives that *do* take an operand +// (`#run f()`, `#import "Basic"`) fall through to expressionStatement, which requires +// one. +directiveStatement ::= <> [',' IDENT] [';'] + +// `#if` is spelled as a directive but is structurally an `if`, and it pairs with the +// ordinary `else` keyword (see modules/File_Watcher/module.jai). +ifStatement ::= ifKeyword_ [<>] expr (switchBody | ['then'] statement [elseClause]) +private ifKeyword_ ::= 'if' | <> +elseClause ::= 'else' statement + +// `if value == { case .A; ... }`. The `==` is consumed here rather than by the +// expression parser; see JaiParserUtil.eqEqNotSwitch. +switchBody ::= '==' '{' caseClause* '}' +caseClause ::= 'case' [expr] [';'] statement* + +whileStatement ::= 'while' [<> IDENT ':'] expr statement + +// `for < * name, index : iterable` — `<` reverses, `*` iterates by pointer, and +// `for :expansion` selects a named for_expansion. +forStatement ::= 'for' [':' expr] forModifier_* [<> forNames ':'] expr statement +private forModifier_ ::= '<' | '*' +forNames ::= IDENT (',' IDENT)* + +returnStatement ::= 'return' [expr (',' expr)*] NOTE* semi +breakStatement ::= 'break' [IDENT] semi +continueStatement ::= 'continue' [IDENT] semi +removeStatement ::= 'remove' [expr] semi +deferStatement ::= ['`'] 'defer' statement +pushContextStatement ::= ['`'] 'push_context' expr block +usingStatement ::= 'using' [',' expr] expr semi + +expressionStatement ::= expr (',' expr)* NOTE* semi + +// ------------------------------------------------------------------- declarations + +// Jai has no declaration keyword: `a : int = 1`, `a := 1`, `a :: 1`, `Foo :: struct {}` +// and `main :: () {}` are all the same shape. The guard is what separates them from +// an expression statement such as `foo();`. +declaration ::= <> declModifier_* declNames declTail_ NOTE* semi +private declModifier_ ::= <> | 'using' +declNames ::= IDENT (',' IDENT)* +private declTail_ ::= ':' [<>] [('=' | ':') initializer] + | ':=' initializer + | '::' initializer +initializer ::= '---' | expr + +// `operator + :: (a: T, b: T) -> T { }` +operatorDeclaration ::= 'operator' operatorSymbol '::' expr NOTE* semi +operatorSymbol ::= '+' | '-' | '*' | '/' | '%' | '==' | '!=' | '<' | '>' | '<=' | '>=' + | '&' | '|' | '^' | '~' | '<<' | '>>' | '<<<' | '>>>' + | '[' ']' | '[' ']' '=' + +// -------------------------------------------------------------------- expressions + +expr ::= assignExpr + | lambdaExpr + | orExpr + | andExpr + | equalityExpr + | relationalExpr + | bitOrExpr + | bitXorExpr + | bitAndExpr + | shiftExpr + | rangeExpr + | addExpr + | mulExpr + | prefixExpr + | arrayTypeExpr + | castExpr + | autoCastExpr + | inlineExpr + | ifxExpr + | callExpr + | indexExpr + | memberExpr + | derefExpr + | typedStructLiteralExpr + | typedArrayLiteralExpr + | primaryExpr + +assignExpr ::= expr assignOp_ expr { rightAssociative=true } +private assignOp_ ::= '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' + | '<<=' | '>>=' | '<<<=' | '>>>=' | '&&=' | '||=' + +lambdaExpr ::= expr '=>' expr { rightAssociative=true } + +orExpr ::= expr '||' expr +andExpr ::= expr '&&' expr +equalityExpr ::= expr (<> | '!=' | '===') expr +relationalExpr ::= expr ('<' | '>' | '<=' | '>=') expr +bitOrExpr ::= expr '|' expr +bitXorExpr ::= expr '^' expr +bitAndExpr ::= expr '&' expr +shiftExpr ::= expr ('<<' | '>>' | '<<<' | '>>>') expr +rangeExpr ::= expr '..' expr +addExpr ::= expr ('+' | '-') expr +mulExpr ::= expr ('*' | '/' | '%') expr + +// `*x` is address-of and `*T` is pointer-to-T; `..T` is variadic; `$T`/`$$x` capture +// a polymorph. See the language reference §4 and §7. +prefixExpr ::= prefixOp_ expr +private prefixOp_ ::= '-' | '+' | '!' | '~' | '*' | '..' | '$' | '$$' | '<<' | '>>' + +// `[8] int`, `[] float`, `[..] int` — array types are prefix operators on the +// element type. Distinct from indexExpr, which needs a left operand. +arrayTypeExpr ::= '[' ['..' | expr] ']' expr + +castExpr ::= 'cast' [',' IDENT] '(' [expr] ')' expr +autoCastExpr ::= 'xx' [',' IDENT] expr +inlineExpr ::= ('inline' | 'no_inline') expr +ifxExpr ::= 'ifx' expr ['then'] expr ['else' expr] + +callExpr ::= expr '(' [argList] ')' +indexExpr ::= expr '[' [expr] ']' +memberExpr ::= expr '.' memberName +derefExpr ::= expr '.*' +typedStructLiteralExpr ::= expr '.{' [argList] '}' +typedArrayLiteralExpr ::= expr '.[' [argList] ']' + +memberName ::= IDENT | NUMBER | keywordAsName_ +// A few keywords double as field names in the distribution (`context.print_style`, +// `.type`, `it.operator`), so member access accepts them. +private keywordAsName_ ::= 'if' | 'for' | 'case' | 'enum' | 'cast' | 'union' | 'struct' + | 'remove' | 'inline' | 'context' | 'operator' | 'interface' + | 'type_info' | 'using' | 'defer' | 'return' | 'break' + | 'continue' | 'then' | 'else' | 'while' | 'null' | 'true' | 'false' + +// `,,` introduces an inline context change: `join(parts,, allocator = temp)`. +private argList ::= argument ((',' | ',,') argument)* [','] +argument ::= '---' | expr + +primaryExpr ::= procLiteralExpr + | structExpr + | enumExpr + | unionExpr + | directiveExpr + | parenExpr + | structLiteralExpr + | arrayLiteralExpr + | unaryDotExpr + | backtickExpr + | builtinCallExpr + | interfaceExpr + | literalExpr + | refExpr + | uninitializedExpr + +refExpr ::= IDENT +literalExpr ::= NUMBER | STRING | HERE_STRING | 'true' | 'false' | 'null' | 'context' +uninitializedExpr ::= '---' | '--' +backtickExpr ::= '`' (IDENT | 'defer' | 'return' | 'push_context' | 'operator') +unaryDotExpr ::= '.' memberName +structLiteralExpr ::= '.{' [argList] '}' +arrayLiteralExpr ::= '.[' [argList] ']' +parenExpr ::= '(' [expr (',' expr)*] ')' +interfaceExpr ::= 'interface' [expr] + +builtinCallExpr ::= builtinName_ '(' [argList] ')' +private builtinName_ ::= 'size_of' | 'type_of' | 'type_info' | 'code_of' + | 'initializer_of' | 'is_constant' + +// ------------------------------------------------------- procedures, structs, enums + +procLiteralExpr ::= <> '(' [paramList] ')' ['->' returnTypes_] procModifier* [block] + | '->' returnTypes_ procModifier* [block] + +private paramList ::= parameter (',' parameter)* [','] +parameter ::= ['using'] parameterTail_ +private parameterTail_ ::= <> paramNames paramTypeTail_ | '..' | expr +paramNames ::= paramName (',' paramName)* +paramName ::= ['$' | '$$'] IDENT +private paramTypeTail_ ::= ':' [<>] ['=' initializer] + | ':=' initializer + | '::' initializer + +private returnTypes_ ::= <> returnGroup | returnItem (',' returnItem)* +returnGroup ::= '(' [returnItem (',' returnItem)*] ')' +returnItem ::= [<> IDENT ':'] <> ['=' initializer] + +// `#foreign lib`, `#modify { ... }`, `#c_call`, `#expand`, … +procModifier ::= <> block + | <> [',' IDENT] [expr] + | <> [',' IDENT] + +structExpr ::= 'struct' ['(' [paramList] ')'] structModifier_* block +enumExpr ::= ('enum' | 'enum_flags') [!'{' expr] structModifier_* block +unionExpr ::= 'union' structModifier_* block +private structModifier_ ::= procModifier + +// -------------------------------------------------------------------- directives + +// `#ident` is one token, so which directives take operands is decided in +// JaiParserUtil rather than here. +directiveExpr ::= <> expr [expr] + | <> [',' IDENT] block + | <> [',' IDENT] [expr] + | <> [',' IDENT] diff --git a/src/main/kotlin/dev/hgh/jai/lexer/JaiLexer.kt b/src/main/kotlin/dev/hgh/jai/lexer/JaiLexer.kt index 8e18ec2..6eb1076 100644 --- a/src/main/kotlin/dev/hgh/jai/lexer/JaiLexer.kt +++ b/src/main/kotlin/dev/hgh/jai/lexer/JaiLexer.kt @@ -302,7 +302,25 @@ open class JaiLexer : LexerBase() { return q } - private fun scanIdentifier(from: Int): Int = scanWhile(from) { continuesIdentifier(it) } + /** + * Scans an identifier body. + * + * A backslash inside an identifier is a *continuation*: the compiler's lexer + * (`Jai_Lexer/module.jai:444`) eats the `\` and any spaces after it and keeps + * appending, so `left\_margin` and `free\ _site_trace` are single identifiers. + * The token span still covers the backslash and the skipped spaces, so the Tier 0 + * round-trip invariant holds. + */ + private fun scanIdentifier(from: Int): Int { + var q = scanWhile(from) { continuesIdentifier(it) } + while (q < bufEnd && ch(q) == '\\'.code) { + var r = q + 1 + while (r < bufEnd && ch(r) == ' '.code) r++ + if (r >= bufEnd || !continuesIdentifier(ch(r))) break + q = scanWhile(r) { continuesIdentifier(it) } + } + return q + } private fun text( from: Int, diff --git a/src/main/kotlin/dev/hgh/jai/lexer/JaiTokenTypes.kt b/src/main/kotlin/dev/hgh/jai/lexer/JaiTokenTypes.kt index 33ca631..bad1e45 100644 --- a/src/main/kotlin/dev/hgh/jai/lexer/JaiTokenTypes.kt +++ b/src/main/kotlin/dev/hgh/jai/lexer/JaiTokenTypes.kt @@ -4,9 +4,17 @@ import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.TokenSet import dev.hgh.jai.JaiLanguage +/** + * A Jai token type. + * + * [text] is the name used in `Jai.bnf`'s `tokens` block — the literal spelling for + * punctuation and keywords (`"::"`, `"if"`), and an upper-case label for the + * variable-text tokens (`"IDENT"`, `"NUMBER"`). Grammar-Kit's generated `JaiTypes` + * resolves tokens by that string through [JaiTokenTypes.byName]. + */ class JaiTokenType( - debugName: String, -) : IElementType(debugName, JaiLanguage) { + val text: String, +) : IElementType(text, JaiLanguage) { override fun toString(): String = "Jai:" + super.toString() } @@ -387,4 +395,29 @@ object JaiTokenTypes { HASH, AT, ) + + /** + * `Jai.bnf` token name -> token, for the Grammar-Kit `tokenTypeFactory` hook. + * + * Without this the generated `JaiTypes` would declare its *own* + * `new JaiTokenType("IDENT")`, which is a different object from the one the lexer + * emits, so every rule would silently fail to match and the whole file would parse + * as one error element. Grammar-Kit passes the token's *text* (`"::"`, `"if"`, + * `"IDENT"`), which is exactly [JaiTokenType.text]. Built reflectively over the + * fields above so it cannot drift. + */ + private val BY_NAME: Map = + JaiTokenTypes::class.java.declaredFields + .filter { JaiTokenType::class.java.isAssignableFrom(it.type) } + .map { it.get(null) as JaiTokenType } + .associateBy { it.text } + + /** + * Looks a token up by its `Jai.bnf` name. Throws on an unknown name, so a typo in + * the grammar fails loudly at class-load time instead of parsing as garbage. + */ + @JvmStatic + fun byName(name: String): JaiTokenType = + BY_NAME[name] + ?: error("Unknown Jai token '$name'. Jai.bnf declares a token JaiTokenTypes does not define.") } diff --git a/src/main/kotlin/dev/hgh/jai/parser/JaiParserUtil.kt b/src/main/kotlin/dev/hgh/jai/parser/JaiParserUtil.kt new file mode 100644 index 0000000..9e20c71 --- /dev/null +++ b/src/main/kotlin/dev/hgh/jai/parser/JaiParserUtil.kt @@ -0,0 +1,366 @@ +package dev.hgh.jai.parser + +import com.intellij.lang.PsiBuilder +import com.intellij.lang.parser.GeneratedParserUtilBase +import com.intellij.psi.TokenType +import com.intellij.psi.tree.IElementType +import dev.hgh.jai.lexer.JaiTokenTypes as T + +/** + * Hand-written helpers referenced from `Jai.bnf` as external rules. + * + * These exist because a few Jai constructs are not expressible as pure BNF over our + * token set: + * + * - `#ident` is a single DIRECTIVE token, so "is this `#if`?" is a *text* test. + * - `if x == { case ...; }` reuses `==` as a switch introducer, so the expression + * parser must refuse `==` when a `{` follows. + * - `(` starts both a parenthesised expression and a procedure header. + * - A declaration has no introducer keyword, so `foo :: ...` vs `foo(...)` needs + * lookahead. + * + * Everything here is pure lookahead except the `dir*` family, which consume exactly + * one DIRECTIVE token. + */ +object JaiParserUtil : GeneratedParserUtilBase() { + /** + * Directives whose operand is a brace-delimited block, e.g. `#asm { ... }`. + * Tried before [DIRECTIVES_WITH_OPERAND] so `#run { ... }` takes the block form + * while `#run foo()` falls through to the expression form. + */ + private val DIRECTIVES_WITH_BLOCK = + setOf( + "asm", + "modify", + "run", + "insert", + "code", + "run_and_insert", + "compile_time", + "bytes", + "no_reset", + ) + + /** + * Directives that take a single expression operand, e.g. `#import "Basic"`. + * The operand is optional: `#foreign` appears both bare and as `#foreign lib`. + * Anything not listed here is parsed as a bare directive so that, for example, + * `#scope_file` cannot swallow the declaration that follows it. + */ + private val DIRECTIVES_WITH_OPERAND = + setOf( + "import", + "load", + "run", + "assert", + "insert", + "code", + "type", + "char", + "library", + "system_library", + "foreign_library", + "foreign_system_library", + "align", + "placeholder", + "placeholders", + "bake", + "bake_arguments", + "bake_constants", + "deprecated", + "add_context", + "module_parameters", + "place", + "procedure_of_call", + "body_text", + "version", + "poke_name", + "dump", + "foreign", + "define", + "include", + "undef", + "ifdef", + "pragma", + "elsewhere", + "expand", + "specified", + "discard", + "location", + "this", + ) + + // ---------------------------------------------------------------- directives + + /** + * Consumes the DIRECTIVE token if its text matches exactly. + * + * [text] includes the `#`: Grammar-Kit rewrites a `<>` argument into a + * reference to the `if` *token* because `'if'` is a declared token text, so the + * grammar has to say `<>`. + */ + @JvmStatic + fun dir( + b: PsiBuilder, + level: Int, + text: String, + ): Boolean { + if (b.tokenType !== T.DIRECTIVE) return false + if (b.tokenText != text) return false + b.advanceLexer() + return true + } + + /** True (without consuming) if the current token is the directive [text] (with `#`). */ + @JvmStatic + fun dirAhead( + b: PsiBuilder, + level: Int, + text: String, + ): Boolean = b.tokenType === T.DIRECTIVE && b.tokenText == text + + @JvmStatic + fun dirWithBlock( + b: PsiBuilder, + level: Int, + ): Boolean = consumeDirectiveIn(b, DIRECTIVES_WITH_BLOCK) + + @JvmStatic + fun dirWithOperand( + b: PsiBuilder, + level: Int, + ): Boolean = consumeDirectiveIn(b, DIRECTIVES_WITH_OPERAND) + + /** Any DIRECTIVE token; used for the bare `#complete` / `#scope_file` form. */ + @JvmStatic + fun dirPlain( + b: PsiBuilder, + level: Int, + ): Boolean { + if (b.tokenType !== T.DIRECTIVE) return false + b.advanceLexer() + return true + } + + /** + * A directive that takes neither an operand nor a block, so it stands alone as a + * statement without a `;` — `#scope_file`, `#no_padding`, `#compiler`. + */ + @JvmStatic + fun dirBare( + b: PsiBuilder, + level: Int, + ): Boolean { + if (b.tokenType !== T.DIRECTIVE) return false + val text = b.tokenText ?: return false + val name = text.removePrefix("#") + if (name in DIRECTIVES_WITH_OPERAND || name in DIRECTIVES_WITH_BLOCK) return false + b.advanceLexer() + return true + } + + private fun consumeDirectiveIn( + b: PsiBuilder, + names: Set, + ): Boolean { + if (b.tokenType !== T.DIRECTIVE) return false + val text = b.tokenText ?: return false + if (text.length < 2 || text.substring(1) !in names) return false + b.advanceLexer() + return true + } + + // ------------------------------------------------------------------ operators + + /** + * An expression that stops short of `=`. + * + * Needed wherever a *type* is followed by `= value`: in `a : float = 37.0` the + * type slot must yield `float`, not the assignment `float = 37.0`. Grammar-Kit + * only ever calls the expression root at the lowest priority from BNF, so this + * re-enters it one level up. + */ + @JvmStatic + fun exprNoAssign( + b: PsiBuilder, + level: Int, + ): Boolean = JaiParser.expr(b, level, ASSIGNMENT_PRIORITY) + + /** + * Consumes `==` unless a `{` follows it, because `if x == { case ...; }` is the + * switch form and the `==` belongs to the statement, not to an equality expression. + */ + @JvmStatic + fun eqEqNotSwitch( + b: PsiBuilder, + level: Int, + ): Boolean { + if (b.tokenType !== T.EQ_EQ) return false + if (b.lookAhead(1) === T.LBRACE) return false + b.advanceLexer() + return true + } + + /** + * True if the previous token already closes a construct, so no `;` is needed: + * `}` ends a block, struct or enum body, and a here-string ends on its own + * terminator line (`BODY :: #string DONE … DONE`). + */ + @JvmStatic + fun prevEndsConstruct( + b: PsiBuilder, + level: Int, + ): Boolean { + var i = -1 + while (true) { + val t: IElementType = b.rawLookup(i) ?: return false + if (t !== TokenType.WHITE_SPACE && t !== T.LINE_COMMENT && t !== T.BLOCK_COMMENT) { + return t === T.RBRACE || t === T.HERE_STRING + } + i-- + } + } + + // ------------------------------------------------------------------ lookahead + + /** + * `(`…`)` followed by `->`, a directive, or a `{` body, where the parameter list + * is either empty or contains a `:`/`$` at depth 1. Distinguishes a procedure + * header from `if (x) { }`, whose parenthesised condition looks similar. + */ + @JvmStatic + fun isProcHeaderAhead( + b: PsiBuilder, + level: Int, + ): Boolean { + if (b.tokenType !== T.LPAREN) return false + var depth = 0 + var i = 0 + var sawParamMarker = false + var empty = true + while (true) { + val t = b.lookAhead(i) ?: return false + when (t) { + T.LPAREN, T.LBRACKET, T.BEGIN_ARRAY_LITERAL, T.LBRACE, T.BEGIN_STRUCT_LITERAL -> { + depth++ + } + + T.RPAREN -> { + depth-- + if (depth == 0) { + val next = b.lookAhead(i + 1) + return when { + next === T.RIGHT_ARROW -> true + next === T.DIRECTIVE -> true + next === T.LBRACE -> empty || sawParamMarker + else -> false + } + } + } + + T.RBRACKET, T.RBRACE -> { + depth-- + } + + else -> { + if (depth == 1) { + empty = false + if (t === T.COLON || t === T.DOLLAR || t === T.DOUBLE_DOLLAR || + t === T.COLON_COLON || t === T.COLON_EQ + ) { + sawParamMarker = true + } + } + } + } + i++ + if (i > MAX_LOOKAHEAD) return false + } + } + + /** `(` that starts a parenthesised *return list*, i.e. not a procedure type. */ + @JvmStatic + fun isReturnGroupAhead( + b: PsiBuilder, + level: Int, + ): Boolean = b.tokenType === T.LPAREN && !isProcHeaderAhead(b, level) + + /** + * `[#directive|using]* IDENT (',' IDENT)* (':' | '::' | ':=')` — a declaration. + * Jai declarations have no introducer keyword, so this is what tells + * `foo :: () {}` apart from `foo();`. + */ + @JvmStatic + fun isDeclarationAhead( + b: PsiBuilder, + level: Int, + ): Boolean { + var i = 0 + while (true) { + val t = b.lookAhead(i) ?: return false + if (t === T.DIRECTIVE || t === T.KW_USING) i++ else break + } + while (true) { + if (b.lookAhead(i) !== T.IDENT) return false + i++ + when (b.lookAhead(i)) { + T.COLON, T.COLON_COLON, T.COLON_EQ -> return true + T.COMMA -> i++ + else -> return false + } + } + } + + /** `[$|$$] IDENT (',' [$|$$] IDENT)* (':' | '::' | ':=')` — a named parameter. */ + @JvmStatic + fun isParamNameAhead( + b: PsiBuilder, + level: Int, + ): Boolean { + var i = 0 + while (true) { + var t = b.lookAhead(i) + if (t === T.DOLLAR || t === T.DOUBLE_DOLLAR) { + i++ + t = b.lookAhead(i) + } + if (t !== T.IDENT) return false + i++ + when (b.lookAhead(i)) { + T.COLON, T.COLON_COLON, T.COLON_EQ -> return true + T.COMMA -> i++ + else -> return false + } + } + } + + /** `IDENT (',' IDENT)* ':'` — the named-variable prefix of a `for` header. */ + @JvmStatic + fun isForNamesAhead( + b: PsiBuilder, + level: Int, + ): Boolean { + var i = 0 + while (true) { + if (b.lookAhead(i) !== T.IDENT) return false + i++ + when (b.lookAhead(i)) { + T.COLON -> return true + T.COMMA -> i++ + else -> return false + } + } + } + + /** `IDENT ':'` — a loop label. */ + @JvmStatic + fun isLabelAhead( + b: PsiBuilder, + level: Int, + ): Boolean = b.tokenType === T.IDENT && b.lookAhead(1) === T.COLON + + private const val MAX_LOOKAHEAD = 4096 + + /** Priority of `assignExpr` in the generated expression parser; see `Jai.bnf`. */ + private const val ASSIGNMENT_PRIORITY = 0 +} diff --git a/src/main/kotlin/dev/hgh/jai/psi/JaiElementType.kt b/src/main/kotlin/dev/hgh/jai/psi/JaiElementType.kt new file mode 100644 index 0000000..f18ffad --- /dev/null +++ b/src/main/kotlin/dev/hgh/jai/psi/JaiElementType.kt @@ -0,0 +1,8 @@ +package dev.hgh.jai.psi + +import com.intellij.psi.tree.IElementType +import dev.hgh.jai.JaiLanguage + +class JaiElementType( + debugName: String, +) : IElementType(debugName, JaiLanguage) diff --git a/src/main/kotlin/dev/hgh/jai/psi/JaiFile.kt b/src/main/kotlin/dev/hgh/jai/psi/JaiFile.kt new file mode 100644 index 0000000..703edb8 --- /dev/null +++ b/src/main/kotlin/dev/hgh/jai/psi/JaiFile.kt @@ -0,0 +1,15 @@ +package dev.hgh.jai.psi + +import com.intellij.extapi.psi.PsiFileBase +import com.intellij.openapi.fileTypes.FileType +import com.intellij.psi.FileViewProvider +import dev.hgh.jai.JaiFileType +import dev.hgh.jai.JaiLanguage + +class JaiFile( + viewProvider: FileViewProvider, +) : PsiFileBase(viewProvider, JaiLanguage) { + override fun getFileType(): FileType = JaiFileType + + override fun toString(): String = "Jai File" +} diff --git a/src/main/kotlin/dev/hgh/jai/psi/JaiParserDefinition.kt b/src/main/kotlin/dev/hgh/jai/psi/JaiParserDefinition.kt new file mode 100644 index 0000000..f62da24 --- /dev/null +++ b/src/main/kotlin/dev/hgh/jai/psi/JaiParserDefinition.kt @@ -0,0 +1,36 @@ +package dev.hgh.jai.psi + +import com.intellij.lang.ASTNode +import com.intellij.lang.ParserDefinition +import com.intellij.lang.PsiParser +import com.intellij.lexer.Lexer +import com.intellij.openapi.project.Project +import com.intellij.psi.FileViewProvider +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import com.intellij.psi.tree.IFileElementType +import com.intellij.psi.tree.TokenSet +import dev.hgh.jai.JaiLanguage +import dev.hgh.jai.lexer.JaiLexer +import dev.hgh.jai.lexer.JaiTokenTypes +import dev.hgh.jai.parser.JaiParser + +class JaiParserDefinition : ParserDefinition { + override fun createLexer(project: Project?): Lexer = JaiLexer() + + override fun createParser(project: Project?): PsiParser = JaiParser() + + override fun getFileNodeType(): IFileElementType = FILE + + override fun getCommentTokens(): TokenSet = JaiTokenTypes.COMMENTS + + override fun getStringLiteralElements(): TokenSet = JaiTokenTypes.STRINGS + + override fun createElement(node: ASTNode?): PsiElement = JaiTypes.Factory.createElement(node) + + override fun createFile(viewProvider: FileViewProvider): PsiFile = JaiFile(viewProvider) + + companion object { + val FILE = IFileElementType(JaiLanguage) + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index fc7c305..f3d0ab7 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -8,7 +8,7 @@ Jai programming language.
- Syntax highlighting for .jai files. + Syntax highlighting, parsing, and editor features for .jai files. ]]>
com.intellij.modules.platform @@ -21,6 +21,8 @@ language="Jai" extensions="jai"/> + + () + val firstErrors = mutableListOf() + val histogram = mutableMapOf() + + for (file in jaiFiles) { + val text = file.readText() + val psiFile = psiFactory.createFileFromText(file.name, JaiLanguage, text) + + var fileErrors = 0 + var firstError: PsiErrorElement? = null + psiFile.accept( + object : PsiRecursiveElementWalkingVisitor() { + override fun visitErrorElement(element: PsiErrorElement) { + fileErrors++ + if (firstError == null) firstError = element + super.visitErrorElement(element) + } + }, + ) + + totalErrors += fileErrors + val error = firstError + if (error != null) { + val relative = file.relativePath(corpusDir) + filesWithErrors.add(relative) + val offset = error.textOffset + val got = snippet(text, offset).take(GOT_WIDTH) + histogram.merge(got, 1, Int::plus) + if (firstErrors.size < REPORTED_ERRORS) { + val line = text.substring(0, offset).count { it == '\n' } + 1 + firstErrors.add("$relative:$line: ${error.errorDescription} [at '$got']") + } + } + } + + val cleanFiles = jaiFiles.size - filesWithErrors.size + val percent = "%.1f".format(cleanFiles.toDouble() / jaiFiles.size * 100) + println( + "Tier 3: parsed ${jaiFiles.size} files, $cleanFiles clean ($percent%), " + + "${filesWithErrors.size} with errors, $totalErrors PsiErrorElements total.", + ) + if (histogram.isNotEmpty()) { + println(" most common token at the failure point:") + histogram.entries + .sortedByDescending { it.value } + .take(REPORTED_KINDS) + .forEach { (token, count) -> println(" %5d %s".format(count, token)) } + } + firstErrors.forEach { println(" $it") } + + assertTrue( + "Corpus parse regressed: only $cleanFiles files are clean, ratchet is $MIN_CLEAN_FILES. " + + "Raise MIN_CLEAN_FILES when the grammar improves, never lower it.", + cleanFiles >= MIN_CLEAN_FILES, + ) + } + + private fun snippet( + text: String, + offset: Int, + ): String = + text + .substring(offset, minOf(offset + 30, text.length)) + .replace("\n", "\\n") + + private fun File.relativePath(base: File): String = absolutePath.removePrefix(base.absolutePath + "/") + + private companion object { + /** Ratchet. Raise it as the grammar improves; never lower it. */ + const val MIN_CLEAN_FILES = 4 + const val REPORTED_ERRORS = 25 + const val REPORTED_KINDS = 20 + const val GOT_WIDTH = 14 + } +} diff --git a/src/test/kotlin/dev/hgh/jai/parser/JaiParserGoldenTest.kt b/src/test/kotlin/dev/hgh/jai/parser/JaiParserGoldenTest.kt new file mode 100644 index 0000000..af4fd6e --- /dev/null +++ b/src/test/kotlin/dev/hgh/jai/parser/JaiParserGoldenTest.kt @@ -0,0 +1,11 @@ +package dev.hgh.jai.parser + +class JaiParserGoldenTest : JaiParsingTestCase() { + fun testSimpleDeclarations() { + doTest(true) + } + + fun testExpressions() { + doTest(true) + } +} diff --git a/src/test/kotlin/dev/hgh/jai/parser/JaiParsingTestCase.kt b/src/test/kotlin/dev/hgh/jai/parser/JaiParsingTestCase.kt new file mode 100644 index 0000000..51ea26e --- /dev/null +++ b/src/test/kotlin/dev/hgh/jai/parser/JaiParsingTestCase.kt @@ -0,0 +1,14 @@ +package dev.hgh.jai.parser + +import com.intellij.testFramework.ParsingTestCase +import dev.hgh.jai.psi.JaiParserDefinition + +abstract class JaiParsingTestCase( + dataSubFolder: String = "", +) : ParsingTestCase(dataSubFolder, "jai", JaiParserDefinition()) { + override fun getTestDataPath(): String = "src/test/testData/parsing" + + override fun skipSpaces(): Boolean = true + + override fun includeRanges(): Boolean = true +} diff --git a/src/test/testData/parsing/Expressions.jai b/src/test/testData/parsing/Expressions.jai new file mode 100644 index 0000000..6670eb2 --- /dev/null +++ b/src/test/testData/parsing/Expressions.jai @@ -0,0 +1,2 @@ +x = a + b * c; +foo(x, y + 1); diff --git a/src/test/testData/parsing/Expressions.txt b/src/test/testData/parsing/Expressions.txt new file mode 100644 index 0000000..83ec6dd --- /dev/null +++ b/src/test/testData/parsing/Expressions.txt @@ -0,0 +1,37 @@ +Jai File(0,29) + JaiStatementImpl(STATEMENT)(0,14) + JaiExpressionStatementImpl(EXPRESSION_STATEMENT)(0,14) + JaiAssignExprImpl(ASSIGN_EXPR)(0,13) + JaiRefExprImpl(REF_EXPR)(0,1) + PsiElement(Jai:IDENT)('x')(0,1) + PsiElement(Jai:=)('=')(2,3) + JaiAddExprImpl(ADD_EXPR)(4,13) + JaiRefExprImpl(REF_EXPR)(4,5) + PsiElement(Jai:IDENT)('a')(4,5) + PsiElement(Jai:+)('+')(6,7) + JaiMulExprImpl(MUL_EXPR)(8,13) + JaiRefExprImpl(REF_EXPR)(8,9) + PsiElement(Jai:IDENT)('b')(8,9) + PsiElement(Jai:*)('*')(10,11) + JaiRefExprImpl(REF_EXPR)(12,13) + PsiElement(Jai:IDENT)('c')(12,13) + PsiElement(Jai:;)(';')(13,14) + JaiStatementImpl(STATEMENT)(15,29) + JaiExpressionStatementImpl(EXPRESSION_STATEMENT)(15,29) + JaiCallExprImpl(CALL_EXPR)(15,28) + JaiRefExprImpl(REF_EXPR)(15,18) + PsiElement(Jai:IDENT)('foo')(15,18) + PsiElement(Jai:()('(')(18,19) + JaiArgumentImpl(ARGUMENT)(19,20) + JaiRefExprImpl(REF_EXPR)(19,20) + PsiElement(Jai:IDENT)('x')(19,20) + PsiElement(Jai:,)(',')(20,21) + JaiArgumentImpl(ARGUMENT)(22,27) + JaiAddExprImpl(ADD_EXPR)(22,27) + JaiRefExprImpl(REF_EXPR)(22,23) + PsiElement(Jai:IDENT)('y')(22,23) + PsiElement(Jai:+)('+')(24,25) + JaiLiteralExprImpl(LITERAL_EXPR)(26,27) + PsiElement(Jai:NUMBER)('1')(26,27) + PsiElement(Jai:))(')')(27,28) + PsiElement(Jai:;)(';')(28,29) \ No newline at end of file diff --git a/src/test/testData/parsing/SimpleDeclarations.jai b/src/test/testData/parsing/SimpleDeclarations.jai new file mode 100644 index 0000000..6835eac --- /dev/null +++ b/src/test/testData/parsing/SimpleDeclarations.jai @@ -0,0 +1,4 @@ +a : float = 37.0; +b := 10; +c :: 42; +return a + b; diff --git a/src/test/testData/parsing/SimpleDeclarations.txt b/src/test/testData/parsing/SimpleDeclarations.txt new file mode 100644 index 0000000..44efa21 --- /dev/null +++ b/src/test/testData/parsing/SimpleDeclarations.txt @@ -0,0 +1,41 @@ +Jai File(0,49) + JaiStatementImpl(STATEMENT)(0,17) + JaiDeclarationImpl(DECLARATION)(0,17) + JaiDeclNamesImpl(DECL_NAMES)(0,1) + PsiElement(Jai:IDENT)('a')(0,1) + PsiElement(Jai::)(':')(2,3) + JaiRefExprImpl(REF_EXPR)(4,9) + PsiElement(Jai:IDENT)('float')(4,9) + PsiElement(Jai:=)('=')(10,11) + JaiInitializerImpl(INITIALIZER)(12,16) + JaiLiteralExprImpl(LITERAL_EXPR)(12,16) + PsiElement(Jai:NUMBER)('37.0')(12,16) + PsiElement(Jai:;)(';')(16,17) + JaiStatementImpl(STATEMENT)(18,26) + JaiDeclarationImpl(DECLARATION)(18,26) + JaiDeclNamesImpl(DECL_NAMES)(18,19) + PsiElement(Jai:IDENT)('b')(18,19) + PsiElement(Jai::=)(':=')(20,22) + JaiInitializerImpl(INITIALIZER)(23,25) + JaiLiteralExprImpl(LITERAL_EXPR)(23,25) + PsiElement(Jai:NUMBER)('10')(23,25) + PsiElement(Jai:;)(';')(25,26) + JaiStatementImpl(STATEMENT)(27,35) + JaiDeclarationImpl(DECLARATION)(27,35) + JaiDeclNamesImpl(DECL_NAMES)(27,28) + PsiElement(Jai:IDENT)('c')(27,28) + PsiElement(Jai:::)('::')(29,31) + JaiInitializerImpl(INITIALIZER)(32,34) + JaiLiteralExprImpl(LITERAL_EXPR)(32,34) + PsiElement(Jai:NUMBER)('42')(32,34) + PsiElement(Jai:;)(';')(34,35) + JaiStatementImpl(STATEMENT)(36,49) + JaiReturnStatementImpl(RETURN_STATEMENT)(36,49) + PsiElement(Jai:return)('return')(36,42) + JaiAddExprImpl(ADD_EXPR)(43,48) + JaiRefExprImpl(REF_EXPR)(43,44) + PsiElement(Jai:IDENT)('a')(43,44) + PsiElement(Jai:+)('+')(45,46) + JaiRefExprImpl(REF_EXPR)(47,48) + PsiElement(Jai:IDENT)('b')(47,48) + PsiElement(Jai:;)(';')(48,49) \ No newline at end of file