in lib/generator.js [950:1047]
visitFieldType(value, level, fieldName) {
if (value.type === 'modelBody') {
const subModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${this.modelSpace}\\${fieldName}`);
this.emit(subModelName);
} else if (value.type === 'array') {
this.visitType(value);
} else if (value.fieldType === 'array') {
this.visitFieldType(value.fieldItemType, level, fieldName);
this.emit('[]');
} else if (value.fieldType === 'map') {
this.visitFieldType(value.valueType);
this.emit('[]');
} else if (value.type === 'map') {
this.visitFieldType(value.valueType);
this.emit('[]');
} else if (value.tag === Tag.TYPE) {
this.emit(`${this.getType(value.lexeme)}`);
} else if (value.tag === Tag.ID && value.idType === 'model') {
const modelName = _name(value);
const realModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${modelName}`);
this.emit(realModelName);
} else if (value.tag === Tag.ID && value.idType === 'module') {
let moduleName = _name(value);
if(this.builtin[moduleName]) {
moduleName = this.getType(moduleName);
} else {
moduleName = this.getRealClientName(moduleName);
}
this.emit(moduleName);
} else if (value.tag === Tag.ID && value.idType === 'builtin_model') {
const realModelName = this.getRealModelName(this.getType(value.lexeme));
this.emit(realModelName);
} else if (value.tag === Tag.ID) {
this.emit(`${value.lexeme}`);
} else if (value.type === 'moduleModel') {
const [moduleId, ...models] = value.path;
const { namespace, modelDir } = this.moduleClass.get(moduleId.lexeme);
const moduleModelName = models.map((item) => {
return item.lexeme;
}).join('\\');
const subModelName = this.getRealModelName(`${namespace}\\${modelDir}\\${moduleModelName}`);
this.emit(subModelName);
} else if (value.type === 'subModel') {
const [moduleId, ...rest] = value.path;
const subModelName = [moduleId.lexeme, ...rest.map((item) => {
return item.lexeme;
})].join('\\');
const realModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${subModelName}`);
this.emit(realModelName);
} else if (value.fieldType === 'readable' || value.fieldType === 'writable') {
const realModelName = this.getRealModelName(this.getType(value.fieldType));
this.emit(realModelName);
} else if (typeof value.fieldType === 'string') {
this.emit(`${this.getType(value.fieldType)}`);
} else if (value.fieldType.type === 'moduleModel') {
const [moduleId, ...models] = value.fieldType.path;
const { namespace, modelDir } = this.moduleClass.get(moduleId.lexeme);
const subModelName = models.map((item) => {
return item.lexeme;
}).join('\\');
const realModelName = this.getRealModelName(`${namespace}\\${modelDir}\\${subModelName}`);
this.emit(realModelName);
} 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.getType(value.fieldType.lexeme)}`);
} else if (value.fieldType.idType === 'model') {
const realModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${value.fieldType.lexeme}`);
this.emit(realModelName);
} else if (value.fieldType.idType === 'module') {
let moduleName = _name(value.fieldType);
if(this.builtin[moduleName]) {
moduleName = this.getType(moduleName);
} else {
moduleName = this.getRealClientName(moduleName);
}
this.emit(moduleName);
} else if (value.fieldType.idType === 'builtin_model') {
const realModelName = this.getRealModelName(this.getType(value.fieldType.lexeme));
this.emit(realModelName);
}
}