diff --git a/langserver/java/body-parser3.js b/langserver/java/body-parser3.js index bebb200..b8a68b6 100644 --- a/langserver/java/body-parser3.js +++ b/langserver/java/body-parser3.js @@ -14,8 +14,19 @@ const { resolveTypeOrPackage, resolveNextTypeOrPackage } = require('./type-resol const { genericTypeArgs, typeIdent, typeIdentList } = require('./typeident'); const { TokenList } = require("./TokenList"); const { AnyMethod, AnyType, AnyValue, ArrayLiteral, Label, LiteralNumber, LiteralValue, Local, - MethodDeclarations, ResolvedIdent, Value, ValueBase } = require("./body-types"); + 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"); +const { CastExpression } = require("./expressiontypes/CastExpression"); +const { ClassMemberExpression } = require("./expressiontypes/ClassMemberExpression"); +const { IncDecExpression } = require("./expressiontypes/IncDecExpression"); +const { LambdaExpression } = require("./expressiontypes/LambdaExpression"); +const { MemberExpression } = require("./expressiontypes/MemberExpression"); +const { MethodCallExpression } = require("./expressiontypes/MethodCallExpression"); +const { TernaryOpExpression } = require("./expressiontypes/TernaryOpExpression"); +const { ThisMemberExpression } = require("./expressiontypes/ThisMemberExpression"); /** * @typedef {SourceMethod|SourceConstructor|SourceInitialiser} SourceMC @@ -480,140 +491,6 @@ class AssertStatement extends Statement { message = null; } -class Expression extends ValueBase {} -class BinaryOpExpression extends Expression { - /** - * @param {ResolvedIdent} lhs - * @param {Token} op - * @param {ResolvedIdent} rhs - */ - constructor(lhs, op, rhs) { - super(); - this.lhs = lhs; - this.op = op; - this.rhs = rhs; - } -} -class TernaryOpExpression extends Expression { - /** - * @param {ResolvedIdent} test - * @param {ResolvedIdent} truthExpression - * @param {ResolvedIdent} falseExpression - */ - constructor(test, truthExpression, falseExpression) { - super(); - this.test = test; - this.truthExpression = truthExpression; - this.falseExpression = falseExpression; - } -} -class CastExpression extends Expression { - /** - * @param {ResolvedIdent} castType - * @param {ResolvedIdent} expression - */ - constructor(castType, expression) { - super(); - this.castType = castType; - this.expression = expression; - } -} -class BracketedExpression extends Expression { - /** - * @param {ResolvedIdent} expression - */ - constructor(expression) { - super(); - this.expression = expression; - } -} -class LambdaExpression extends Expression { - /** - * - * @param {*[]} params - * @param {Expression|Block} body - */ - constructor(params, body) { - super(); - this.params = params; - this.body = body; - } -} -class IncDecExpression extends Expression { - /** - * @param {ResolvedIdent} expr - * @param {Token} operator - * @param {'prefix'|'postfix'} which - */ - constructor(expr, operator, which) { - super(); - this.expr = expr; - this.operator = operator; - this.which = which; - } -} -class MethodCallExpression extends Expression { - /** - * @param {ResolvedIdent} instance - * @param {ResolvedIdent[]} args - */ - constructor(instance, args) { - super(); - this.instance = instance; - this.args = args; - } - -} - -class MemberExpression extends Expression { - /** - * @param {ResolvedIdent} instance - * @param {Token|null} member - */ - constructor(instance, member) { - super(); - this.instance = instance; - // member will be null for incomplete expressions - this.member = member; - } -} - -class ThisMemberExpression extends Expression { - /** - * @param {ResolvedIdent} instance - * @param {Token} this_token - */ - constructor(instance, this_token) { - super(); - this.instance = instance; - this.thisToken = this_token; - } -} - -class ClassMemberExpression extends Expression { - /** - * @param {ResolvedIdent} instance - * @param {Token} class_token - */ - constructor(instance, class_token) { - super(); - this.instance = instance; - this.classToken = class_token; - } -} - -class ArrayIndexExpression extends Expression { - /** - * @param {ResolvedIdent} instance - * @param {ResolvedIdent} index - */ - constructor(instance, index) { - super(); - this.instance = instance; - this.index = index; - } -} - /** * @param {Token[]} modifiers * @param {TokenList} tokens diff --git a/langserver/java/expressiontypes/ArrayIndexExpression.js b/langserver/java/expressiontypes/ArrayIndexExpression.js new file mode 100644 index 0000000..8d8a158 --- /dev/null +++ b/langserver/java/expressiontypes/ArrayIndexExpression.js @@ -0,0 +1,18 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Expression } = require("./Expression"); + +class ArrayIndexExpression extends Expression { + /** + * @param {ResolvedIdent} instance + * @param {ResolvedIdent} index + */ + constructor(instance, index) { + super(); + this.instance = instance; + this.index = index; + } +} + +exports.ArrayIndexExpression = ArrayIndexExpression; diff --git a/langserver/java/expressiontypes/BinaryOpExpression.js b/langserver/java/expressiontypes/BinaryOpExpression.js new file mode 100644 index 0000000..1624821 --- /dev/null +++ b/langserver/java/expressiontypes/BinaryOpExpression.js @@ -0,0 +1,21 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('../tokenizer').Token} Token + */ +const { Expression } = require("./Expression"); + +class BinaryOpExpression extends Expression { + /** + * @param {ResolvedIdent} lhs + * @param {Token} op + * @param {ResolvedIdent} rhs + */ + constructor(lhs, op, rhs) { + super(); + this.lhs = lhs; + this.op = op; + this.rhs = rhs; + } +} + +exports.BinaryOpExpression = BinaryOpExpression; diff --git a/langserver/java/expressiontypes/BracketedExpression.js b/langserver/java/expressiontypes/BracketedExpression.js new file mode 100644 index 0000000..f6fd01d --- /dev/null +++ b/langserver/java/expressiontypes/BracketedExpression.js @@ -0,0 +1,16 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Expression } = require("./Expression"); + +class BracketedExpression extends Expression { + /** + * @param {ResolvedIdent} expression + */ + constructor(expression) { + super(); + this.expression = expression; + } +} + +exports.BracketedExpression = BracketedExpression; diff --git a/langserver/java/expressiontypes/CastExpression.js b/langserver/java/expressiontypes/CastExpression.js new file mode 100644 index 0000000..f0441f5 --- /dev/null +++ b/langserver/java/expressiontypes/CastExpression.js @@ -0,0 +1,18 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Expression } = require("./Expression"); + +class CastExpression extends Expression { + /** + * @param {ResolvedIdent} castType + * @param {ResolvedIdent} expression + */ + constructor(castType, expression) { + super(); + this.castType = castType; + this.expression = expression; + } +} + +exports.CastExpression = CastExpression; diff --git a/langserver/java/expressiontypes/ClassMemberExpression.js b/langserver/java/expressiontypes/ClassMemberExpression.js new file mode 100644 index 0000000..15cefb2 --- /dev/null +++ b/langserver/java/expressiontypes/ClassMemberExpression.js @@ -0,0 +1,18 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('../tokenizer').Token} Token + */ +const { Expression } = require("./Expression"); + +class ClassMemberExpression extends Expression { + /** + * @param {ResolvedIdent} instance + * @param {Token} class_token + */ + constructor(instance, class_token) { + super(); + this.instance = instance; + this.classToken = class_token; + } +} +exports.ClassMemberExpression = ClassMemberExpression; diff --git a/langserver/java/expressiontypes/Expression.js b/langserver/java/expressiontypes/Expression.js new file mode 100644 index 0000000..d24c04f --- /dev/null +++ b/langserver/java/expressiontypes/Expression.js @@ -0,0 +1,6 @@ +const { ValueBase } = require("../body-types"); + +class Expression extends ValueBase { +} + +exports.Expression = Expression; diff --git a/langserver/java/expressiontypes/IncDecExpression.js b/langserver/java/expressiontypes/IncDecExpression.js new file mode 100644 index 0000000..67ea5cb --- /dev/null +++ b/langserver/java/expressiontypes/IncDecExpression.js @@ -0,0 +1,21 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('../tokenizer').Token} Token + */ +const { Expression } = require("./Expression"); + +class IncDecExpression extends Expression { + /** + * @param {ResolvedIdent} expr + * @param {Token} operator + * @param {'prefix'|'postfix'} which + */ + constructor(expr, operator, which) { + super(); + this.expr = expr; + this.operator = operator; + this.which = which; + } +} + +exports.IncDecExpression = IncDecExpression; diff --git a/langserver/java/expressiontypes/LambdaExpression.js b/langserver/java/expressiontypes/LambdaExpression.js new file mode 100644 index 0000000..070b9c7 --- /dev/null +++ b/langserver/java/expressiontypes/LambdaExpression.js @@ -0,0 +1,19 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('../tokenizer').Token} Token + */ +const { Expression } = require("./Expression"); + +class LambdaExpression extends Expression { + /** + * + * @param {*[]} params + * @param {Expression|Block} body + */ + constructor(params, body) { + super(); + this.params = params; + this.body = body; + } +} +exports.LambdaExpression = LambdaExpression; diff --git a/langserver/java/expressiontypes/MemberExpression.js b/langserver/java/expressiontypes/MemberExpression.js new file mode 100644 index 0000000..ae85d2f --- /dev/null +++ b/langserver/java/expressiontypes/MemberExpression.js @@ -0,0 +1,20 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('../tokenizer').Token} Token + */ +const { Expression } = require("./Expression"); + +class MemberExpression extends Expression { + /** + * @param {ResolvedIdent} instance + * @param {Token|null} member + */ + constructor(instance, member) { + super(); + this.instance = instance; + // member will be null for incomplete expressions + this.member = member; + } +} + +exports.MemberExpression = MemberExpression; diff --git a/langserver/java/expressiontypes/MethodCallExpression.js b/langserver/java/expressiontypes/MethodCallExpression.js new file mode 100644 index 0000000..ccc8256 --- /dev/null +++ b/langserver/java/expressiontypes/MethodCallExpression.js @@ -0,0 +1,18 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Expression } = require("./Expression"); + +class MethodCallExpression extends Expression { + /** + * @param {ResolvedIdent} instance + * @param {ResolvedIdent[]} args + */ + constructor(instance, args) { + super(); + this.instance = instance; + this.args = args; + } +} + +exports.MethodCallExpression = MethodCallExpression; diff --git a/langserver/java/expressiontypes/TernaryOpExpression.js b/langserver/java/expressiontypes/TernaryOpExpression.js new file mode 100644 index 0000000..6d12a75 --- /dev/null +++ b/langserver/java/expressiontypes/TernaryOpExpression.js @@ -0,0 +1,20 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + */ +const { Expression } = require("./Expression"); + +class TernaryOpExpression extends Expression { + /** + * @param {ResolvedIdent} test + * @param {ResolvedIdent} truthExpression + * @param {ResolvedIdent} falseExpression + */ + constructor(test, truthExpression, falseExpression) { + super(); + this.test = test; + this.truthExpression = truthExpression; + this.falseExpression = falseExpression; + } +} + +exports.TernaryOpExpression = TernaryOpExpression; diff --git a/langserver/java/expressiontypes/ThisMemberExpression.js b/langserver/java/expressiontypes/ThisMemberExpression.js new file mode 100644 index 0000000..3972991 --- /dev/null +++ b/langserver/java/expressiontypes/ThisMemberExpression.js @@ -0,0 +1,19 @@ +/** + * @typedef {import('../body-types').ResolvedIdent} ResolvedIdent + * @typedef {import('../tokenizer').Token} Token + */ +const { Expression } = require("./Expression"); + +class ThisMemberExpression extends Expression { + /** + * @param {ResolvedIdent} instance + * @param {Token} this_token + */ + constructor(instance, this_token) { + super(); + this.instance = instance; + this.thisToken = this_token; + } +} + +exports.ThisMemberExpression = ThisMemberExpression;