in lib/generator.js [1294:1326]
visitExtendOn(extendOn, type = 'model') {
if (!extendOn) {
const modelName = type === 'model' ? this.getRealModelName(MODEL) : this.getRealModelName(ERROR);
return this.emit(modelName);
}
let suffix = '';
let namespace = this.namespace;
let extendType = this.modelDir;
let modelName = _name(extendOn);
if(this.predefined[modelName] && this.predefined[modelName].isException) {
extendType = this.exceptionDir;
suffix = 'Exception';
}
if (extendOn.type === 'moduleModel') {
const [moduleId, ...rest] = extendOn.path;
namespace = this.moduleClass.get(moduleId.lexeme).namespace;
extendType = this.moduleClass.get(moduleId.lexeme)[`${type}Dir`];
modelName = rest.map((item) => {
return item.lexeme;
}).join('\\');
const usedEx = this.usedExternException.get(moduleId.lexeme);
if(usedEx && usedEx.has(modelName)) {
extendType = this.exceptionDir;
suffix = 'Exception';
}
} else if (extendOn.type === 'subModel') {
const [moduleId, ...rest] = extendOn.path;
modelName = [moduleId.lexeme, ...rest.map((item) => {
return item.lexeme;
})].join('\\');
}
this.emit(this.getRealModelName(`${namespace}\\${extendType}\\${modelName}${suffix}`));
}