in lib/generator.js [49:117]
visit(ast, level = 0) {
assert.equal(ast.type, 'module');
this.comments = ast.comments;
this.usedExternModel = ast.usedExternModel;
this.conflictModels = ast.conflictModels;
this.eachImport(ast.imports);
this.visitPom();
if (ast.extends) {
const extendsName = _name(ast.extends);
this.extendsPackage = this.imports[extendsName].package;
}
const models = ast.moduleBody.nodes.filter((item) => {
return item.type === 'model';
});
const enums = ast.moduleBody.nodes.filter((item) => {
return item.type === 'enum';
});
this.enumMap = {};
for (let i = 0; i < enums.length; i++) {
const enumName = enums[i].enumName.lexeme;
const enumType = _type(enums[i].enumType.lexeme);
this.enumMap[enumName] = enumType;
// enum generator
const enum_generator = new EnumGenerator(enums[i], this);
enum_generator.codegen();
save(path.join(this.outputDir, 'models', `${enumName}.java`), enum_generator.output);
}
// const baseModel = new ModelGenerator(ast, this);
// baseModel.codegenRequest();
// save(path.join(this.outputDir, 'models', 'Request.java'), baseModel.output);
// baseModel.output = '';
// baseModel.codegenResponse();
// save(path.join(this.outputDir, 'models', 'Response.java'), baseModel.output);
// global definition
let model;
for (let i = 0; i < models.length; i++) {
const modelName = models[i].modelName.lexeme;
this.subModels = [];
if (ast.models) {
this.subModels = Object.keys(ast.models).filter((key) => {
return key.startsWith(modelName + '.');
}).map((key) => {
return ast.models[key];
});
}
// model generator
model = new ModelGenerator(models[i], this);
model.codegen();
save(path.join(this.outputDir, 'models', `${modelName}.java`), model.output);
}
// client generator
this.iterators = [];
const client = new ClientGenerator(ast, this);
client.codegen();
save(path.join(this.outputDir, `${this.className}.java`), client.output);
let iterator;
for (let i = 0; i < this.iterators.length; i++) {
iterator = new IteratorGenerator(this.iterators[i], this);
iterator.codegen();
save(path.join(this.outputDir, 'models', `${_name(this.iterators[i].iteratorType)}Iterator.java`), iterator.output);
}
}