visitExtendOn()

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}`));
  }