in lib/generator.js [974:1062]
visitFieldType(value, level, modelName, fieldName) {
if (value.type === 'modelBody') {
var paramName = _avoidReserveName(_upperFirst(fieldName));
const subModelName = modelName + _upperFirst(paramName);
this.emit(subModelName);
} else if (value.type === 'array') {
this.visitType(value);
} else if (value.fieldType === 'array') {
this.emit(`List<`);
this.visitFieldType(value.fieldItemType, level, modelName, fieldName);
this.emit(`>`);
} else if (value.fieldType === 'map') {
this.emit(`Dictionary<${value.keyType.lexeme}, `);
this.visitFieldType(value.valueType);
this.emit(`>`);
} else if (value.type === 'map') {
this.emit(`Dictionary<${value.keyType.lexeme}, `);
this.visitFieldType(value.valueType);
this.emit(`>`);
} else if (value.tag === Tag.TYPE) {
this.emit(`${this._type(value.lexeme)}`);
} else if (value.tag === Tag.ID && value.idType === 'model') {
const modelName = _upperFirst(_name(value));
const realModelName = this.getRealModelName(`${this.namespace}.Models`, modelName);
this.emit(realModelName);
} else if (value.tag === Tag.ID && value.idType === 'module') {
let moduleName = _upperFirst(_name(value));
moduleName = this.getRealClientName(moduleName);
this.emit(moduleName);
} else if (value.tag === Tag.ID && value.idType === 'builtin_model') {
this.emit(`${value.lexeme}`);
} else if (value.tag === Tag.ID) {
this.emit(`${value.lexeme}`);
} else if (value.type === 'moduleModel') {
const [moduleId, ...models] = value.path;
const { namespace } = this.moduleClass.get(moduleId.lexeme);
const moduleModelName = models.map((item) => {
return item.lexeme;
}).join('.');
const subModelName = this.getRealModelName(`${namespace}.Models`, moduleModelName);
this.emit(subModelName);
} else if (value.type === 'subModel') {
let tempName = '';
for (let i = 0; i < value.path.length; i++) {
if (i > 0) {
this.emit('.');
}
tempName += _upperFirst(_name(value.path[i]));
this.emit(tempName);
}
} else if (typeof value.fieldType === 'string') {
this.emit(`${this._type(value.fieldType)}`);
} else if (value.fieldType.type === 'moduleModel') {
const [moduleId, ...models] = value.fieldType.path;
this.emit(`${moduleId.lexeme}.${_subModelName(models.map((item) => item.lexeme).join('.'))}`);
} else if (value.fieldType.type === 'moduleTypedef') {
const [moduleId, modelName] = value.fieldType.path;
const moduleTypedef = this.moduleTypedef[moduleId.lexeme];
const typedef = moduleTypedef[modelName.lexeme];
if (!typedef.import) {
this.emit(typedef.type);
} else {
const typedefName = this.getRealModelName(typedef.import, typedef.type);
this.emit(typedefName);
}
} else if (value.fieldType.type === 'typedef' || value.fieldType.idType === 'typedef') {
const typedef = this.typedef[value.fieldType.lexeme];
if (!typedef.import) {
this.emit(typedef.type);
} else {
const typedefName = this.getRealModelName(typedef.import, typedef.type);
this.emit(typedefName);
}
} else if (value.fieldType.type) {
this.emit(`${this._type(value.fieldType.lexeme)}`);
} else if (value.fieldType.idType === 'model') {
const realModelName = this.getRealModelName(`${this.namespace}.Models`, value.fieldType.lexeme);
this.emit(realModelName);
} else if (value.fieldType.idType === 'module') {
let moduleName = this._type(value.fieldType.lexeme);
moduleName = this.getRealClientName(moduleName);
this.emit(moduleName);
} else if (value.fieldType.idType === 'builtin_model') {
const subModelName = this._type(value.fieldType.lexeme);
const namespace = this.getType(subModelName);
const realModelName = this.getRealModelName(namespace, subModelName);
this.emit(realModelName);
}
}