add support for parsing enum values

This commit is contained in:
Dave Holoway
2020-06-16 13:57:08 +01:00
parent b050f3a82d
commit f74f4b26c6
2 changed files with 107 additions and 1 deletions

View File

@@ -1,6 +1,10 @@
const { CEIType, JavaType, PrimitiveType, Field, Method, MethodBase, Constructor, Parameter, TypeVariable } = require('java-mti');
const { Token } = require('./tokenizer');
/**
* @typedef {import('./body-types').ResolvedIdent} ResolvedIdent
*/
/**
* @param {SourceType|SourceMethod|SourceConstructor|SourceInitialiser|string} scope_or_package_name
* @param {string} name
@@ -56,6 +60,18 @@ class SourceType extends CEIType {
this.fields = [];
/** @type {SourceInitialiser[]} */
this.initers = [];
/** @type {SourceEnumValue[]} */
this.enumValues = [];
}
/**
*
* @param {Token} ident
* @param {ResolvedIdent[]} ctr_args
* @param {SourceType} anonymousType
*/
addEnumValue(ident, ctr_args, anonymousType) {
this.enumValues.push(new SourceEnumValue(this, ident, ctr_args, anonymousType));
}
/**
@@ -89,6 +105,35 @@ class SourceType extends CEIType {
}
}
class SourceEnumValue extends Field {
/**
* @param {SourceType} owner
* @param {Token} ident
* @param {ResolvedIdent[]} ctr_args
* @param {SourceType} anonymousType
*/
constructor(owner, ident, ctr_args, anonymousType) {
super(['public','static','final'], '');
this.owner = owner;
this.ident = ident;
this.value = ctr_args;
this.anonymousType = anonymousType;
}
get label() {
// don't include the implicit modifiers in the label
return `${this.owner.simpleTypeName} ${this.name}`;
}
get name() {
return this.ident.value;
}
get type() {
return this.owner;
}
}
class SourceTypeIdent {
/**
* @param {Token[]} tokens