in lib/generator.js [310:413]
visitModule(ast, level) {
assert.equal(ast.type, 'module');
const nonStaticWraps = ast.moduleBody.nodes.filter((item) => {
return item.type === 'function' && !item.isStatic;
});
const apis = ast.moduleBody.nodes.filter((item) => {
return item.type === 'api';
});
const models = ast.moduleBody.nodes.filter((item) => {
return item.type === 'model';
});
const types = ast.moduleBody.nodes.filter((item) => {
return item.type === 'type';
});
const init = ast.moduleBody.nodes.filter((item) => {
return item.type === 'init';
});
this.comments = ast.comments;
var extendParam = {};
if (nonStaticWraps.length > 0 || apis.length > 0) {
extendParam.writeConstruct = true;
}
if (models.length > 0) {
extendParam.writeImport = true;
}
this.predefined = ast.predefined;
this.eachImport(ast.imports, ast.usedExternModel, level);
this.visitPom();
if (this.implements) {
this.visitInterface(nonStaticWraps, apis, level);
}
// global definition
for (let i = 0; i < models.length; i++) {
const modelName = models[i].modelName.lexeme;
this.modelBefore(level, modelName);
this.eachModel(models[i], level);
if (ast.models) {
const subModels = Object.keys(ast.models).filter((key) => {
return key.startsWith(modelName + '.');
}).map((key) => {
return ast.models[key];
});
for (let i = 0; i < subModels.length; i++) {
this.eachSubModel(subModels[i], level + 1);
}
}
this.emit('}\n', level);
this.save('models/' + modelName + '.java');
}
// models definition
var extendsClass;
if (ast.extends) {
var extendsName = _name(ast.extends);
extendsClass = {};
extendsClass.className = this.imports[extendsName].className || 'Client';
extendsClass.package = this.imports[extendsName].package;
}
this.apiBefore(extendParam, extendsClass, apis.length > 0, level);
// creat class field
for (let i = 0; i < types.length; i++) {
this.emit('\n');
this.eachType(types[i], level + 1);
}
// creat contructor
for (let i = 0; i < init.length; i++) {
this.emit('\n');
this.eachInit(init[i], level + 1);
}
for (let i = 0; i < apis.length; i++) {
if (i !== 0) {
this.emit('\n');
}
this.eachAPI(apis[i], level + 1);
}
this.apiAfter(apis.length > 0, level + 1);
this.wrapBefore(level);
const functions = ast.moduleBody.nodes.filter((item) => {
return item.type === 'function';
});
for (let i = 0; i < functions.length; i++) {
if (i !== 0) {
this.emit('\n');
}
this.eachFunction(functions[i], level + 1);
}
this.emit('}\n');
let outPutclassName = this.className || 'Client';
this.save(outPutclassName + '.java');
}