From d85f49546a68f278ceaeefaa180290158cc8789b Mon Sep 17 00:00:00 2001 From: Dave Holoway Date: Wed, 17 Jun 2020 11:26:48 +0100 Subject: [PATCH] extract statement types into separate files --- langserver/java/body-parser3.js | 84 ++++--------------- .../java/expressiontypes/LambdaExpression.js | 2 +- .../java/statementtypes/AssertStatement.js | 8 ++ langserver/java/statementtypes/Block.js | 8 ++ .../java/statementtypes/BreakStatement.js | 11 +++ .../java/statementtypes/ContinueStatement.js | 11 +++ langserver/java/statementtypes/DoStatement.js | 14 ++++ .../java/statementtypes/EmptyStatement.js | 6 ++ .../java/statementtypes/ForStatement.js | 21 +++++ langserver/java/statementtypes/IfStatement.js | 15 ++++ .../java/statementtypes/InvalidStatement.js | 6 ++ .../java/statementtypes/ReturnStatement.js | 11 +++ langserver/java/statementtypes/Statement.js | 4 + .../java/statementtypes/SwitchStatement.js | 13 +++ .../statementtypes/SynchronizedStatement.js | 13 +++ .../java/statementtypes/ThrowStatement.js | 11 +++ .../java/statementtypes/TryStatement.js | 15 ++++ .../java/statementtypes/WhileStatement.js | 14 ++++ 18 files changed, 199 insertions(+), 68 deletions(-) create mode 100644 langserver/java/statementtypes/AssertStatement.js create mode 100644 langserver/java/statementtypes/Block.js create mode 100644 langserver/java/statementtypes/BreakStatement.js create mode 100644 langserver/java/statementtypes/ContinueStatement.js create mode 100644 langserver/java/statementtypes/DoStatement.js create mode 100644 langserver/java/statementtypes/EmptyStatement.js create mode 100644 langserver/java/statementtypes/ForStatement.js create mode 100644 langserver/java/statementtypes/IfStatement.js create mode 100644 langserver/java/statementtypes/InvalidStatement.js create mode 100644 langserver/java/statementtypes/ReturnStatement.js create mode 100644 langserver/java/statementtypes/Statement.js create mode 100644 langserver/java/statementtypes/SwitchStatement.js create mode 100644 langserver/java/statementtypes/SynchronizedStatement.js create mode 100644 langserver/java/statementtypes/ThrowStatement.js create mode 100644 langserver/java/statementtypes/TryStatement.js create mode 100644 langserver/java/statementtypes/WhileStatement.js diff --git a/langserver/java/body-parser3.js b/langserver/java/body-parser3.js index b8a68b6..f06fc90 100644 --- a/langserver/java/body-parser3.js +++ b/langserver/java/body-parser3.js @@ -16,6 +16,7 @@ const { TokenList } = require("./TokenList"); const { AnyMethod, AnyType, AnyValue, ArrayLiteral, Label, LiteralNumber, LiteralValue, Local, MethodDeclarations, ResolvedIdent, Value, } = require("./body-types"); const { resolveImports, resolveSingleImport } = require('../java/import-resolver'); + const { ArrayIndexExpression } = require("./expressiontypes/ArrayIndexExpression"); const { BinaryOpExpression } = require("./expressiontypes/BinaryOpExpression"); const { BracketedExpression } = require("./expressiontypes/BracketedExpression"); @@ -28,6 +29,22 @@ const { MethodCallExpression } = require("./expressiontypes/MethodCallExpression const { TernaryOpExpression } = require("./expressiontypes/TernaryOpExpression"); const { ThisMemberExpression } = require("./expressiontypes/ThisMemberExpression"); +const { AssertStatement } = require("./statementtypes/AssertStatement"); +const { Block } = require("./statementtypes/Block"); +const { BreakStatement } = require("./statementtypes/BreakStatement"); +const { ContinueStatement } = require("./statementtypes/ContinueStatement"); +const { DoStatement } = require("./statementtypes/DoStatement"); +const { EmptyStatement } = require("./statementtypes/EmptyStatement"); +const { ForStatement } = require("./statementtypes/ForStatement"); +const { IfStatement } = require("./statementtypes/IfStatement"); +const { InvalidStatement } = require("./statementtypes/InvalidStatement"); +const { ReturnStatement } = require("./statementtypes/ReturnStatement"); +const { SwitchStatement } = require("./statementtypes/SwitchStatement"); +const { SynchronizedStatement } = require("./statementtypes/SynchronizedStatement"); +const { ThrowStatement } = require("./statementtypes/ThrowStatement"); +const { TryStatement } = require("./statementtypes/TryStatement"); +const { WhileStatement } = require("./statementtypes/WhileStatement"); + /** * @typedef {SourceMethod|SourceConstructor|SourceInitialiser} SourceMC * @typedef {SourceType|SourceMC} Scope @@ -424,73 +441,6 @@ function statement(tokens, mdecls, method, imports, typemap) { return new InvalidStatement(); } -class Statement {} -class EmptyStatement extends Statement {} -class SwitchStatement extends Statement { - /** @type {ResolvedIdent} */ - test = null; - cases = []; - caseBlocks = []; -} -class Block extends Statement { - statements = []; -} -class TryStatement extends Statement { - resources = []; - block = null; - catches = []; -} -class IfStatement extends Statement { - test = null; - statement = null; - elseStatement = null; -} -class WhileStatement extends Statement { - test = null; - statement = null; -} -class BreakStatement extends Statement { - /** @type {Token} */ - target = null; -} -class ContinueStatement extends Statement { - /** @type {Token} */ - target = null; -} -class DoStatement extends Statement { - test = null; - block = null; -} -class ReturnStatement extends Statement { - expression = null; -} -class ThrowStatement extends Statement { - expression = null; -} -class InvalidStatement extends Statement {} -class ForStatement extends Statement { - /** @type {ResolvedIdent[] | Local[]} */ - init = null; - /** @type {ResolvedIdent} */ - test = null; - /** @type {ResolvedIdent[]} */ - update = null; - /** @type {ResolvedIdent} */ - iterable = null; - /** @type {Statement} */ - statement = null; -} -class SynchronizedStatement extends Statement { - /** @type {ResolvedIdent} */ - expression = null; - /** @type {Statement} */ - statement = null; -} -class AssertStatement extends Statement { - expression = null; - message = null; -} - /** * @param {Token[]} modifiers * @param {TokenList} tokens diff --git a/langserver/java/expressiontypes/LambdaExpression.js b/langserver/java/expressiontypes/LambdaExpression.js index 070b9c7..07005c7 100644 --- a/langserver/java/expressiontypes/LambdaExpression.js +++ b/langserver/java/expressiontypes/LambdaExpression.js @@ -1,6 +1,6 @@ /** * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent - * @typedef {import('../tokenizer').Token} Token + * @typedef {import('../statementtypes/Block').Block} Block */ const { Expression } = require("./Expression"); diff --git a/langserver/java/statementtypes/AssertStatement.js b/langserver/java/statementtypes/AssertStatement.js new file mode 100644 index 0000000..72d65f4 --- /dev/null +++ b/langserver/java/statementtypes/AssertStatement.js @@ -0,0 +1,8 @@ +const { Statement } = require("./Statement"); + +class AssertStatement extends Statement { + expression = null; + message = null; +} + +exports.AssertStatement = AssertStatement; diff --git a/langserver/java/statementtypes/Block.js b/langserver/java/statementtypes/Block.js new file mode 100644 index 0000000..c2df786 --- /dev/null +++ b/langserver/java/statementtypes/Block.js @@ -0,0 +1,8 @@ +const { Statement } = require("./Statement"); + +class Block extends Statement { + /** @type {Statement[]} */ + statements = []; +} + +exports.Block = Block; diff --git a/langserver/java/statementtypes/BreakStatement.js b/langserver/java/statementtypes/BreakStatement.js new file mode 100644 index 0000000..98867c1 --- /dev/null +++ b/langserver/java/statementtypes/BreakStatement.js @@ -0,0 +1,11 @@ +/** + * @typedef {import('../tokenizer').Token} Token + */ +const { Statement } = require("./Statement"); + +class BreakStatement extends Statement { + /** @type {Token} */ + target = null; +} + +exports.BreakStatement = BreakStatement; diff --git a/langserver/java/statementtypes/ContinueStatement.js b/langserver/java/statementtypes/ContinueStatement.js new file mode 100644 index 0000000..466ea42 --- /dev/null +++ b/langserver/java/statementtypes/ContinueStatement.js @@ -0,0 +1,11 @@ +/** + * @typedef {import('../tokenizer').Token} Token + */ +const { Statement } = require("./Statement"); + +class ContinueStatement extends Statement { + /** @type {Token} */ + target = null; +} + +exports.ContinueStatement = ContinueStatement; diff --git a/langserver/java/statementtypes/DoStatement.js b/langserver/java/statementtypes/DoStatement.js new file mode 100644 index 0000000..15a1dd3 --- /dev/null +++ b/langserver/java/statementtypes/DoStatement.js @@ -0,0 +1,14 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('./Block').Block} Block + */ +const { Statement } = require("./Statement"); + +class DoStatement extends Statement { + /** @type {ResolvedIdent} */ + test = null; + /** @type {Block} */ + block = null; +} + +exports.DoStatement = DoStatement; diff --git a/langserver/java/statementtypes/EmptyStatement.js b/langserver/java/statementtypes/EmptyStatement.js new file mode 100644 index 0000000..6fc8feb --- /dev/null +++ b/langserver/java/statementtypes/EmptyStatement.js @@ -0,0 +1,6 @@ +const { Statement } = require("./Statement"); + +class EmptyStatement extends Statement { +} + +exports.EmptyStatement = EmptyStatement; diff --git a/langserver/java/statementtypes/ForStatement.js b/langserver/java/statementtypes/ForStatement.js new file mode 100644 index 0000000..ccaca4b --- /dev/null +++ b/langserver/java/statementtypes/ForStatement.js @@ -0,0 +1,21 @@ +/** + * @typedef {import('../body-types').Local} Local + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('../tokenizer').Token} Token + */ +const { Statement } = require("./Statement"); + +class ForStatement extends Statement { + /** @type {ResolvedIdent[] | Local[]} */ + init = null; + /** @type {ResolvedIdent} */ + test = null; + /** @type {ResolvedIdent[]} */ + update = null; + /** @type {ResolvedIdent} */ + iterable = null; + /** @type {Statement} */ + statement = null; +} + +exports.ForStatement = ForStatement; diff --git a/langserver/java/statementtypes/IfStatement.js b/langserver/java/statementtypes/IfStatement.js new file mode 100644 index 0000000..37d27cc --- /dev/null +++ b/langserver/java/statementtypes/IfStatement.js @@ -0,0 +1,15 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Statement } = require("./Statement"); + +class IfStatement extends Statement { + /** @type {ResolvedIdent} */ + test = null; + /** @type {Statement} */ + statement = null; + /** @type {Statement} */ + elseStatement = null; +} + +exports.IfStatement = IfStatement; diff --git a/langserver/java/statementtypes/InvalidStatement.js b/langserver/java/statementtypes/InvalidStatement.js new file mode 100644 index 0000000..b5e29ea --- /dev/null +++ b/langserver/java/statementtypes/InvalidStatement.js @@ -0,0 +1,6 @@ +const { Statement } = require("./Statement"); + +class InvalidStatement extends Statement { +} + +exports.InvalidStatement = InvalidStatement; diff --git a/langserver/java/statementtypes/ReturnStatement.js b/langserver/java/statementtypes/ReturnStatement.js new file mode 100644 index 0000000..32666e1 --- /dev/null +++ b/langserver/java/statementtypes/ReturnStatement.js @@ -0,0 +1,11 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Statement } = require("./Statement"); + +class ReturnStatement extends Statement { + /** @type {ResolvedIdent} */ + expression = null; +} + +exports.ReturnStatement = ReturnStatement; diff --git a/langserver/java/statementtypes/Statement.js b/langserver/java/statementtypes/Statement.js new file mode 100644 index 0000000..cffe6cf --- /dev/null +++ b/langserver/java/statementtypes/Statement.js @@ -0,0 +1,4 @@ +class Statement { +} + +exports.Statement = Statement; diff --git a/langserver/java/statementtypes/SwitchStatement.js b/langserver/java/statementtypes/SwitchStatement.js new file mode 100644 index 0000000..5d2f58b --- /dev/null +++ b/langserver/java/statementtypes/SwitchStatement.js @@ -0,0 +1,13 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Statement } = require("./Statement"); + +class SwitchStatement extends Statement { + /** @type {ResolvedIdent} */ + test = null; + cases = []; + caseBlocks = []; +} + +exports.SwitchStatement = SwitchStatement; diff --git a/langserver/java/statementtypes/SynchronizedStatement.js b/langserver/java/statementtypes/SynchronizedStatement.js new file mode 100644 index 0000000..1316373 --- /dev/null +++ b/langserver/java/statementtypes/SynchronizedStatement.js @@ -0,0 +1,13 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Statement } = require("./Statement"); + +class SynchronizedStatement extends Statement { + /** @type {ResolvedIdent} */ + expression = null; + /** @type {Statement} */ + statement = null; +} + +exports.SynchronizedStatement = SynchronizedStatement; diff --git a/langserver/java/statementtypes/ThrowStatement.js b/langserver/java/statementtypes/ThrowStatement.js new file mode 100644 index 0000000..70a8e93 --- /dev/null +++ b/langserver/java/statementtypes/ThrowStatement.js @@ -0,0 +1,11 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Statement } = require("./Statement"); + +class ThrowStatement extends Statement { + /** @type {ResolvedIdent} */ + expression = null; +} + +exports.ThrowStatement = ThrowStatement; diff --git a/langserver/java/statementtypes/TryStatement.js b/langserver/java/statementtypes/TryStatement.js new file mode 100644 index 0000000..48f6ecd --- /dev/null +++ b/langserver/java/statementtypes/TryStatement.js @@ -0,0 +1,15 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('./Block').Block} Block + */ +const { Statement } = require("./Statement"); + +class TryStatement extends Statement { + /** @type {ResolvedIdent[]} */ + resources = []; + /** @type {Block} */ + block = null; + catches = []; +} + +exports.TryStatement = TryStatement; diff --git a/langserver/java/statementtypes/WhileStatement.js b/langserver/java/statementtypes/WhileStatement.js new file mode 100644 index 0000000..3a754b1 --- /dev/null +++ b/langserver/java/statementtypes/WhileStatement.js @@ -0,0 +1,14 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('./Block').Block} Block + */ +const { Statement } = require("./Statement"); + +class WhileStatement extends Statement { + /** @type {ResolvedIdent} */ + test = null; + /** @type {Statement} */ + statement = null; +} + +exports.WhileStatement = WhileStatement;