in lib/generator.js [2134:2177]
visitExtendOn(extendOn, type = 'model') {
if (!extendOn) {
if (type === 'model') {
return this.emit('Darabonba.Model');
}
this.emit('DaraException');
this.used.push('Darabonba.Exceptions');
return;
}
let namespace = this.namespace;
let modelName = _name(extendOn);
let extendType = 'Models';
if (this.predefined[modelName] && this.predefined[modelName].isException) {
extendType = 'Exceptions';
}
if (extendOn.type === 'moduleModel') {
const [moduleId, ...rest] = extendOn.path;
namespace = this.moduleClass.get(moduleId.lexeme).namespace;
modelName = rest.map((item) => {
return item.lexeme;
}).join('.');
const usedEx = this.usedExternException.get(moduleId.lexeme);
if (usedEx && usedEx.has(modelName)) {
type = 'Exceptions';
}
} else if (extendOn.type === 'subModel') {
const [moduleId, ...rest] = extendOn.path;
modelName = [moduleId.lexeme, ...rest.map((item) => {
return item.lexeme;
})].join('.');
} else if (extendOn.idType === 'builtin_model') {
if (extendOn.lexeme === '$ResponseError') {
this.emit(this.getRealModelName('Darabonba.Exceptions', 'DaraResponseException'));
}
if (extendOn.lexeme === '$Error') {
this.emit(this.getRealModelName('Darabonba.Exceptions', 'DaraException'));
}
} else {
if (extendOn.moduleName) {
this.emit(`${extendOn.moduleName}.`);
}
this.emit(this.getRealModelName(`${namespace}.${extendType}`, modelName, extendType));
}
}