visitExtendOn()

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